Почему инвайт Матлаба медленный и неточный? - PullRequest
16 голосов
/ 14 сентября 2009

Я читал в нескольких местах (в документе и в этом сообщении в блоге: http://blogs.mathworks.com/loren/2007/05/16/purpose-of-inv/), что использование inv в Matlab не рекомендуется, поскольку оно медленное и неточное.

Я пытаюсь найти причину этой неточности. На данный момент Google не дал m интересного результата, поэтому я подумал, что кто-то здесь может мне помочь.

Спасибо!

Ответы [ 3 ]

31 голосов
/ 14 сентября 2009

Неточность, которую я упомянул, связана с методом INV, а не с его реализацией в MATLAB. Вы должны использовать QR, LU или другие методы для решения систем уравнений, так как эти методы обычно не требуют возведения в квадрат числа условий рассматриваемой системы. Использование inv обычно требует операции, которая теряет точность, возводя в квадрат число условия исходной системы.

- Loren

19 голосов
/ 14 сентября 2009

Я думаю, что смысл блога Лорен не в том, что функция inv в MATLAB особенно медленна или более неточна, чем любая другая численная реализация вычисления обратной матрицы; скорее, что в большинстве случаев обратное само по себе не требуется, и вы можете действовать другими способами (например, решить линейную систему с использованием \ - оператора обратной косой черты - вместо вычисления обратного).

1 голос
/ 02 февраля 2016

inv(), безусловно, медленнее, чем \, если только у вас нет нескольких правых векторов, для которых нужно решить. Тем не менее, совет от MathWorks относительно неточности связан с чрезмерно консервативной оценкой результата числовой линейной алгебры. Другими словами, inv() НЕ является неточным. Ссылка уточняет дальше: http://arxiv.org/abs/1201.6035

Некоторые широко используемые учебники заставляют читателя полагать, что решение линейной системы уравнений Ax = b путем умножения вектора b на вычисленный обратный inv (A) является неточным. Практически все другие учебники по численному анализу и числовой линейной алгебре не рекомендуют использовать вычисленные обратные вычисления, не указывая, является ли это точным или нет. На самом деле, при разумных предположениях о том, как вычисляется обратное, x = inv (A) * b является столь же точным, как и решение, вычисленное лучшими обратно устойчивыми решателями.

...