Javier Marcelo
/
STM32F103C8_Minimos
Programa de Minimos.
Diff: main.cpp
- Revision:
- 7:ec4c4e249c82
- Parent:
- 6:57457ad17880
--- a/main.cpp Fri Oct 25 15:05:26 2019 +0000 +++ b/main.cpp Fri Oct 25 15:29:08 2019 +0000 @@ -1,6 +1,6 @@ /* ########################################################################### ** Archivo : main.c -** Proyecto : STM32-103C8_Portada +** Proyecto : STM32-103C8_Minimos ** Procesador : STM32F103C8 ** Herramienta : Mbed ** Version : Driver 01.01 @@ -49,7 +49,6 @@ #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. /* +------------------------------------------------------------------------------- @@ -71,7 +70,7 @@ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ void Portada(); -void Calculos(); +void Principal(); void Setup(void); /* END definitions */ @@ -87,7 +86,7 @@ Setup(); // Inicialización del sistema Portada(); -Calculos(); //Mandar a llamar a la funcion Calculos. +Principal(); } /* END main */ @@ -121,45 +120,139 @@ 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: METODO DE BISECCION\e[0m"); + terminal.printf("\n\n\r\t\t\e[1;37m PROGRAMA: MINIMOS\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() +void Principal() { + { + float aux[10],aux1[10],auxx[10],resultado[10],suma,sumat[10],tole[10], + tole1,tolefin[10],tolerancia,w,x1[10],xy[10][10]; + int grado,h,i,j; -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 + terminal.printf("\nCual es el grado de la ecuaci¢n (2 ¢ 3): \n"); + grado=terminal.getc(); + for(j=0;j<10;j++) + { + auxx[j]=0; + } + for(i=0;i<grado;i++) + { + terminal.printf("\nIngresa la Ecuaci¢n Numero %d \n",i+1); + for(j=0;j<grado;j++) + { + terminal.printf("\nX%d%d= ",i+1,j+1); + xy[i][j]=terminal.getc(); + } + terminal.printf("\nY%d= ",i+1); + resultado[i]=terminal.getc(); + } + terminal.printf("\nLas ecuaciones que ingresaste son:\n"); + for(i=0;i<grado;i++) + { + for(j=0;j<grado;j++) + { + terminal.printf(" %.0f[X%d]",xy[i][j],j+1); + if(j==0) + printf("+"); + } + terminal.printf("=",i+1); + terminal.printf("%.0f",resultado[i]); + terminal.printf("\n"); + } + terminal.printf("\n Matriz a resolver:\n"); + for(i=0;i<grado;i++) + { + terminal.printf("\n%c ",179); + for(j=0;j<grado;j++) + { + terminal.printf(" %.0f ",xy[i][j],j+1); + } + terminal.printf(" %c",179); + terminal.printf(" %.0f ",resultado[i]); + terminal.printf(" %c",179); + } + terminal.printf("\nIngresa la Exactitud o Tolerancia: "); + tolerancia=terminal.getc(); + for(;;) + { + h=0; + do + { + suma=0; + for(i=h;i<h+1;i++) + { + for(j=0;j<grado;j++) + { + if(j!=i) + { + suma+=((xy[i][j]*x1[j])/xy[i][i]); + } + + } + } + sumat[h]=suma; + h++; + }while(h<grado); + for(i=0,j=grado-1;i<grado;i++,j--) + { + aux[i]=auxx[j]; + } + for(i=0;i<grado;i++) + { + for(j=0;j<grado;j++) + { + if(i!=j) + { + auxx[i]=((resultado[i])/xy[i][i])-(sumat[i]); + } +else{ + terminal.printf("INDETEMINA"); } -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); -} + } + } + for(i=0,j=grado-1;i<grado;i++,j--) { x1[i]=auxx[i]; } + for(i=0;i<grado;i++) { tole[i]=0; } + for(i=0,j=grado-1;i<grado;i++,j--) { aux1[i]=auxx[j]; } + for(i=0;i<grado;i++) { tole[i]=aux1[i]-aux[i]; } + + int k=0; + while(k<grado) + { + for(i=0;i<grado-1;i++) + { + if(tole[i]<tole[i+1]) + { + tole1=tole[i];tole[i]=tole[i+1];tole[i+1]=tole1; + } + } + k++; + } + for( j=0;j<grado;j++) + { + tolefin[j]=tole[j]; + } + w=tolefin[0]; + terminal.printf("\n"); + for(j=0;j<grado;j++) + { + terminal.printf("x%d= %f\n",j+1,auxx[j]); + } + if(fabs(w)<=tolerancia) + { + terminal.printf("\nResultados en la Iteracion Numero %d \n"); + for(j=0;j<grado;j++) + { + terminal.printf("X%d=%.15f\n",j+1,auxx[j]); + } + terminal.getc(); + break; + } + } + } + } /* END routines */ /* END program */ @@ -177,4 +270,4 @@ | THE BEANERS TECHNOLOGIES PROYECT +------------------------------------------------------------------------------- */ -/* END Mbed */ \ No newline at end of file +/* END Mbed */