добавление небольшого значения только к диагональным элементам матрицы - PullRequest
0 голосов
/ 05 ноября 2011

Я новичок в Matlab, и я пытаюсь найти обратную матрицу с очень маленькими значениями. Когда я пытаюсь найти обратное, я получаю сообщение о том, что матрица является единственной. Одно из предложенных решений - попытаться добавить некоторые элементы к диагональным элементам. Я знаю, что должен использовать методы глаза и диагноза, но не могу найти правильное решение.

Любые комментарии будут полезны.

Ответы [ 2 ]

5 голосов
/ 05 ноября 2011

Если вы просто хотите добавить единичную матрицу или ее кратную матрицу квадрат , вы можете сделать

A_new = A_old + k*eye(size(A_old));

, где A_old - ваша матрица, а k это некоторый множитель.Если вы хотите добавить разные значения к каждому диагональному элементу, вы можете сделать что-то вроде

A_new = A_old + diag(values);

, где values - это вектор с таким же количеством элементов, что и количество столбцов (или строк)ваша матрица A_old.

Если ваша матрица велика, будет более эффективно использовать spdiags как:

dim_A = size(A_old,1);
A_new = A_old + spdiags(values(:),0,dim_A,dim_A);

или использовать линейное индексирование, как в ответе Амро.

2 голосов
/ 05 ноября 2011

Для квадратной матрицы вы можете добавить к диагонали:

[r,~] = size(M);
M(1:r+1:end) = M(1:r+1:end) + values;

где values может быть скалярным или вектором r элементов

...