2013-03-21 42 views
4

我想設置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對於一個普通矩陣。另外,我已經用Mathematica檢查了A的特徵值,我得到了(3.5,1.93649)和(3.5,-1.93649)。

有誰知道爲什麼會發生這種情況,或者有人可能會建議其他方式來訪問特徵值?

+0

您可以包括http://sscce.org/? – 2013-03-21 17:16:23

+0

顯然,我只是設法解決問題myslef與朋友的一些幫助。我將在答案中發佈解決方案。 – 2013-03-21 17:23:53

回答

5

的解決方案顯得相當簡單:

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; 
}