Beruflich Dokumente
Kultur Dokumente
/*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"); }
} //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"); }
%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"); }
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
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
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.