我是 matlab 的新手,我正在尝试找出具有非常小的值的矩阵的逆矩阵。当我试图找到逆时,我得到一个错误,说矩阵是奇异的。建议的解决方案之一是尝试向对角线元素添加一些元素。我知道我必须使用眼睛和诊断方法,但我无法提出正确的解决方案。
任何评论都会有所帮助。
我是 matlab 的新手,我正在尝试找出具有非常小的值的矩阵的逆矩阵。当我试图找到逆时,我得到一个错误,说矩阵是奇异的。建议的解决方案之一是尝试向对角线元素添加一些元素。我知道我必须使用眼睛和诊断方法,但我无法提出正确的解决方案。
任何评论都会有所帮助。
如果您只想将单位矩阵或它的倍数添加到您的方阵中,您可以这样做
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 的答案中的线性索引。
对于方阵,您可以将对角线添加为:
[r,~] = size(M);
M(1:r+1:end) = M(1:r+1:end) + values;
其中values
可以是标量或r
元素向量