私の場合、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
ラムダ:
-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);
私は何を間違えましたか?