2014-04-07 6 views
1

Мне было интересно, какой правильный и лучший способ на Java инвертировать (двойную) 2D-матрицу. Мой вход (MatrixToBeInverted) - двойной [] [], заполненный и более 20x20. Использование такого кода приведет к ошибкам.Лучший способ инвертировать n x n Матрица

invMatrix = LinearAlgebra.inverse(MatrixToBeInverted); 

Я читал, что функция .inverse() устарела.

При использовании Apache Commons 2.4 с таким кодом:

System.out.println(new org.apache.commons.math3.linear.LUDecomposition(
     MatrixUtils.createRealMatrix(MatrixToBeInverted) 
     ).getSolver().getInverse()); 

Я получаю такую ​​ошибку:

Exception in thread "main" org.apache.commons.math3.linear.SingularMatrixException:  matrix is singular 

at org.apache.commons.math3.linear.LUDecomposition$Solver.solve(LUDecomposition.java:335) 

at org.apache.commons.math3.linear.LUDecomposition$Solver.getInverse(LUDecomposition.java:383) 

at MatrixCalc.calculateMatrix(MatrixCalc.java:405) 

at MatrixCalc.main(MatrixCalc.java:932) 

Но на самом деле я знаю, что матрица ввода может быть перевернутой.

+3

Какую библиотеку вы используете? Java не имеет стандартного класса LinearAlgebra. – user2357112

+0

Следующее -> org.math.array.LinearAlgebra – user3086819

+0

Это [JMathTools] (http://jmathtools.berlios.de/doku.php)? Или [JMathArray] (https://code.google.com/p/jmatharray/)? Я не вижу ничего, говоря, что метод 'inverse' устарел. – user2357112

ответ

1

Использование JAMA должно решить все ваши проблемы.