通过 Eigen C++ 获得特定对称矩阵的最大特征值的最有效方法是什么

计算科学 C++ 矩阵 特征值 本征 对称
2021-12-02 12:11:09

假设我有一个对称矩阵A1000×1000,可以表示为:

A=JGJT

在哪里J在 1000x3 中是全列秩密集矩阵;Gin 3x3 是一个非奇异密集矩阵。

什么是仅获得最大特征值的最快方法A?

我知道对称矩阵的特征值问题可以比一般密集矩阵更快,但是问题的以下特征可以使它更快吗?

  1. 只有最大特征值A需要;

  2. A=JGJT, 排名(A) = 3,并且A只有 3 个非零特征值

LDLT分解工作有什么好处?我宁愿通过 Eigen C++ 来实现它。

B=JTJG具有相同的非零特征值A?

1个回答

我们有矩阵A可以表示为

A=JGJT.

首先是计算矩阵的QR分解J. 由于矩阵的低秩,它可以非常快地完成,例如,改进的 Gram Schmidt 算法。现在我们可以写A作为

A=QRGRTQT,

在哪里Q是一个正交矩阵 (QTQ=I)。我们定义F如下

F=RGRT,

在哪里F是一个3×3矩阵。这里的特征值F将与您的原始矩阵相同A. 但是您可能还想计算的特征向量A,所以我们继续。

计算特征分解F

F=XDXT,

在哪里D是对角矩阵,并且X是正交的 (XTX=I)。然后,插入该表达式F在公式中A我们获得

A=QXDXTQT,

可以重写为

A=YDYT,.

所以Y=QX是一个正交矩阵,其列是A, 和D是具有特征值的对角矩阵A. 它是唯一的,除了列的顺序YD.