私のアルゴリズムでは、疎行列の逆演算を採用し、QR 分解法を使用した A*x=b 法を使用して解いています。Matlab では、QR 操作は正常に実行されます。
しかし、Eigen ライブラリを使用してコードを C++ に変換しようとすると、同じ答えが得られませんでした。場合によっては、Matlab の結果と比較して、ベクトル x の各要素に沿って何らかの値のシフトがあります。ただし、シフトを引き起こすこの値は、ベクトル内のすべての要素で一定です。
私がしていることを垣間見る:
Eigen::SparseMatrix<float> A(m, n);
Eigen::VectorXf b;
Eigen::SparseQR<Eigen::SparseMatrix<float>, Eigen::COLAMDOrdering<int>> solver;
solver.compute(A);
Eigen::VectorXf x = solver.solve(b);
x は、 A.inverse()*b の結果を含む最終的なベクトルですよね?
さらに、完全な行列として解こうとしましたが、Matlab と比較して C++ で異なる答えが得られました。
ここで誰かが同様の問題に直面しましたか? はいの場合は、ヘルプやポインターを歓迎します。一方、私の理解に何か問題がある場合は、修正も歓迎します。
ありがとう。