Доступ к собственным значениям в eigen3

Я пытаюсь настроить решатель собственных значений eigen3, и похоже, что я столкнулся с некоторыми сложностями. Код компилируется хорошо, но в какой-то момент дает сбой. Неудачный фрагмент кода

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 для обычной матрицы. Кроме того, я проверил собственные значения A с помощью Mathematica и получил точно (3,5,1,93649) и (3,5,-1,93649).

Кто-нибудь знает, почему это происходит, или, может быть, кто-нибудь может предложить другой способ доступа к собственным значениям?


person Eugene B    schedule 21.03.2013    source источник
comment
Можете ли вы включить sscce.org?   -  person Jacob Parker    schedule 21.03.2013
comment
Судя по всему, мне только что удалось решить проблему самостоятельно с помощью друга. Я опубликую решение в ответах.   -  person Eugene B    schedule 21.03.2013


Ответы (1)


Решение оказалось довольно тривиальным:

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;
}
person Eugene B    schedule 21.03.2013