1

私の場合、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);

私は何を間違えましたか?

4

1 に答える 1