Vous êtes sur la page 1sur 4

Prctica 1

Mtodo de Biseccin
Objetivo: Programar y probar el Mtodo de Biseccin para la Solucin de Ecuaciones Algebraicas Metodologa: 1.- Implementar en el lenguaje de su eleccin el pseudocdigo del Mtodo de Biseccin del siguiente listado: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. xr=0,i=1,ea=100 while(i<=imax) xr_anterior=xr xr= (xi+xs)/2 Si xr<>0 entonces ea=abs((xr-xr_anterior)/xr)100 Si ea<es entonces Sale del ciclo while fxi=f(xi) fxr=f(xr) p=fxifxr Si p<0 entonces xs=xr Si p>0 entonces xi=xr Si p=0 entonces Sale del ciclo while i=i+1 Termina ciclo while Parmetros de Entrada: xi - Lmite inferior xs - Lmite superior es - Error permisible imax - Nmero mximo de iteraciones f - Funcin

Parmetros de Salida: xr - Raz calculada ea - Error aproximado i - Nmero de iteraciones

2.- Probar su programa con el siguiente ejemplo y completar la tabla con los resultados obtenidos para las primeras 6 iteraciones usando como datos de entrada xi=12, xs=16, es=0.5 e imax=100.

f ( x)

667.38 1 e0.146843x 40 x
xs 16.000000 16.000000 15.000000 15.000000 15.000000 14.875000 xr 14.000000 15.000000 14.500000 14.750000 14.875000 14.812500 ea 100.000000 6.666667 3.448276 1.694915 0.840336 0.421941

Iteracin 1 2 3 4 5 6

xi 12.000000 14.000000 14.000000 14.500000 14.750000 14.750000

Observaciones. Al realizar la compilacin del programa no apareci ningn error, pero la impresin de los datos era errnea, uno de mis errores fue poner un punto y coma al final de una declaracin if, la consecuencia de eso es que no se realizo ningn clculo simplemente arrojo los datos de entrada. Otro de mis errores fue que agregue un printf despus del primer break del ciclo y aunque me imprima los valores faltaba la ltima iteracin, la solucin fue quitarlo de esa posicin y colocarlo dos lneas ms arriba del cdigo de donde se encontraba. Conclusiones Se debe tener cuidado en la realizacin de programas como este para que el resultado sea el correcto, siendo as el tener resultados por una computadora correctamente programada aminora el tiempo para la obtencin de resultados, que serian muy tediosos realizando el clculo manualmente, teniendo en consideracin tambin de que los resultados son ms fiables que si realizramos este procedimiento con el ultimo mtodo aqu mencionado.

Cdigo del mtodo. /*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*/ /*.*.*.*.* /*.*.*.*.* Archivo: Biseccion.c *.*.*.*.*/ *.*.*.*.*/ *.*.*.*.*/ *.*.*.*.*/

/*.*.*.*.* Este archivo contiene la funcion /*.*.*.*.* del metodo de biseccion para la /*.*.*.*.* *.*.*.*.*/

/*.*.*.*.* solucion de ecuaciones algebraicas. *.*.*.*.*/ /*.*.*.*.* Curso: Metodos Numericos *.*.*.*.*/

/*.*.*.*.* Fecha de revision: 17.Febrero.2012 /*.*.*.*.* Elaboro: Wendy L. Espino Lucio /*.*.*.*.* *.*.*.*.*/ /*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*/ /*Incluye encabezados*/ #include "unidad2.h" /*Funcion del metodo de biseccion*/

*.*.*.*.*/

*.*.*.*.*/

int biseccion (float xi, float xs, float es, int imax) { /*si pones void en lugar de int no regresa nada*/ /*Se definen las variables locales*/ int i; float xr, ea, xr_anterior, fxi, fxr, p; xr =0; ea =100; i =1; /*Entra al ciclo*/ while(i<=imax) { /*Guarda el valor de la raiz*/ xr_anterior = xr;

/*Calcula el nuevo valor*/ xr= (xi + xs)/(2); /*Calcula el error aproximado*/ if (xr!=0) ea = fabs((xr-xr_anterior)/xr)*100; /*Imprime resultados parciales*/ printf("i=%d xi=%f xs=%f xr=%f ea=%f\n\n", i, xi, xs, xr, ea); /*Verifica si el error aproximado es menor al error permisible*/ if (ea<es)

break; /*Determina en que subintervalo se encuentra la raiz y sustituye los limites*/ fxi=evaluar_f(xi); fxr=evaluar_f(xr); p=fxi*fxr;

if (p<0) xs=xr; else if (p>0)

xi=xr; else break;

i=i+1; } /*Imprime los resultados finales*/ printf("*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*\n"); printf("*.*.*.* printf("*.*.*.* printf("*.*.*.* printf("*.*.*.* printf("*.*.*.* printf("*.*.*.* Resultados Finales *.*.*.*\n"); *.*.*.*\n"); *.*.*.*\n"); *.*.*.*\n");

printf("*.*.*.* Valor de la raiz (xr)= %f printf("*.*.*.* Error aproximado (ea)= %f printf("*.*.*.* No. de iteraciones (i)= %d

*.*.*.*\n", xr); *.*.*.*\n", ea); *.*.*.*\n", i);

*.*.*.*\n"); *.*.*.*\n");

printf("*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*\n"); }

Vous aimerez peut-être aussi