Javier Marcelo
/
STM32F103C8_Error
Revision 8:a844283ff838, committed 2019-10-25
- Comitter:
- JavierMarcelo98
- Date:
- Fri Oct 25 16:01:07 2019 +0000
- Parent:
- 7:ec4c4e249c82
- Commit message:
- Programa Error.
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r ec4c4e249c82 -r a844283ff838 main.cpp --- a/main.cpp Fri Oct 25 15:29:08 2019 +0000 +++ b/main.cpp Fri Oct 25 16:01:07 2019 +0000 @@ -1,6 +1,6 @@ /* ########################################################################### ** Archivo : main.c -** Proyecto : STM32-103C8_Minimos +** Proyecto : STM32-103C8_Error ** Procesador : STM32F103C8 ** Herramienta : Mbed ** Version : Driver 01.01 @@ -70,7 +70,7 @@ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ void Portada(); -void Principal(); +void Error(); void Setup(void); /* END definitions */ @@ -86,7 +86,7 @@ Setup(); // Inicialización del sistema Portada(); -Principal(); +Error(); } /* END main */ @@ -120,139 +120,121 @@ 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: MINIMOS\e[0m"); + terminal.printf("\n\n\r\t\t\e[1;37m PROGRAMA: ERROR\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 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; + +void error(){ + int n,x,y,a,i,w; + float error=.1; + float z; + i=1; + terminal.printf("Para este programa es necesario que la matriz "); + terminal.printf("\ningresada tenga los coeficientes mas altos\nen la diagonal\n"); + terminal.printf("Ingrese la cantida de variables a encontrar (cantidad de ecuaciones\n"); + n=terminal.getc(); + + float A[n][n]; + float B[n]; + float sig[n]; + float ant[n]; + float auxa[n]; + float auxb=0; + + for (x = 0; x < n; x++){ // CREA 0 en aux + auxa[x]=0; + sig[x]=0; + } - 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]); - } + for (x = 0; x < n; x++){ //llena matriz A + terminal.printf("Ingrese los elementos del renglon "); + terminal.printf("%i",x+1); + terminal.printf("de la matriz de coeficientes"); + for(y = 0; y < n; y++){ + A[x][y]=terminal.getc(); + } + } + terminal.printf("Ingrese la matriz de resultados: "); + for (x = 0; x < n; x++){ // llena matriz B de resultados + B[x]=terminal.getc(); + } + terminal.printf("Ingrese cantidad maxima de iteraciones"); + w=terminal.getc(); + terminal.printf("Ingrese el error de convergencia"); + error=terminal.getc(); + terminal.printf("MATRIZ INGRESADA"); + for (x = 0; x < n; x++){ //MUESTRA LA MATRIZ INGRESADA + for(y = 0; y < n; y++){ + terminal.printf("%f",A[x][y]); + } + terminal.printf("|"); terminal.printf("%f",B[x]); + } + for (x = 0; x < n; x++){ //QUITA 0 DE LA DIAGONAL CAMBIANDO RENGLONES + if (A[x][x] == 0){ + for (y = x; y < n ; y++){ + if (A[y][x] == 0){ + } + else { + for (a = 0; a < n; a++){ + auxa[a]=A[y][a]; + A[y][a]=A[x][a]; + A[x][a]=auxa[a]; + } + auxb=B[y]; + B[y]=B[x]; + B[x]=auxb; + } + } - } + } } - 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"); -} + ///for () + for(x = 0; x<n ; x++){ + z=A[x][x]; + for(y = 0; y<n ; y++){ + A[x][y]=(A[x][y])/(-z); + } + A[x][x]=0; + B[x]=B[x] / z; + ant[x]=B[x]; } - } - 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; - } - } - } - } + for(a = 0; a<n ; a++){ + for (y = 0; y<n ; y++){ + sig[a]=sig[a]+(ant[y]*A[a][y]); + } + sig[a]=sig[a]+B[a]; + } + for (x = 0; x<n ; x++){ + while (abs(sig[x]-ant[x]) > error && w > i){ //Hace los pasos hasta que el error sea menor a error + for (y = 0; y<n ;y++){ + ant[y]=sig[y]; + } + for(a = 0; a<n ; a++){ + sig[a]=0; + for (y = 0; y<n ; y++){ + sig[a]=sig[a]+(ant[y]*A[a][y]); + } + sig[a]=sig[a]+B[a]; + } + i++; + } +} +if(i > w ){ + terminal.printf("El error no converge a "); terminal.printf("%f",error); + terminal.printf(" en "); terminal.printf("%i",w); terminal.printf(" iteraciones");; +} +else{ +terminal.printf(" Se llego a los resultados en "); terminal.printf("%f",i+1); terminal.printf(" iteraciones\n\n"); +terminal.printf(" Con un error de "); terminal.printf("%f",error); +terminal.printf(" Los valores de las variables son: \n\n"); +for(x = 0; x<n ; x++){ + terminal.printf("X");terminal.printf("%f",x);terminal.printf(" = "); + terminal.printf("%f",sig[x]); +} +} +} /* END routines */ /* END program */