Eigen - 解决复杂的广义特征值问题

计算科学 线性代数 C++ 本征
2021-12-10 10:25:35

我一直在使用Eigen C++ 线性代数库来解决复杂矩阵的各种特征值问题。我最近不得不使用广义特征值求解过程,但对 Eigen 的事实感到失望

Eigen::GeneralizedEigenSolver< _MatrixType >

例程无法处理复杂的矩阵。我的矩阵通常不是自伴随的,所以看起来我不能使用它

Eigen::GeneralizedSelfAdjointEigenSolver< _MatrixType >

例行公事。

是否有一些仅使用 C++ 和 Eigen 的解决方法可以让我解决这个问题?例如,对于广义问题,我可以将一对复杂的非厄米特矩阵转换为一对自伴矩阵,而不会丢失任何信息吗?

1个回答

如果其中一个矩阵是可逆的,则可以将其转换为标准特征值问题使用 Eigen,您可以这样做:(B1A)x=λx

EigenSolver<MatrixXcd> eig(B.lu().solve(A));

并且,如果需要,您还可以重新归一化特征向量,以便xTBx=1