MATLAB неправильно вычисляет INV (для сингулярных матриц) - PullRequest
0 голосов
/ 09 июля 2010

MATLAB иногда вычисляет INV неправильно:

См. Этот пример

[ 8617412867597445*2^(-25), 5859840749966268*2^(-28)]
[ 5859840749966268*2^(-28), 7969383419954132*2^(-32)]

Если вы поместите это в MATLAB, оно не имеет обратного, но в калькуляторе s оно есть.

Что происходит?

Ответы [ 2 ]

9 голосов
/ 09 июля 2010

Пожалуйста, прочитайте Что должен знать каждый ученый об арифметике с плавающей запятой

Далее, все равно не вычисляйте обратное. Обратная матрица почти никогда не нужна, кроме как в учебниках, где ее удобно писать. К сожалению, многие авторы в любом случае не ценят этот факт, потому что они узнали из учебников других людей, которые также не смогли понять, что обратная матрица - это плохая вещь в целом.

Поскольку эта матрица численно сингулярна в арифметике двойной точности, обратная сторона этой матрицы не имеет смысла.

Использование оператора обратной косой черты в Matlab будет лучше и быстрее в целом, чем обратное. Или используйте pinv, который будет более устойчивым к проблемам.

1 голос
/ 05 августа 2010

Привет! Я хотел бы прокомментировать ответ Woodchips, но, поскольку я новый пользователь, я не могу этого сделать, это одна очень интересная статья, и я должен прочитать ее более подробно, когда у меня будет время ...

Что касается инверсии матрицы, вы всегда можете использовать команду «cond» для вычисления номера условия матрицы, для неособой матрицы значение должно приближаться к единице.Как предположили Вудчипс, «pinv» пригодится, если вам нужно найти псевдообратную неквадратную матрицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...