我是matlab的新手,我试图找出具有非常小值的矩阵的逆。当我试图找到逆时,我得到一个错误,说矩阵是单数。建议的解决方案之一是尝试向对角线元素添加一些元素。我知道我必须使用眼睛和诊断方法,但我无法找到正确的解决方法。
任何评论都会有所帮助。
答案 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
元素的向量