Programa para calcular la raíz de una función por el método de Bisección.

Dependencies:   mbed

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 */