martes, 19 de junio de 2012

Calcular determinante de una matriz NxM - Java

Aquí les dejo un algoritmo genérico para calcular determinante con cualquier matriz de dimensiones NxM. En esta ocacion en lenguaje Java, pero es facilmente adaptable a cualquier otro lenguaje. Espero le sea útil a alguien.
package calcularDeterminantes;

public class Determinantes {
 
    public int calDeterminante (int [][] matriz)
    {
        int determinante = 0;
        int filas = matriz.length;
        int columnas = matriz[0].length;

        // En caso de que sea una matriz 1x1
        if ((filas==1) && (columnas==1))
        return matriz[0][0];

        int signo=1;
        for (int col=0;col<columnas;col++)
        {
             int[][] submatriz = getSubmatriz(matriz, filas, columnas, col);
             determinante = determinante + signo*matriz[0][col]*calDeterminante(submatriz);
  signo*=-1;
        }
            return determinante;
    }

    public int[][] getSubmatriz(int[][] matriz,int filas,int col,int columna) {
  
         int [][] submatriz = new int[filas-1][col-1];
         int contador=0;
  
         for (int x=0;x<col;x++)
         {
             if (x==col) continue;         
             for (int y=1;y<filas;y++){
                 submatriz[y-1][contador]=matriz[y][x];
             }
         contador++;
         }
  return submatriz;
 }
}

5 comentarios:

  1. Hola soy el del blog de c++ y allegro. Me gusto mucho tu blog te felicito :)
    Mira unos amigos y yo estamos tratando de hacer crecer un foro dedicado a la programación de juegos en c++ y allegro, te dejo la dirección por si te interesa
    http://creatusjuegosdecero.webege.com

    ResponderEliminar
  2. Muy buen aporte!!!! Puntualizar, sin quitarte méritos, que, si planteases tu estrategia junto con la codificación del algoritmo alguien podría intentar implementarlo por su cuenta en lugar de copiarlo.
    Muchas gracias

    ResponderEliminar
  3. Según yo en la línea 32 debería ser:
    if (x==columna) continue;
    ¿Alguien podría corroborarlo?

    ResponderEliminar
  4. Alguien sabe como compilarlo desde linux

    ResponderEliminar