Revisamos exhaustivamente cada una de las secciones en nuestro sitio web con el objetivo de mostrarte siempre la información veraz y certera.
Solución:
¿Exponencialmente? No, creo que la inversión de matriz es O (N ^ 3).
Recomendaría usar la descomposición LU para resolver una ecuación matricial. No tienes que resolver el determinante cuando lo usas.
Mejor aún, busca un paquete que te ayude. Me viene a la mente JAMA.
12×12 o 19×19 no son matrices grandes. Es común resolver problemas con decenas o cientos de miles de grados de libertad.
Aquí hay un ejemplo práctico de cómo usar JAMA. Tienes que tener JAMA JAR en tu CLASSPATH cuando compilas y ejecutas:
package linearalgebra;
import Jama.LUDecomposition;
import Jama.Matrix;
public class JamaDemo
public static void main(String[] args)
double [][] values = 1, 1, 2, 2, 4, -3, 3, 6, -5; // each array is a row in the matrix
double [] rhs = 9, 1, 0 ; // rhs vector
double [] answer = 1, 2, 3 ; // this is the answer that you should get.
Matrix a = new Matrix(values);
a.print(10, 2);
LUDecomposition luDecomposition = new LUDecomposition(a);
luDecomposition.getL().print(10, 2); // lower matrix
luDecomposition.getU().print(10, 2); // upper matrix
Matrix b = new Matrix(rhs, rhs.length);
Matrix x = luDecomposition.solve(b); // solve Ax = b for the unknown vector x
x.print(10, 2); // print the solution
Matrix residual = a.times(x).minus(b); // calculate the residual error
double rnorm = residual.normInf(); // get the max error (yes, it's very small)
System.out.println("residual: " + rnorm);
Aquí está el mismo problema resuelto usando Apache Commons Math, según la recomendación de quant_dev:
package linearalgebra;
import org.apache.commons.math.linear.Array2DRowRealMatrix;
import org.apache.commons.math.linear.ArrayRealVector;
import org.apache.commons.math.linear.DecompositionSolver;
import org.apache.commons.math.linear.LUDecompositionImpl;
import org.apache.commons.math.linear.RealMatrix;
import org.apache.commons.math.linear.RealVector;
public class LinearAlgebraDemo
public static void main(String[] args)
double [][] values = 1, 1, 2, 2, 4, -3, 3, 6, -5;
double [] rhs = 9, 1, 0 ;
RealMatrix a = new Array2DRowRealMatrix(values);
System.out.println("a matrix: " + a);
DecompositionSolver solver = new LUDecompositionImpl(a).getSolver();
RealVector b = new ArrayRealVector(rhs);
RealVector x = solver.solve(b);
System.out.println("solution x: " + x);;
RealVector residual = a.operate(x).subtract(b);
double rnorm = residual.getLInfNorm();
System.out.println("residual: " + rnorm);
Adáptelas a su situación.
Recomendaría usar Apache Commons Math 2.0 para esto. JAMA es un proyecto muerto. ACM 2.0 en realidad tomó álgebra lineal de JAMA y la desarrolló aún más.
La biblioteca la4j (Álgebra lineal para Java) admite la inversión de matrices. Aquí está el breve ejemplo:
Matrix a = new Basic2DMatrix(new double[][]
1.0, 2.0, 3.0 ,
4.0, 5.0, 6.0 ,
7.0, 8.0. 9.0
);
Matrix b = a.invert(Matrices.DEFAULT_INVERTOR); // uses Gaussian Elimination
Reseñas y valoraciones
No se te olvide difundir este escrito si te valió la pena.