【发布时间】:2013-06-19 10:30:12
【问题描述】:
就我而言,我想使用 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
右轴(b):
-1.962
2.78817e-19
-5.886
Lambda:
-9.81
3.94467e+19 <---------- error (Where does this come from?)
-19.62
- 矩阵 A 的秩为 - Rank(A) = 2
- 所以矩阵没有满秩。因此,A 是单数且不可逆的。
- 条件是 - cond(A) = Inf
- 为了求解 A*λ = b,我使用了 Eigen (JacobiSVD) 中的 SVD 分解方法
我还用 MATLAB 验证了这一点: http://www.pictureupload.us/image-172220092351c5ae0c1706e.htm
开始时,第一个模拟步骤大致正确。但是有一个非常小的数值误差,在求解 A*λ = b 的过程中不断增加。
然后系统崩溃,我的结果不再正确,我得到 NaN 结果。
代码如下:
/******** SVD ********/
JacobiSVD<TMatrixX> svd(A, ComputeThinU | ComputeThinV);
lambda = svd.solve(b);
我做错了什么?
【问题讨论】:
标签: c++ linear-algebra eigen algebra svd