4

固有値 3 固有値ソルバーをセットアップしようとしていますが、いくつかの問題に直面しているようです。コードは正常にコンパイルされますが、ある時点で失敗します。失敗するコードは

EigenSolver<MatrixXd> eigensolver(A);
cout << "tell me something" << endl;
Matrix<complex<double>, -1, 1, 0, -1, 1> E = eigensolver.eigenvalues();
cout << "tell me something more" << endl;
cout << E;

エラーメッセージを含む出力:

tell me something
tell me something more
(3.5,1.93649)
class_out: /usr/include/eigen3/Eigen/src/Core/DenseCoeffsBase.h:407: Eigen::internal::traits<Derived>::Scalar &Eigen::DenseCoeffsBase<Derived, 1>::operator()(Eigen::internal::traits<Derived>::Index) [with Derived = Eigen::Matrix<std::complex<double>, -1, 1, 0, -1, 1>]: Assertion `index >= 0 && index < size()' failed.
(3.5,-1.93649)Aborted

<<これは少し奇妙に見えますが、通常のようにオペレーターの問題ではないようです

cout << eigensolver.eigenvalues();

cout通常のマトリックスと同様に正常に機能します。また、Mathematica で A の固有値を確認したところ、正確に (3.5,1.93649) と (3.5,-1.93649) が得られました。

なぜこれが起こっているのか、誰かが固有値にアクセスする他の方法を提案できるでしょうか?

4

1 に答える 1

6

解決策は非常に簡単であるように見えました:

EigenSolver<MatrixXd> eigensolver(A);
cout << "tell me something" << endl;
complex<double> E;
cout << "tell me something more" << endl;
for(int i = 0; i < A.rows(); ++i){
E = eigensolver.eigenvalues().col(0)[i];
cout << E << endl;
}
于 2013-03-21T17:26:56.120 に答える