Eigen c++ - SelfAdjointEigenSolver - 特征向量不是特征向量

问题描述 投票:0回答:1

我正在尝试使用 Eigen 库解决特征问题。我正在使用 SelfAdjointEigenSolver 来获取特征值和特征向量。虽然我似乎有很好的证据证明特征值是可以的,但特征向量似乎不行。或者我理解错了。

计算特征向量 vct 后,我创建另一个 vct2=matrixvct。特征值问题的核心思想是 vct2=lambdavct,其中 lambda 是特征值。因此,我打印了 vct2 除以 vct 的每个系数,看看它是否是常数。它不是。甚至还没有接近。怎么了? 在这里,我创建一个随机矩阵,解决它的特征问题,获取第一个特征向量,然后打印除法。

对于我得到的矩阵,输出是: 9.89816 4.10161 -0.765191 -2.27482 3.58762 0.710447 -4.79855 -2.88263 -3.05201 -3.05561

它看起来不像是相同数字的字符串。 生成问题的代码:

#include<iostream>
#include <Eigen/Dense>
using Eigen::MatrixXd;
using Eigen::SelfAdjointEigenSolver;
using namespace Eigen;
using namespace std;
int main(int argc, char **argv)
{
    SelfAdjointEigenSolver<MatrixXd> es;

        MatrixXd matrix=MatrixXd::Random(10,10);
        es.compute(matrix);
        double E0=es.eigenvalues()[0];
        VectorXd vct=es.eigenvectors().col(0);
        VectorXd vct2=matrix*vct;
        for(int i=0;i<10;i++)
        {
            cout<<vct2(i)/vct(i)<<" ";
        }
    return 0;
}
c++ eigen eigenvector
1个回答
0
投票

好的。我无法通过简单的解决方案来复制该问题。问题很可能不是来自特征本身,而是来自我的矩阵。事实上,我在这里看到解决非自伴随矩阵的类似问题表明,也许我应该检查我的矩阵是否是自伴随的。应该是的,但除此之外我看不到别的。

这是具有对称实矩阵的代码(因此,也是自伴随的)。它没有显示任何类似的问题。

#include<iostream>
#include <Eigen/Dense>
using Eigen::MatrixXd;
using Eigen::SelfAdjointEigenSolver;
using namespace Eigen;
using namespace std;
int main(int argc, char** argv)
{
    SelfAdjointEigenSolver<MatrixXd> es;

    MatrixXd a = MatrixXd::Random(30, 30);
    MatrixXd matrix = a + a.transpose();
    es.compute(matrix);
    double E0 = es.eigenvalues()[0];
    VectorXd vct = es.eigenvectors().col(0);
    VectorXd vct2 = matrix * vct;
    for (int i = 0; i < 10; i++)
    {
        cout << vct2(i) / vct(i) << " ";
    }
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.