私はEigenの疎な配列の固有値と固有ベクトルを決定しようとしています。私はすべての固有ベクトルと固有値を計算する必要があるので、サポートされていないArpackSupportモジュールを使ってこれを行うことができませんでした。私は、システムを密行列に変換し、SelfAdjointEigenSolverを使って固有システムを計算することを選択しました実際の固有値)。これは、1024×1024のサイズの行列が得られるまではうまくいくが、期待される結果から逸脱し始める。私は最大反復回数を変更することが可能である理解するものから、このモジュール(https://eigen.tuxfamily.org/dox/classEigen_1_1SelfAdjointEigenSolver.html)のドキュメントでEigenのSelfAdjointEigenSolverの精度を高める
:
のconst int型m_maxIterations反復 静的 最大数。
アルゴリズムは、m_maxIterations * n回の反復で収束しないと終了します.nは行列のサイズを表します。この値は現在30(LAPACKからコピー)に設定されています。
しかし、私は彼らの例を使用して、あなたはこれを実装するのですか理解していない:
SelfAdjointEigenSolver<Matrix4f> es;
Matrix4f X = Matrix4f::Random(4,4);
Matrix4f A = X + X.transpose();
es.compute(A);
cout << "The eigenvalues of A are: " << es.eigenvalues().transpose() << endl;
es.compute(A + Matrix4f::Identity(4,4)); // re-use es to compute eigenvalues of A+I
cout << "The eigenvalues of A+I are: " << es.eigenvalues().transpose() << endl
どのように反復の最大数を変更するためにそれを修正するのでしょうか?
また、これは私の問題を解決するか、または固有のシステムを解決するための代替機能やアルゴリズムを見つけようとすべきですか?
事前に感謝します。
Jacobi SVDを意味しますか?もしそうなら、あなたはこの分解からどのようにしてEigevaluesとEigenvectorsを得るのですか? – jcarvalho