如何通过 Eigen C++ 实现对称密集矩阵的谱分解

计算科学 C++ 本征系统 本征
2021-12-24 18:21:21

对称矩阵的谱分解An×n, 具体来说,n=3

找到正交矩阵Q和对角矩阵Λ这样:

A=QΛQT

如何在 Eigen C++ 中实现这种分解?或任何其他 C++ 实现?

1个回答

您正在寻找SelfAdjointEigenSolver 类,我在此处报告的用户手册中还有一个示例:

#include <iostream>
#include <Eigen/Dense>
using namespace std;
using namespace Eigen;
int main()
{
   Matrix2f A;
   A << 1, 2, 2, 3;
   cout << "Here is the matrix A:\n" << A << endl;
   SelfAdjointEigenSolver<Matrix2f> eigensolver(A);
   if (eigensolver.info() != Success) abort();
   cout << "The eigenvalues of A are:\n" << eigensolver.eigenvalues() << endl;
   cout << "Here's a matrix whose columns are eigenvectors of A \n"
        << "corresponding to these eigenvalues:\n"
        << eigensolver.eigenvectors() << endl;
}