избежать предупреждения об инверсии матрицы в Matlab

Я работаю с матрицами 6x6, которые имеют разную точность данных. Когда я пытаюсь инвертировать эту матрицу в MATLAB, я обычно получаю Inf или NaN в качестве всех данных, и MATLAB выдает предупреждение:

Matrix отличается высокой точностью работы.

Есть ли способ избежать этого и получить должный результат?


person Abhishek Thakur    schedule 30.01.2013    source источник
comment
Этот вопрос может быть более подходящим для math.stackexchange.com   -  person Shai    schedule 30.01.2013
comment
хм ... его матрица инверсия с использованием Matlab и im с использованием функции inv. Я не думаю, что это чисто математический вопрос   -  person Abhishek Thakur    schedule 30.01.2013
comment
Matlab inv - это не волшебство. Он работает только тогда, когда линейная алгебра разрешает / разрешает инверсию. Вы получаете эту ошибку, потому что пытаетесь сделать что-то, что математически не определено. Вам следует обратиться за советом к специалистам по числовому анализу, которые могут помочь вам решить проблему.   -  person Shai    schedule 30.01.2013
comment
Сингулярная матрица означает, что ее определитель равен нулю. Для вычисления обратного определитель должен быть отличным от нуля. Я советую прочитать какую-нибудь элементарную книгу по алгебре, прежде чем использовать какое-нибудь приложение для компьютеров.   -  person Mihai8    schedule 30.01.2013
comment
спасибо за совет и спасибо за ответ.   -  person Abhishek Thakur    schedule 30.01.2013


Ответы (1)


Кажется, что ваша матрица не имеет рангов. Только матрицы полного ранга могут быть надежно инвертированы.
Вы можете обойти эту проблему, добавив небольшую единичную матрицу к исходной.

 A = rand(6,5);
 A = A*A'; %' symmetric rank 5 matrix
 iA = inv(A); % results with NaNs and infs A is singular
 iAs = inv( A + eye(6)*1e-3 ); % add small (1e-3) elements to diagonal - this should help
person Shai    schedule 30.01.2013
comment
есть ли способ определить, какое значение следует добавить к диагональным элементам? - person Abhishek Thakur; 30.01.2013
comment
@AbhishekThakur - это как раз вопрос для math.stackexchange.com - person Shai; 30.01.2013