Как точно вычислить обратную матрицу?

Я пытаюсь вычислить обратную матрицу P, но если я умножу inv(P)*P, MATLAB не вернет единичную матрицу. Это почти идентичность (недиагональные значения в порядке 10^(-12)). Однако в моем приложении мне нужно больше точности.

Что я могу сделать в этой ситуации?


person gustavoreche    schedule 22.03.2016    source источник


Ответы (2)


Только если вам явно нужна обратная матрица, вы используете inv() , в противном случае используйте оператор обратной косой черты \.

В документации на inv() прямо указано:

x = A\b вычисляется иначе, чем x = inv(A)*b, и рекомендуется для решения систем линейных уравнений.

Это связано с тем, что оператор обратной косой черты или mldivide() использует любой метод, наиболее подходящий для ваша конкретная матрица:

x = A\B решает систему линейных уравнений A*x = B. Матрицы A и B должны иметь одинаковое количество строк. MATLAB® отображает предупреждающее сообщение, если A плохо масштабируется или почти единственное число, но выполняет вычисление независимо.

Чтобы вы знали, какой алгоритм выбирает MATLAB в зависимости от ваших входных матриц, вот полная блок-схема алгоритма, как указано в их документации.

Универсальность mldivide в решении линейных систем проистекает из его способности использовать преимущества симметрии в задаче путем отправки к соответствующему решателю. Этот подход направлен на минимизацию времени вычислений. Первое различие, которое делает функция, - это полные (также называемые плотными) и разреженные входные массивы.

введите описание изображения здесь


В качестве примечания об ошибке порядка величины 10^(-12), помимо вышеупомянутой неточности функции inv(), существует точность с плавающей запятой. Этот пост о проблемах MATLAB довольно информативен, с более общим постом по информатике на нем здесь. В принципе, если вы вычисляете числа, не беспокойтесь (по крайней мере, слишком сильно) об ошибках, которые на 12 порядков меньше.

person Adriaan    schedule 22.03.2016

У вас есть так называемая плохо обусловленная матрица. Рискованно пытаться сделать инверсию такой матрицы. В общем, делать инверсию любых матриц, кроме самых маленьких (например, тех, которые вы видите во введении в учебник линейной алгебры), рискованно. Если необходимо, вы можете попробовать взять псевдообратную модель Мура-Пенроуза (см. Википедию), но даже это не является надежным.

person Forklift17    schedule 22.03.2016