Javier Marcelo
/
STM32F103C8_Biseccion
Programa para calcular la raíz de una función por el método de Bisección.
Diff: main.cpp
- Revision:
- 6:57457ad17880
- Parent:
- 5:7bd28f4ca12b
--- a/main.cpp Fri Oct 25 14:21:11 2019 +0000 +++ b/main.cpp Fri Oct 25 15:05:26 2019 +0000 @@ -49,6 +49,7 @@ #define FALSE 0 // Estado FALSO #define TRUE 1 // Estado VERDADERO #define Ticker_Rate 1000 // Tiempo del Ticker +#define RAIZ(x) ((x)+2) ////////////////////////////////////////// Definimos las notas notas musicales y su frecuencia. /* +------------------------------------------------------------------------------- @@ -82,9 +83,10 @@ #=============================================================================== */ int main() -{ // Inicialización de variables, puertos e interrupciones // Configure system clock (72MHz HSE clock, 48MHz USB clock) +{ + Setup(); // Inicialización del sistema -Portada(); //Mandar a llamar a la funcion Portada. +Portada(); Calculos(); //Mandar a llamar a la funcion Calculos. } /* END main */ @@ -119,35 +121,45 @@ terminal.printf("\n\r\t\t\e[1;37m ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA\e[0m"); terminal.printf("\n\n\r\t\t\e[1;37m INGENIERIA EN COMUNICACIONES Y ELECTRONICA\e[0m"); terminal.printf("\n\n\r\t\t\e[1;37m ANALISIS NUMERICO\e[0m"); - terminal.printf("\n\n\r\t\t\e[1;37m PROGRAMA: RAICES REALES\e[0m"); + terminal.printf("\n\n\r\t\t\e[1;37m PROGRAMA: METODO DE BISECCION\e[0m"); terminal.printf("\n\n\r\t\t\e[1;37m ALUMNO: MARCELO PADRON JAVIER\e[0m"); terminal.printf("\n\n\r\t\t\e[1;37m GRUPO: 4CV2\e[0m\n\n"); wait(3.0);//Retardo de 3 segundos } void Calculos() { - float a,b,c; - float x1,x2,x3,ax,bx; - terminal.printf("\n\r\t\e[1;37mIntroduce los valores de a, b, c.\e[0m\n"); - terminal.printf("\n\r\t\e[1;37ma = \e[0m\n"); a = terminal.getc(); - terminal.printf("\n\r\t\e[1;37mb = \e[0m\n"); b = terminal.getc(); - terminal.printf("\n\r\t\e[1;37mc = \e[0m\n"); c = terminal.getc(); - c= sqrt(float (b*b)- 4*a*c); - ax=(-b-x3); - x1=ax/(2*a); - bx=(-b+x3); - x2=(-b+x3)/(2*a); - terminal.printf("\n\r\t\e[1;37mEl valor de x1 es %.2f \e[0m\n",x1); - terminal.printf("\n\r\t\e[1;37mEl valor de x2 es %.2f \e[0m\n",x2); - if(ax>0 || bx>0) - { - terminal.printf("\n\r\t\e[1;37mLa ecuacion es real\e[0m\n"); - } - else - { - terminal.printf("\n\r\t\e[1;37mLa ecuacion no es real\e[0m\n"); - } + +float xi, xu, xr, xa, ea; +int iteraciones; +terminal.printf("Limite superior de la raiz: "); +xi=terminal.getc(); +terminal.printf("Limite inferior de la raiz: "); +xu=terminal.getc(); +terminal.printf("%12s %10s %10s %10s %10s\n", "Iteraciones", "Xi", "Xu", "Xr", "Ea"); +iteraciones=0; +xa = 0.0; +ea = 0; +do{ +iteraciones++; +xr = (xi + xu) / 2; +if(iteraciones >= 2) +{ +ea = ((xr - xa) / xr) * 100; // Calculamos el error aproximado a partir de la segunda iteración +} +ea = fabs(ea); // Calculamos el valor absoluto del número +terminal.printf("%12d %10f %10f %10f %10f\n", iteraciones, xi, xu, xr, fabs(ea)); +xa = xr; +if(RAIZ(xr) > 0) +{ +xi = xr; } +else{ +xu = xr; +} +} +while(ea > 0.5 || (ea == 0.0 && iteraciones == 1)); +terminal.printf("\nLa raiz es de f(x) = x + 2; es: \n", xr); +} /* END routines */ /* END program */