viernes, 20 de enero de 2012

Método de Gauss Jordan


//ALGORITMO DEL METODO DE GAUSS JORDAN


public class GaussJordan {

    static void muestramatriz(float matriz[][], int var) {
        for (int x = 0; x < var; x++) {
            for (int y = 0; y < (var + 1); y++) {
                System.out.print(" " + matriz[x][y] + " |");
            }
            System.out.println("");
        }

    }

    static void pivote(float matriz[][], int piv, int var) {
        float temp = 0;
        temp = matriz[piv][piv];
        for (int y = 0; y < (var + 1); y++) {

            matriz[piv][y] = matriz[piv][y] / temp;
        }
    }

    static void hacerceros(float matriz[][], int piv, int var) {
        for (int x = 0; x < var; x++) {
            if (x != piv) {
                float c = matriz[x][piv];
                for (int z = 0; z < (var + 1); z++) {
                    matriz[x][z] = ((-1 * c) * matriz[piv][z]) + matriz[x][z];
                }
            }
        }
    }

    public static void main(String args[]) {
        Scanner leer = new Scanner(System.in);
        int var = 0, piv = 0;
        float matriz[][];
        System.out.println("\t ** Este programa nos muestra la solución de un sistema de ecuaciones \n\t\tlineales a través del método Gauss_Jordan **");
        System.out.println("\n¿Cuantas variables tiene tu sistema?");
        var = leer.nextInt();
        matriz = new float[var][var + 1];
        for (int x = 0; x < var; x++) {
            for (int y = 0; y < (var + 1); y++) {
                System.out.println("Ingresa la constante de la posicion: A[" + (x + 1) + "][" + (y + 1) + "]");
                matriz[x][y] = leer.nextFloat();
            }

        }

        for (int a = 0; a < var; a++) {
            pivote(matriz, piv, var);

            System.out.println("\tRenglon " + (a + 1) + " entre el pivote");
            muestramatriz(matriz, var);

            System.out.println("");

            System.out.println("\tHaciendo ceros");
            hacerceros(matriz, piv, var);

            muestramatriz(matriz, var);
            System.out.println("");
            piv++;
        }
        for (int x = 0; x < var; x++) {
            System.out.println("La variable X" + (x + 1) + " es: " + matriz[x][var]);
        }

    }
}

12 comentarios:

  1. wooo.... bien! .... me sirve de mucho.... gracias!

    ResponderEliminar
  2. porque no se puede hacer ecuaciones de 5 incògnitas en adelante ???????

    ResponderEliminar
    Respuestas
    1. basándome en este código yo si pude resolver de 5 incógnitas. aquí están los métodos modificados como los necesitaba

      public static float[][] GaussJordan(float[][] mat){

      int piv = 0;
      int var = mat.length;

      for (int i=0;i<var; i++) {
      mat = pivote(mat, piv, var);
      mat = ceros(mat, piv, var);
      piv++;
      }
      return mat;
      }

      public static float[][] pivote(float mat[][], int piv, int var){
      float temp = mat[piv][piv];
      for (int y=0;y<(var+1);y++){
      mat[piv][y] = mat[piv][y] / temp;
      }
      return mat;
      }

      public static float[][] ceros(float mat[][], int piv, int var){
      for (int x=0;x<var;x++){
      if (x != piv){
      float c = mat[x][piv];
      for (int z=0;z<(var+1);z++){
      mat[x][z] = ((-c)*mat[piv][z])+mat[x][z];
      }
      }
      }
      return mat;
      }


      el metodo GaussJordan recibe float mat[][]={{4,12,6,8,1,6},{-8,-6,-9,6,2,-23},{6,5,-4,5,3,10},{-5,4,2,-1,4,3},{-10,5,3,6,3,-15}};

      Eliminar
  3. Hola, gran código. Tengo dudas en el uso y trabajo de las variables "var", "temp". Muchas gracias

    ResponderEliminar
  4. Excelente!! Muy buen aporte. Muchas gracias :D

    ResponderEliminar
  5. Disculpa espero lo veas pero es urgente, la parte que hace los calculos de la matriz, como puedo hacerlo metodo recursivo

    ResponderEliminar
  6. Excelente aporte, gracias.

    ResponderEliminar