2011-11-04 43 views
1

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

任何意见将有所帮助。

+0

的矢量也许你想看看[奇异值分解方法](http://www.kwon3d.com/theory/jkinem/svd.html) – Mauro

+0

@Mauro,我已经尝试过SVD,不幸的是,这样做会导致内存不足错误 – bhavs

回答

5

如果你只是想添加的单位矩阵或它的倍数,以你的广场矩阵,你可以做

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

对于一个方阵,你可以添加到对角线为:

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

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

相关问题