2016-05-04 98 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();' –