2016-05-04 136 views
1

我想獲得一個協方差矩陣的最小特徵向量:訪問特徵值

Eigen::Matrix3d covariance_matrix; //has to be Matrix3d 
    double minEigenValue = 0; 
    int minEigenVectorIndex = 0; 
    //compute covariance matrix 
    Eigen::EigenSolver<Eigen::Matrix3d > solver(covariance_matrix); 
    Eigen::Matrix eigenvalues = solver.eigenvalues(); 
    // Eigen::Matrix3d eigenvalues = solver.eigenvalues(); results in an error 
    for(int i = 0; i < 3;i++) 
    { 
//How do I access the eigenvalues? This fails. eigenvalues[0][i] also fails 
     if(eigenvalues(0,i) > minEigenValue) 
     { 
      minEigenValue = eigenvalues(0,i); 
      minEigenVectorIndex = i; 
     } 
    } 
    // somehow get pair of vector[0], vector[1], vector[2]: 
    //solver.eigenvectors().col(minEigenVectorIndex); 

我已經通過文件讀了不少,卻找不到一個明顯的例子/解釋 如何我可以訪問特徵向量和值嗎?

回答

2

Eigen::Matrix<std::complex<double>,3,1> eigenvalues = solver.eigenvalues(); Eigen::Matrix<std::complex<double>,3,3> eigenvec = solver.eigenvectors();

+0

試過'Vector3d'了,但如果我試圖用別的比'徵:: Matrix',我收到'在/ usr /本地/包括/ eigen3 /本徵/ src目錄/核心/ Matrix.h:292:7:錯誤: 'YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY' 不是 '徵::內部:: static_assertion ' ' –

+0

你是對的成員。我複製/粘貼了我的代碼,但是在這裏我使用了自伴解算器。我將編輯以獲得正確答案。 –

+0

另外,你也可以使用'auto eigenvals = solver.eigenvalues();' –