Advertisement
elnll002

Gauss Sustitucion hacia atras

Sep 25th, 2016
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  Curti Facundo
  3.  
  4.  Este programa resuelve un sistema de ecuaciones lineales de N variables
  5.  por N ecuaciones  utilizando diferentes estrategias de pivoteo.
  6.  
  7.  */
  8.  
  9.  
  10. #include<stdio.h>
  11. #include<stdlib.h>
  12.  
  13. void imprimirMatriz(float m[10][11], int n){
  14.  
  15.     printf("---------------------\n");
  16.     for(int i=0; i<n; i++){
  17.         for(int j=0; j<n+1; j++){
  18.             printf("%f\t",m[i][j]);
  19.         }
  20.         printf("\n");
  21.     }
  22.     printf("---------------------\n\n");
  23. }
  24.  
  25.  
  26. float* sustAtras(float m[10][11], int n){
  27.     float resultados[10]; //La posicion 0, corresponde a x1. La pos 1, a x2. Y asi respectivamente
  28.  
  29.     for(int i=0; i<n-1; i++){ //Recorro las filas
  30.  
  31.         int p=i;
  32.  
  33.  
  34.         //En cada I, me posiciono en la diagonal, y busco el menor de la columna
  35.         //En caso de haber uno menor, intercambio las filas
  36.         for(int y=i; y<n; y++){
  37.  
  38.             if( m[y][i] != 0 ){ //Hsta encontrar uno distinto de 0
  39.  
  40.                 if(m[p][i]==0) //Si p sigue valiendo 0, toma este valor
  41.                     p=y;
  42.                 else if( m[y][i] < m[p][i] ) //P ya no vale 0, entonces solo cambia si es menor.
  43.                     p=y;
  44.             }
  45.         }
  46.  
  47.         if(m[p][i]==0){ //Si no encontro ninguno que sea diferente de 0
  48.             printf("El sistema no tiene una unica solucion\n");
  49.             exit(0);
  50.         }
  51.  
  52.         if(p!=i){ //Realizo el cambio de fila si es necesario. (Calculado en base al procedimiento anterior)
  53.             for(int j=0; j<n+1; j++){
  54.                 float aux=m[i][j];
  55.                 m[i][j]=m[p][j];
  56.                 m[p][j]=aux;
  57.             }
  58.         }
  59.  
  60.         for(int i2=i+1; i2<n; i2++){ //Deja ceros debajo del pivote
  61.             float mult= m[i2][i]/m[i][i];
  62.  
  63.             for(int j=0; j<n+1; j++){ //Para ello, transforma toda la lineaa la que va a dejar en 0.
  64.                 m[i2][j]=m[i2][j] - mult * m[i][j];
  65.             }
  66.  
  67.         }
  68.  
  69.         imprimirMatriz(m, n);
  70.  
  71.     }
  72.  
  73.     if(m[n-1][n-1]==0){
  74.             printf("El sistema no tiene una unica solucion\n");
  75.             exit(0);
  76.     }
  77.  
  78.     printf("Matriz resultante:\n");
  79.     imprimirMatriz(m,n);
  80.  
  81.     //::::Aca es donde aparentemente esta el error::::
  82.     for(int x=n; x>0; x--){ //Sustitucion hacia atras
  83.         resultados[x]=m[x][n+1]/m[x][x]; //Es igual a su B
  84.  
  85.         for (int y=x+1; y<n+1; y++) { //Le resto a eso las demas variables
  86.             resultados[x]=resultados[x]-m[x][y]*resultados[y];
  87.         }
  88.  
  89.     }
  90.  
  91. }
  92.  
  93.  
  94. int main(int argc, const char *argv[]){
  95.     int n; //n variables
  96.     float matriz[10][11];
  97.     float *resultados;
  98.  
  99.     printf("Cuantas ecuaciones tiene el sistema? (Debe tener el mismo numero de variables) - 10 maximo\n");
  100.     scanf("%d",&n);
  101.  
  102.  
  103.     printf("Cargando matriz\n");
  104.     for(int i=0; i<n; i++){
  105.         for(int j=0; j<n+1; j++){
  106.             printf("Ingrese el elemento %d,%d de la matriz: ",i,j);
  107.             scanf("%f", &matriz[i][j]);
  108.             printf("\n");
  109.         }
  110.     }
  111.  
  112.     printf("Matriz ingresada:\n");
  113.     imprimirMatriz(matriz, n);
  114.  
  115.     printf("Calculando matriz::\n");
  116.     resultados=sustAtras(matriz, n);
  117.  
  118.     printf("Resultados:\n");
  119.     for(int i=0; i<n; i++){
  120.         printf("\tx%d: %d", i+1, resultados+i);
  121.     }
  122.  
  123.     printf("\n");
  124.  
  125.  
  126.  
  127.  
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement