C++报错"The eigenvectors have not been computed together with the eigenvalues."
时间: 2024-03-22 08:41:53 浏览: 180
这个错误通常是由于没有正确调用Eigen库的eigenvectors()函数导致的。在Eigen库中,进行特征值分解时可以使用SelfAdjointEigenSolver或EigenSolver函数,其中SelfAdjointEigenSolver函数适用于对称矩阵,而EigenSolver适用于非对称矩阵。特征向量矩阵可以通过调用SelfAdjointEigenSolver或EigenSolver类的eigenvectors()函数获取,但要注意在调用之前必须要先调用eigenvalues()函数,否则会出现"The eigenvectors have not been computed together with the eigenvalues."的错误。
以下是一个简单示例,演示了如何正确获取特征向量矩阵:
```c++
#include <iostream>
#include <Eigen/Dense>
int main()
{
Eigen::MatrixXd A(3, 3); // 定义矩阵A
A << 1, 2, 3, 4, 5, 6, 7, 8, 9; // 赋值
Eigen::EigenSolver<Eigen::MatrixXd> eig(A); // 特征值分解
Eigen::MatrixXd V = eig.eigenvectors().real(); // 获取特征向量矩阵
// 在获取特征向量矩阵之前必须要先调用eigenvalues()函数
std::cout << "特征值矩阵为:" << std::endl << eig.eigenvalues().real() << std::endl;
std::cout << "特征向量矩阵为:" << std::endl << V << std::endl;
return 0;
}
```
其中,`MatrixXd`表示普通的矩阵,`EigenSolver`表示特征值分解类,`.real()`表示获取实部部分。需要注意的是,由于EigenSolver类返回的特征值和特征向量都是复数形式,因此需要使用`.real()`获取实部部分。
阅读全文