我正在尝试设置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一样好。另外,我用Mathematica检查了A的特征值,得到了精确的(3.5,1.93649)和(3.5,-1.93649)。
有没有人知道为什么会发生这种情况,或者有人可以提出其他方法来获取特征值?
发布于 2013-03-22 01:26:56
解决方案看起来很简单:
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;
}https://stackoverflow.com/questions/15553766
复制相似问题