Sie sind auf Seite 1von 12

Mostrando los programas. Mtodo de la falsa posicin.

/*el programa te calcula una solucion de de una ecuacion por el metodo de la falsa posicion Antezana Lopez Israel Version 1.0*/ //definir bibliotecas y constantes globales #include<stdio.h> #include<math.h> FILE *fp; //definir una funcion cualquiera double f (double x) { double y; y=2*(x*x)+(3*x)-5; return y; } //definir la funcion que calcula la solucion por el metodo de la falsa posicion double metododelafalsaposicion (double xs, double xi, double error) { double x, xa, E; int i=0; E=1000; xa=xs; fp=fopen("datosdelmetododelafalsaposicion.dat","w"); fprintf(fp,"interaccion valor error\n"); while(E>=error) { x=((f(xs)*xi)-(f(xi)*xs))/(f(xs)-f(xi)); E=x-xa; if(E<0) { E*=-1; } if(f(x)==0) { E=0; } else if ((f(x)*f(xs))<0) { xi=x; } else { xs=x; } i=i+1; fprintf(fp,"%d %lf %lf\n", i, x, E); xa=x; } return x;

fclose(fp); } //funcion principal main() { double xi, xs, error; int i; system("clear"); printf(" **********INICIO DEL PROGRAMA**********\n\n"); i=0; printf("ingrese el rango superior de x: "); scanf("%lf", &xs); printf("ingrese el rango inferiorr de x: "); scanf("%lf", &xi); if((f(xi)*f(xs))<0) { i=1; } while(i==0) { printf("el rango dado no contiene una posible solucion vuelva a intentarlo\n"); printf("ingrese el rango superior de x: "); scanf("%lf", &xs); printf("ingrese el rango inferiorr de x: "); scanf("%lf", &xi); if((f(xi)*f(xs))<0) { i=1; } } printf("con que error desea el valor en porcentaje: "); scanf("%lf",&error); error=error/100; printf("la solucion f(%lf)=0 con un error de %lf", metododelafalsaposicion(xs,xi,error), error); printf("\n\n **********FIN DEL PROGRAMA**********\n\n"); }

Mtodo del punto iterativo


/*el programa te calcula una solucion de de una ecuacion por el metodo del punto iterativo Antezana Lopez Israel Version 1.0*/ //definir bibliotecas y constantes globales #include<stdio.h> #include<math.h> FILE *fp; double R[500]; //definir una funcion cualquiera double g (double x) { double y; y=sqrt((5-3*x)/2); return y;

} //definir la funcion que calcula la solucion por el metodo del punto iterativo double metododelpuntoiterativo (double x0, double error) { double E, d1, d2; int i=0, c=0; E=1000; R[i]=x0; R[500]=0; fp=fopen("datosdelmetododelpuntoiterativo.dat","w"); fprintf(fp,"interaccion valor error\n"); while(E>=error && c==0) { R[i+1]=g(R[i]); E=(R[i+1]-R[i])/R[i]; if(E<0) { E*=-1; } i+=1; if (i==3) { d1=R[1]-R[0]; d2=R[i]-R[i-1]; if(d1<0) { d1*=-1; } if(d2<0) { d2*=-1; } if(d2>d1) { c=1; R[500]=c; } } fprintf(fp,"%d %lf %lf\n", i, R[i],E); } return R[i]; fclose(fp); } //funcion principal main() { double x0, error, sol; system("clear"); printf(" **********INICIO DEL PROGRAMA**********\n\n"); printf("ingrese el valor proximo a la solucion: "); scanf("%lf", &x0); printf("con que error desea el valor en porcentaje: "); scanf("%lf",&error); error=error/100; AND=&&

sol=metododelpuntoiterativo(x0,error); if (R[500]==1) { printf("el despeje de la funcion no es apropiada para dicho metodo"); } else { printf("la solucion f(%lf)=0 con un error de %lf",sol, error*100); } printf("\n\n **********FIN DEL PROGRAMA**********\n\n"); }

Mtodo de Newton Raphson


/*el programa te calcula una solucion de de una ecuacion por el metodo de Newton Raphson Antezana Lopez Israel Version 1.0*/ //definir bibliotecas y constantes globales #include<stdio.h> #include<math.h> FILE *fp; //definir una funcion cualquiera double f (double x) { double y; y=2*(x*x)+(3*x)-5; return y; } //definir la funcion derivada de la funcion cualquiera double df (double x) { double y; y=4*x+3; return y; } //definir la funcion que calcula la solucion por el metodo de newton raphson double metododenewtonraphson (double x0, double error) { double x, E; int i=0; E=1000; fp=fopen("datosdelmetododenewtonraphson.dat","w"); fprintf(fp,"interaccion valor error\n"); while(E>=error) { x=x0-(f(x0)/df(x0)); E=(x-x0)/x0; if(E<0) { E*=-1; } i=i+1;

fprintf(fp,"%d x0=x; } return x; fclose(fp); }

%lf

%lf\n", i, x, E);

//funcion principal main() { double x0, error; system("clear"); printf(" **********INICIO DEL PROGRAMA**********\n\n"); printf("ingrese el valor aproximado de la solucion de x: "); scanf("%lf", &x0); printf("con que error desea el valor en porcentaje: "); scanf("%lf",&error); error=error/100; printf("la solucion f(%lf)=0 con un error de %lf", metododenewtonraphson(x0,error), error*100); printf("\n\n **********FIN DEL PROGRAMA**********\n\n"); }

Mtodo de la secante
/*el programa te calcula una solucion de de una ecuacion por el metodo de la secante Antezana Lopez Israel Version 1.0*/ //definir bibliotecas y constantes globales #include<stdio.h> #include<math.h> FILE *fp; //definir una funcion cualquiera double f (double x) { double y; y=2*(x*x)+(3*x)-5; return y; } //definir la funcion derivada de la funcion cualquiera por la definicion de derivada double df (double x) { double y; y=(f(x+0.001)-f(x))/0.001; return y; } //definir la funcion que calcula la solucion por el metodo de la secante double metododelasecante (double x0, double error) { double x, E; int i=0; E=1000; fp=fopen("datosdelmetododelasecante.dat","w");

fprintf(fp,"interaccion while(E>=error) { x=x0-(f(x0)/df(x0)); E=(x-x0)/x0; if(E<0) { E*=-1; } i=i+1; fprintf(fp,"%d x0=x; } return x; fclose(fp); }

valor

error\n");

%lf

%lf\n", i, x, E);

//funcion principal main() { double x0, error; system("clear"); printf(" **********INICIO DEL PROGRAMA**********\n\n"); printf("ingrese el valor aproximado de la solucion de x: "); scanf("%lf", &x0); printf("con que error desea el valor en porcentaje: "); scanf("%lf",&error); error=error/100; printf("la solucion f(%lf)=0 con un error de %lf", metododelasecante(x0,error), error*100); printf("\n\n **********FIN DEL PROGRAMA**********\n\n"); }

Imprimiendo resultados Mtodo de la falsa posicin


**********INICIO DEL PROGRAMA********** ingrese el rango superior de x: 5 ingrese el rango inferiorr de x: 0 con que error desea el valor en porcentaje: 0.001 la solucion f(0.999991)=0 con un error de 0.000010 **********FIN DEL PROGRAMA********** interaccion valor 1 0.384615 2 0.642458 3 0.799765 4 0.890279 5 0.940613 6 0.968074 7 0.982900 8 0.990859 9 0.995119 error 4.615385 0.257843 0.157307 0.090514 0.050334 0.027461 0.014826 0.007959 0.004260

10 11 12 13 14 15 16 17 18 19

0.997395 0.998610 0.999259 0.999605 0.999789 0.999888 0.999940 0.999968 0.999983 0.999991

0.002276 0.001215 0.000648 0.000346 0.000185 0.000098 0.000052 0.000028 0.000015 0.000008

La grafica en GNUplot

Mtodo del punto iterativo


**********INICIO DEL PROGRAMA********** ingrese el valor proximo a la solucion: 1.5 con que error desea el valor en porcentaje: 0.001 la solucion f(1.000004)=0 con un error de 0.001000 **********FIN DEL PROGRAMA********** interaccion valor error 1 0.500000 0.666667 2 1.322876 1.645751 3 0.718113 0.457157 4 1.192824 0.661054 5 0.843068 0.293217 6 1.111485 0.318381 7 0.912564 0.178969 8 1.063557 0.165461 9 0.951138 0.105701 10 1.035998 0.089219 11 0.972627 0.061170 12 1.020324 0.049039 13 0.984639 0.034973 14 1.011455 0.027234 15 0.991372 0.019856 16 1.006450 0.015210 17 0.995150 0.011228

18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

1.003631 0.997273 1.002043 0.998467 1.001149 0.999138 1.000647 0.999515 1.000364 0.999727 1.000205 0.999847 1.000115 0.999914 1.000065 0.999951 1.000036 0.999973 1.000020 0.999985 1.000012 0.999991 1.000006 0.999995 1.000004

0.008522 0.006334 0.004783 0.003569 0.002687 0.002009 0.001510 0.001131 0.000849 0.000636 0.000478 0.000358 0.000269 0.000201 0.000151 0.000113 0.000085 0.000064 0.000048 0.000036 0.000027 0.000020 0.000015 0.000011 0.000009

La grafica en GNUplot

Mtodo de Newton Raphson


**********INICIO DEL PROGRAMA********** ingrese el valor aproximado de la solucion de x: 2 con que error desea el valor en porcentaje: 0.001 la solucion f(1.000000)=0 con un error de 0.001000 **********FIN DEL PROGRAMA********** interaccion valor 1 1.181818 2 1.008556 3 1.000021 4 1.000000 error 0.409091 0.146606 0.008463 0.000021

1.000000

0.000000

La grafica en GNUplot

Mtodo de la secante
**********INICIO DEL PROGRAMA********** ingrese el valor aproximado de la solucion de x: 2 con que error desea el valor en porcentaje: 0.001 la solucion f(1.000000)=0 con un error de 0.001000 **********FIN DEL PROGRAMA********** interaccion valor 1 1.181967 2 1.008614 3 1.000024 4 1.000000 5 1.000000 error 0.409017 0.146664 0.008517 0.000024 0.000000

La grafica en GNUplot

Algunas Observaciones
Las graficas de los 2 ltimos mtodos vale decir que son idnticas ya que son realmente parecidas lo nico que cambio en el programa es que una usa una funcin derivada mas la otra es con la definicin de la derivada solo que ya no es el limite de la variacion tiende

a 0 sino a un valor dado (0.001) pero este es pequeo as que sigue siendo un razonamiento valido, el caso mas especial es el de punto iterativo ya que la funcin g(x) que replanteaba a f(x) su condicin era que la derivada en el punto sea menor a 1 en valor absoluto generando 1 problema que se mostrara a continuacin

> > >

>

>

>

>

>

>

como se ve se genero 4 funciones las cuales solo la ultima cumple con dicha condicin pero el problema que posee es que esta es imaginaria para trminos mayores a 1.67 lo cual es un impedimento para analizarla las dems funciones las dems tampoco ayudan ya que nunca se hallara la solucin una forma de ver si cumple a parte de la derivada es que la distancia entre puntos denominados solucin se hacen cada vez mas pequeos, criterios de convergencia, en este mtodo es necesario mostrar que la solucin dada x grafica de las 4 g(x) es uno lo que comprueba y verifica todos los resultados (se uso la misma funcin para todos los casos) y los dos ltimos mtodos pareciesen ser los mas efectivos, ya que estos llegan al resultado con mayor rapidez.

Universidad mayor de San Simn Facultad de Ciencias y Tecnologa Licenciatura en Fsica

Antezana Lpez Israel Semestre I 2012 Lic. Ivan Ruiz.

Das könnte Ihnen auch gefallen