Быстрый способ в Matlab вычислить обратную большую матрицу 10800x10800?

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

inv(A)

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

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

Спасибо


person user2225930    schedule 25.04.2013    source источник
comment
Обычно можно избежать использования явного inv(), но нам нужно увидеть больше кода, чтобы понять это.   -  person Oleg    schedule 26.04.2013
comment
что меняется на каждой итерации? есть инкрементные формулы для обратных матриц для всех видов вещей. Это действительно зависит от конкретных манипуляций, которые вы выполняете на каждой итерации.   -  person Shai    schedule 26.04.2013
comment
Я отредактировал свой оригинальный пост и предоставил больше информации.   -  person user2225930    schedule 26.04.2013
comment
если ваша матрица диагональная, она ЧРЕЗВЫЧАЙНО разрежена!   -  person Shai    schedule 26.04.2013
comment
да, извините, я думал о другом. Кстати, ниже на мой вопрос ответил 3lectrologos.   -  person user2225930    schedule 26.04.2013


Ответы (2)


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

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

что должно быть очень быстро.

person 3lectrologos    schedule 25.04.2013

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

person zw324    schedule 25.04.2013