2013-04-25 6 views
1

У меня есть матрица размера 10800x10800 в Matlab, и я вычислить его обратный непосредственно с функцией:Быстрый способ в Matlab для вычисления инверсии большой матрицы 10800x10800?

inv(A) 

Это занимает от 3 до 4 минут только один из таких вычислений. И это часть итеративного алгоритма , которому требуется более 20 итераций, поэтому общие вещи будут быть очень медленными. Есть лучший способ сделать это? Может быть, некоторые математические формулы или, может быть, лучшая функция Matlab?

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

БЛАГОДАРЯ

+2

Как правило, использование явного 'inv()' можно избежать, но нам нужно увидеть больше кода, чтобы это понять. – Oleg

+1

Какие изменения на каждой итерации? существуют инкрементные формулы для обратных матриц для всех видов вещей. Это действительно зависит от конкретных действий, которые вы делаете на каждой итерации. – Shai

+0

Я отредактировал свое оригинальное сообщение и предоставил дополнительную информацию. – user2225930

ответ

4

Если матрица действительно диагонали, вы можете, очевидно, просто сделать

Ainv = diag(1./diag(A)); 

, который должен быть очень быстрым.

+0

большое вам спасибо! – user2225930

1

обратной косой оператор \ называется faster, а также может быть более точным. Без MATLAB на самом деле я не могу сказать, но вы могли бы попытаться запустить A \ eye(10800) вместо inv(A) и посмотреть, не работает ли он.

Смежные вопросы