关于(广义)代数特征值问题的一点注记

关于(广义)代数特征值问题的一点注记

感谢王同学和王同学提供的一些信息和资料。

常用特征值计算方法概述

对称特征值问题

Jacobi 迭代 、Rayleigh 商迭代 、对称 QR 迭代方法、 分而治之法 、对分法和反迭代法

  • 对称 QR 迭代:对称矩阵的 QR 方法,首先将矩阵约化为 Herssenberg 矩阵,然后在求解该矩阵的特征值。对于对称三角矩阵,若只计算特征值,则速度最快( O ( n 2 ) O(n^2) O(n2)),如果还需要计算特征向量,则运算量约为( O ( 6 n 3 ) O(6n^3) O(6n3))。只求特征值,不求特征向量的话,可以用这个方法。得到特征值,还想求特征向量,可以接着用反幂法。

  • 分治算法:可以同时求特征值和特征向量的快速方法。它的基本思想是:将大矩阵分解成小矩阵,然后利用递归的思想求解。在最坏的情况下,运算量为 O ( n 3 ) O(n^3) O(n3)。在实际应用中,平均为 O ( n 2.3 ) O(n^{2.3}) O(n2.3)。如果使用快速多极子算法(FMM)后,理论上的运算量可以降低到 O ( n log ⁡ p n ) O(n\log ^p n) O(nlogpn),其中 p p p 是个比较小的整数,这使得分治算法成为目前计算三对角矩阵的特征值和特征向量比较常用的方法。这最后将转化为求特征方程的根的问题,然后用牛顿迭代法求根。在分而治之算法中,计算特征值和特征向量是同时进行的。它的串行算法在 Lapack 里面已经实现了。

  • 雅克比迭代:古老,收敛速度慢,精度高,适合并行,比较适合小规模的对阵矩阵的特征值求解。

  • Rayleigh 商迭代:一般具有三次收敛性,但需要解方程组,用得不多。

  • 对分法和反迭代:用得不多。对分法主要用于求解对称三对角矩阵在某个区间中的特征值,运算量约为 O ( k n ) O(kn) O(kn),其中 k k k 为所需计算的特征值的个数。反迭代用于计算特征向量,在最佳的情况下,即特征值“适当分离”时,运算量约为 O ( k n ) O(kn) O(kn),但在最差的情况下,即特征值成串地紧靠在一起时,运算量约为 O ( k 2 n ) O(k^2n) O(k2n),而且不能保证特征向量的精度(虽然实际上它几乎是精确的)。

除了 Jacobi 迭代和 Rayleygh 商迭代外,其余算法都需要将矩阵三对角化,三对角化的方法可以使用 Householder 变换。
三角化一般用在要求所有的特征值而不是少数几个。
如果只是计算一个特征值的话,可以考虑幂法、反幂法、以及带位移的反幂法。

非对称特征值问题
  • 幂法
  • 反幂法
  • 正交迭代方法
  • QR 迭代方法
  • 带 shift 的隐式 QR 迭代
  • 对于广义特征值问题的 QZ 方法(QR 推广)
Krylov 子空间方法
  • Arnoldi 方法
  • Lanczos (对称矩阵 Arnoldi)
  • 不对称矩阵 GMRES 方法
  • 对称矩阵 MINRES 方法
  • 对称正定 CG 方法

Arnoldi 方法对于条件数很大的问题并行可扩展性很差, 因为 Arnoldi 过程要精确求解大量线性方程组。

对于大规模问题

  1. krylov-schur 算法,数值稳定性好,精度高,求解速度也比较快,可以解决千万规模以下的问题。一般中小规模的问题用这个方法就可以了。

  2. LOBPCG 算法,是一种基于梯度下降类的块算法,并行性好,但数值稳定性较差,对于一些相对病态的问题无法收敛。LOBPCG 方法各部分是单独正交化的, 可以提高计算效率, 但是会影响稳定性。

  3. Jacobi-Davidson 算法,该算法可扩展性非常好,目前公开论文可解决 9 千万自由度的工程问题,但是精度较差,大概是 1e-4~1e-5 。

1、这些是目前比较主流的方法,在 SLEPc 这个库中都可以直接调用。
2、以上三种方法都可以并行,Jacobi-Davidson 扩展性最好,其次 LOBPCG,最后是 Krylov-schur。
3、矩阵特征值计算的一些库:ARPACK/PARPACK、SLEPc、BLOPEX、JDBSYM 等。
4、如果想基于 MATLAB 做简单的算法验证,可以用公开的 LOBPCG 和 JDQZ 代码,后者其实是一种广义舒尔分解算法。
5、中科院谢和虎老师的 GCGE 我认为也非常好。

小小的总结

我们可以将上述算法大致分为三类:

第一类是变换法如 QR 方法,此类方法直接对矩阵进行一系列的变换,使之成为一系列容易求解特征值的形式,采用正交相似变换进行转化。变换法用于求解矩阵的全部特征值,在计算过程中需要存储矩阵元素,存储量较大,因此这类方法往往只适合于求解中小规模的矩阵特征值问题。

第二类是幂法,这类方法是用于求解大型矩阵特征值问题的迭代法,用于求解极端特征值。

第三类是子空间方法,包括子空间迭代法、子空间投影和 Krylov 子空间方法等。通过投影算子将原来的大规模矩阵投影到合适的低维空间上,从而通过求解一个中、小规模的矩阵特征值问题就可以得到原问题的逼近,然后采用标准方法计算特征对作为原问题的近似解。由于子空间方法不需要对矩阵 A A A 做任何变换,可以节省计算和存储开支,常用于求解大型稀疏矩阵的特征值问题。

QR 方法、幂法以及 Rayleigh-Ritz 投影法是求解代数特征值问题的基本工具。子空间迭代法是幂法的块形式推广,是求解大型对称稀疏矩阵若干个极端特征值和特征向量的有效方法。这类方法的基本思想是对多个初始向量同时进行迭代,用这些初始向量产生一个子空间,再从子空间中提取所需要的特征对。子空间迭代与正交投影和 locking 策略结合可以加快收敛。

Krylov 子空间方法是特殊的 Rayleigh-Ritz 投影方法,其基本思想是用投影到 Krylov 子空间上的小规模问题的特征对作为原特征值问题的特征对的近似。在上述过程中使用 Arnoldi 过程或 Lanczos 过程给子空间建立正交基,基于此求投影后的矩阵的 Ritz 对。随着迭代步数的增加,存储量和计算量显著增加,运用多项式加速技术,得到了重开始 Arnoldi 方法。

预处理技术首先出现在线性方程组问题的求解中,迭代法求线性方程组的预处理技术就是对系数矩阵进行预处理,使其特征值分布在较小的范围内从而加速收敛。在特征值问题的求解中,Davidson 方法是预处理特征值问题的一种直接方法,把 $ (DA − λI)−1 $ 看作是残量的预处理器,从而改善矩阵 A A A 的谱分布,进而加速特征值收敛。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陆嵩

有打赏才有动力,你懂的。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值