计算矩阵的最小特征向量

计算科学 本征系统 matlab
2021-12-21 10:35:17

看来matlabeigs给了我矩阵最小特征向量的错误近似值。

我想我可以使用一些更慢的方法,这些方法也会更准确......

我正在寻找拉帕尔斯矩阵的第二个最小特征向量(称为“fiedler”向量)。我当然知道拉普拉斯矩阵的最小特征向量是常数向量。

对更准确的方法有什么建议吗?

PS 在上述所有内容中,当我说“最小特征向量”时,我指的是与最小特征值相关的特征向量。

3个回答

有一种直接的方法可以利用您对最小特征对的先验知识:您可以简单地在每次迭代(例如逆迭代)中将当前特征向量估计的分量投影到常数向量的方向上。然后,您应该期望迭代收敛到与第二小的特征值相对应的特征向量,即您想要的 Fiedler 向量。

根据图的连通性,您可能希望也可能不希望在逆迭代之前运行稀疏直接分解,以加速A1. 一旦逆迭代方法开始工作,您还可以考虑用 Krylov 算法替换它,这需要更多的编码工作,但收敛速度应该更快。

您可以将 Matlab 计算的特征值近似值作为移位σ在逆迭代中。如果您将残差累积到高精度,您可以通过这种方式获得特征向量的完全准确度,使用诸如

Ogita、Rump 和 Oishi,带有应用程序的精确和和点积, http: //oishi.info.waseda.ac.jp/~oishi/papers/OgRuOi05.pdf

一个例外是特征值接近缺陷的情况;那么您需要使用应用的子空间方法(AσI)1作为矩阵。

你可以得到完整的特征分解eig(full(A))