就我而言,我想用Eigen(3.0.12)中的 JacobiSVD 求解器求解一个欠定方程系统A *λ= b。
线性方程系统在我的C ++程序中具有以下结构:
系数矩阵( A ):
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
我也用MATLAB验证了这一点: http://www.pictureupload.us/image-172220092351c5ae0c1706e.htm
一开始,第一个模拟步骤是近似正确的。但是有一个非常小的数值误差,在求解A *λ= b时会增加。
然后系统崩溃,我的结果不再正确,我得到NaN结果。
这里是代码:
/******** SVD ********/
JacobiSVD<TMatrixX> svd(A, ComputeThinU | ComputeThinV);
lambda = svd.solve(b);
我做错了什么?
答案 0 :(得分:2)
JacobiSVD考虑所有非零奇异值进行求解。我建议使用ColPivHouseholderQR。