Оджалго: обработка сингулярных матриц

Я использую 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();
        }
Другие вопросы по тегам