访问特征值
问题描述:
我想获得一个协方差矩阵的最小特征向量:访问特征值
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);
我已经通过文件读了不少,却找不到一个明显的例子/解释 如何我可以访问特征向量和值吗?
答
Eigen::Matrix<std::complex<double>,3,1> eigenvalues = solver.eigenvalues(); Eigen::Matrix<std::complex<double>,3,3> eigenvec = solver.eigenvectors();
试过'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' ' –
你是对的成员。我复制/粘贴了我的代码,但是在这里我使用了自伴解算器。我将编辑以获得正确答案。 –
另外,你也可以使用'auto eigenvals = solver.eigenvalues();' –