来自椭圆算子的稀疏带状非对称矩阵的特征值

计算科学 线性代数 稀疏矩阵 迭代法 特征值
2021-12-07 16:11:50

我有一个来自 3D 椭圆PDE离散化的稀疏矩阵。该矩阵由七个非零对角线组成。矩阵的稀疏模式如下所示(实际矩阵要大得多):

间谍

值得注意的是,它是正定的,但不是对称的。

我想计算特征值、右特征向量和左特征向量。对于给定的整数 k,我至少需要与最接近原点的 k 个特征值相对应的 k 个第一特征向量。

对于这样的矩阵,最有效的方法是什么?

3个回答

简单的答案是您将使用逆迭代(子空间或通缩)。这基本上是适用A1. 既然你渴望k最接近原点,需要使用某种分块法或正交化,否则幂次迭代每次收敛到相同的特征向量。

实际上,这些简单的算法太原始而无用(它们会花费太长时间)。这些更复杂的变体包括(块)LanczosArnoldiJacobi-Davidson方法。请注意对矩阵属性的限制(例如,经典的 Lanczos 仅适用于 Hermitian 矩阵)。请注意,由于您想要最小的特征值,因此您需要能够应用A1x在这些迭代中。所以每次迭代都需要一个稀疏矩阵求解。您的 3D 空间网格结构可能适合多重网格技术以加快求解速度,或者如果它的大小适中,您可以进行(不完整的)LU 或 Cholesky 分解。您还可以将它们用作求解器的预处理器,通常特征值方法将其用作参数。

实际上,Matlab 有eigs,而且这本免费的书有一个不错的现有代码清单。

如果矩阵很小(最多可能有 1,000 行),最简单的方法是使用 Matlab、Maple 或 Mathematica。如果您有更大的东西,请使用 ARPACK 等软件包。

我建议这样做,因为从头开始编写特征值求解器绝对是一项非常重要的工作——而且完全没有必要,因为周围已经有很好的包来完成这项任务!

有 EIGEN C++ 库 ( http://eigen.tuxfamily.org/ )