Estoy tratando de calcular la matriz inversa en Java.cálculo de la matriz inversa de Java
Estoy siguiendo el método adjunto (primer cálculo de la matriz adjunta, luego transpone esta matriz y, finalmente, la multiplica por la inversa del valor del determinante).
Funciona cuando la matriz no es demasiado grande. He comprobado que para las matrices de hasta un tamaño de 12x12, el resultado se proporciona rápidamente. Sin embargo, cuando la matriz es más grande que 12x12, el tiempo que necesita para completar el cálculo aumenta exponencialmente.
La matriz que necesito invertir es 19x19, y lleva demasiado tiempo. El método que consume más tiempo es el método utilizado para el cálculo del determinante.
El código que estoy usando es:
public static double determinant(double[][] input) {
int rows = nRows(input); //number of rows in the matrix
int columns = nColumns(input); //number of columns in the matrix
double determinant = 0;
if ((rows== 1) && (columns == 1)) return input[0][0];
int sign = 1;
for (int column = 0; column < columns; column++) {
double[][] submatrix = getSubmatrix(input, rows, columns,column);
determinant = determinant + sign*input[0][column]*determinant(submatrix);
sign*=-1;
}
return determinant;
}
¿Alguien sabe cómo calcular el determinante de una matriz grande de manera más eficiente? Si no, ¿alguien sabe cómo calcular la inversa de una matriz grande utilizando otro algoritmo?
Gracias
@duffymo: gracias por su respuesta. Tienes razón, no exponencialmente, lo que quiero decir es que a partir del tamaño de la matriz 12x12, el tiempo que se tarda en calcular el determinante aumenta espectacularmente. He intentado con Jama, pero no consigo que funcione (soy bastante nuevo en Java). También veré la descomposición de LU. Gracias. – dedalo
No, "exponencialmente" es correcto, ya que su algoritmo es de hecho exponencial, pero duffymo también es correcto en que la inversión de matriz o el cálculo determinante no * requiere * tiempo exponencial. – JaakkoK
Gracias a todos. Miré a Jama y encontré el método 'det' en la clase Matrix que lo calcula rápidamente.También encontré métodos para calcular la matriz L y U (A = L * U) y luego det (A) = det (L) * det (U). – dedalo