仅向矩阵的对角元素添加一个小值

时间:2011-11-04 22:30:12

标签: matlab matrix matrix-inverse diagonal

我是matlab的新手,我试图找出具有非常小值的矩阵的逆。当我试图找到逆时,我得到一个错误,说矩阵是单数。建议的解决方案之一是尝试向对角线元素添加一些元素。我知道我必须使用眼睛和诊断方法,但我无法找到正确的解决方法。

任何评论都会有所帮助。

2 个答案:

答案 0 :(得分:5)

如果您只想将单位矩阵或其倍数添加到 square 矩阵,则可以

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);

或使用Amro的回答中的线性索引。

答案 1 :(得分:2)

对于方形矩阵,您可以将对角线添加为:

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

其中values可以是标量或r元素的向量