我是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);
或荷银的答案用线性索引等。
对于一个方阵,你可以添加到对角线为:
[r,~] = size(M);
M(1:r+1:end) = M(1:r+1:end) + values;
其中values
可以是标量或r
元素
的矢量也许你想看看[奇异值分解方法](http://www.kwon3d.com/theory/jkinem/svd.html) – Mauro
@Mauro,我已经尝试过SVD,不幸的是,这样做会导致内存不足错误 – bhavs