Я использую MATLAB для решения проблемы, которая включает в себя решение на каждом временном шаге, где b изменяется со временем. Прямо сейчас я делаю это, используя MATLAB :mldivide
x = A\b
У меня есть возможность делать столько предварительных вычислений, сколько нужно, поэтому мне интересно, есть ли более быстрый и / или более точный метод, чем mldivide
. Что обычно делается здесь? Спасибо всем!
Ответы:
Самое очевидное, что вы можете сделать, это предварительно вычислить
[L,U] = lu(A)
~ O (n ^ 3)Тогда вы просто вычислите
x = U \ (L \ b)
~ O (2 n ^ 2)Это значительно сократит стоимость и сделает это быстрее. Точность была бы такой же.
источник
L\b
. Потому что я видел, как именно эту строку используют в высокопроизводительном коде те, кого я считаю экспертами.[L,U,p] = lu(A,'vector'); x = U\(L\b(p));
см. Пример 3 вlu
документации .В наших научных компьютерных курсах по этой теме мы провели несколько обширных компьютерных классов. Для «маленьких» вычислений, которые мы там делали, оператор обратной косой черты в Matlab всегда был быстрее, чем что-либо еще, даже после того, как мы максимально оптимизировали наш код и предварительно переупорядочили все матрицы (например, с помощью обратного порядка Cuthill McKee для разреженных матриц) ,
Вы можете проверить одну из наших лабораторных инструкций . Ответ на ваш вопрос описан (в ближайшее время) на стр. 4.
Хорошая книга на эту тему написана, например, Чейни .
источник
inv(A)
V*b
Некоторые заметки
Для анализа стабильности и ошибок см. Комментарии к этому другому ответу , особенно к VictorLiu.
Синхронизация была выполнена с Matlab R2011b на 12-ядерном компьютере с довольно постоянной средней нагрузкой UNIX 5; лучшее
tic, toc
время из трех зондов.источник
inv(A)
A\B
Взгляните на этот вопрос , ответы показывают, что
mldivide
это довольно умно, а также дает советы о том, как увидеть, что Matlab использует для решенияA\b
. Это может дать вам подсказку относительно параметров оптимизации.источник
Использование обратной косой черты более или менее эквивалентно тому
inv(A)*B
, что если вы кодируете ее свободно, последняя может быть более интуитивной. Они примерно одинаковы (только отличаются в том, как выполняются вычисления), хотя вы должны проверить документацию Matlab для пояснения.Чтобы ответить на ваш вопрос, обратная косая черта, как правило, хорошо, но она зависит от свойств матрицы масс.
источник
inv(A)
так как это дорожеA\b
?