Оджалго: обработка сингулярных матриц
Я использую ojalgo для решения системы (NxN) Ax = b в Java. Поскольку есть вероятность, что A будет единственной матрицей, я бы хотел, чтобы мой код как-то это знал. Есть ли способ? (в документации говорится, что solve()
метод возвращает одно возможное решение, если проблема недостаточно квалифицирована и invert()
метод не выдает исключение).
Любая помощь будет принята с благодарностью. Заранее спасибо.
2 ответа
Решение
Похоже, вы используете методы решения и инвертирования непосредственно в BasicMatrix.
Вместо этого переключитесь на использование LU-разложения. После того, как вы разложили матрицу, но, прежде чем пытаться решить, вы можете позвонить:
lu.isSquareAndNotSingular ();
Чтобы решить с помощью LU-разложения, попробуйте что-то вроде этого.
MatrixStore M = ...equations
MatrixStore v = ...rhs
LU<Double> lu = LU.PRIMITIVE.make(M);
boolean decompose = lu.decompose(M);
MatrixStore solution;
if(lu.isSolvable()){
solution = lu.getSolution(v);
// and/or check that solution is good enough
double norm = M.multiply(solution).subtract(v).norm();
}