C++ 广义Deigensolver不在特征库中给出特征向量

C++ 广义Deigensolver不在特征库中给出特征向量,c++,matrix,linear-algebra,eigen,eigenvector,C++,Matrix,Linear Algebra,Eigen,Eigenvector,我是新来的特征库,试图解决一个广义特征值问题。根据Eigen库中GeneralizedEigenSolver模板类的文档,我能够得到本征值,但不能得到本征向量。似乎没有实现eigenvectors()成员函数。一旦我知道特征值,是否有其他方法可以生成特征向量。我使用的是特征3.2.4。它似乎还没有实现。在compute函数的末尾有: m_eigenvectorsOk = false;//computeEigenvectors; 这表明它们不是经过计算的。另外,eigenvectors()函数

我是新来的特征库,试图解决一个广义特征值问题。根据Eigen库中GeneralizedEigenSolver模板类的文档,我能够得到本征值,但不能得到本征向量。似乎没有实现eigenvectors()成员函数。一旦我知道特征值,是否有其他方法可以生成特征向量。我使用的是特征3.2.4。

它似乎还没有实现。在
compute
函数的末尾有:

 m_eigenvectorsOk = false;//computeEigenvectors;
这表明它们不是经过计算的。另外,
eigenvectors()
函数被注释掉,看起来像(注意TODO):


奇怪的是,这并没有实现,文档建议是这样的。这绝对值得在Eigen邮件列表上查询或提交一张票证,也许有人正在处理这个问题,并且它位于最新的存储库中

我以前使用过
广义自伴特征解算器
,它肯定会生成特征向量。如果你知道两个矩阵都是对称的,你可以用它

如果您的矩阵非常小,作为快速修复,您可以将标准的
特征解算器
应用于
M^{-1}a

A x = lambda * M x    <==>   M^{-1} A x = lambda * x,
ax=lambda*mxm^{-1}ax=lambda*x,
但很明显,这需要计算右手边矩阵的逆矩阵,这是非常昂贵的,所以这是最后的手段


如果所有其他方法都失败,您可以引入一个专用的特征解算器库,或者使用LAPACK例程。

这是一个广义特征值问题,因此涉及两个矩阵。所以es.compute(A)对我来说不起作用。然而,我能够得到所需的本征值。是否可以生成相应的特征向量?@rotating_图像编号。
GeneralizedEigenSolver
的特征值在
compute
函数中计算(其中
m_eigenvectorsOk=false;//ComputeIgenvectors;
),该函数由
GeneralizedEigenSolver调用(const MatrixType&A,const MatrixType&B,bool computeigenvectors=true)
c'tor。我将用您想要的未实现的特征码更新答案。@rotation\u image您知道如何从
QZ
矩阵(无论是什么)计算特征向量吗?这似乎是尚未实现的代码。我确认此功能仍然缺失,正在等待他人实现;)这与Lapack中的例程相对应。已经尝试了您的修复,但在我的情况下,M在我的情况下始终是不可逆的。
int main(int argc, char *argv[]) {

    Eigen::EigenSolver<Eigen::MatrixXf> es;
    Eigen::MatrixXf A = Eigen::MatrixXf::Random(4,4);
    es.compute(A);

    std::cout << es.eigenvectors() << std::endl;
    return 0;
}
A x = lambda * M x    <==>   M^{-1} A x = lambda * x,