预处理 ARPACK 特征值求解器

计算科学 线性代数 本征系统
2021-12-18 23:57:51

我正在研究形式的广义特征值问题

Ax=λBx

其中B不是对称正数。因此,我将问题改写为

B1(Ax)=λx .
我很幸运:矩阵B是块对角线。因此,我可以通过对角块的 LU 分解来计算逆。

然后用 ARPACK 求解器求解这个特征值问题。使用 ARPACK 是因为它具有提取频谱的特定部分的特性,例如具有最大实部的特征值。该方法适用于小问题。

但是,如果我增加问题大小,ARPACK 算法在所需迭代方面的性能会增加。\boldsymbol{B}^{-1}\cdot\boldsymbol{A}的条件数B1A大幅增加至106的顺序。

有没有办法对 ARPACK 算法进行预处理以加速收敛?

1个回答

我已将您原始问题的评论线程总结为答案。

以下是您可以尝试的几件事:

  1. 增加每次迭代生成的 Arnoldi 向量 ( NCV ) 的数量。以下是DSAUPD的 ARPACK 文档对此的说明:

    At present there is no a-priori analysis to guide the selection of NCV relative to NEV (the number of eigenvalues you're looking for). The only formal requirement is that NCV > NEV. However, it is recommended that NCV >= 2*NEV.

    If many problems of the same type are to be solved, one should experiment with increasing NCV while keeping NEV fixed for a given test problem. This will usually decrease the required number of OP*x operations but it also increases the work and storage required to maintain the orthogonal basis vectors. The optimal "cross-over" with respect to CPU time is problem dependent and must be determined empirically.

  2. 重新审视线性运算符的实现。在你的情况下,它应该是这样的:

    (a)zAv

    (b)使用预先计算的 M 分解对于Mw=zwM

  3. 如果您正在寻找最小的特征值 - 或接近给定实际值的特征值,建议使用ARPACK 的移位和反转模式shift可以为零(参见他们在此处给出的示例)或任何其他实数/复数值。您的线性运算符变为(对于对称和不定)。σ(AσM)1MM

  4. 如果 SciPy-ARPACK 足够好地解决您的问题,那么 PETSc/SLEPc 可能是矫枉过正。