2013-06-22 93 views
0

在我的情况下,我想用Eigen(3.0.12)的求解器求解欠定的方程组A *λ= b。在Eigen(C++)中求解一个欠定的方程系统

的线性方程系统具有以下在我的C++程序结构:

系数矩阵():

 0.6   5.68434e-20  -0.2 
     5.68434e-20 7.06819e-39  -4.26326e-20 
     -0.2   -4.26326e-20  0.4 

RHS(b):

 -1.962 
     2.78817e-19 
     -5.886 

Lambda

 -9.81 
     3.94467e+19   <---------- error (Where does this come from?) 
     -19.62 
  • 矩阵A的秩是 - 秩(A)= 2
  • 因此矩阵具有否满秩。因此,A是单数且不可逆的。
  • 的条件是 - COND(A)= Inf文件
  • 为了解决A *λ= B,I用于从本征(JacobiSVD)的SVD分解方法

我也验证了这MATLAB: http://www.pictureupload.us/image-172220092351c5ae0c1706e.htm

从一开始,第一个模拟步骤是近似正确的。但是有一个非常小的数值误差,在求解A *λ= b期间这个误差正在增加。

然后系统崩溃,我的结果不再正确,我得到NaN结果。

下面的代码:

/******** SVD ********/ 
JacobiSVD<TMatrixX> svd(A, ComputeThinU | ComputeThinV); 
lambda = svd.solve(b); 

我做了什么错?

回答

2

JacobiSVD考虑所有非零奇异值来求解。我建议使用ColPivHouseholderQR。