稳定双共轭梯度法

来自testwiki
跳转到导航 跳转到搜索

数值线性代数中,稳定双共轭梯度法Template:Lang-en,通常简称为Template:Abbr)是一种由荷兰数学家 H. A. van der Vorst 提出的用于数值求解非对称线性方程组迭代方法。它是双共轭梯度法(BiCG)的一个变种,比双共轭梯度法本身以及诸如共轭梯度平方法(CGS)等其他变种有更快速和更平滑的收敛性。它是一种 Krylov 子空间方法。

算法步骤

无预处理稳定双共轭梯度法

要求解线性方程组 𝑨𝒙=𝒃,稳定双共轭梯度法从初始解 𝒙0 开始按以下步骤迭代:

  1. 𝒓0=𝒃𝑨𝒙
  2. 任意选择向量 𝒓^0 使得 (𝒓^0,𝒓0)0,例如,𝒓^0=𝒓0
  3. ρ0=α=ω0=1
  4. 𝒗0=𝒑0=0
  5. i=1,2,3,
    1. ρi=(𝒓^0,𝒓i1)
    2. β=(ρi/ρi1)(α/ωi1)
    3. 𝒑i=𝒓i1+β(𝒑i1ωi1𝒗i1)
    4. 𝒗i=𝑨𝒑i
    5. α=ρi/(𝒓^0,𝒗i)
    6. 𝒔=𝒓i1α𝒗i
    7. 𝒕=𝑨𝒔
    8. ωi=(𝒕,𝒔)/(𝒕,𝒕)
    9. 𝒙i=𝒙i1+α𝒑i+ωi𝒔
    10. 𝒙i 足够精确则退出
    11. 𝒓i=𝒔ωi𝒕

预处理稳定双共轭梯度法

预处理通常被用来加速迭代方法的收敛。要使用预处理子 𝑲=𝑲1𝑲2𝑨 来求解线性方程组 𝑨𝒙=𝒃,预处理稳定双共轭梯度法从初始解 𝒙0 开始按以下步骤迭代:

  1. 𝒓0=𝒃𝑨𝒙
  2. 任意选择向量 𝒓^0 使得 (𝒓^0,𝒓0)0,例如,𝒓^0=𝒓0
  3. ρ0=α=ω0=1
  4. 𝒗0=𝒑0=0
  5. i=1,2,3,
    1. ρi=(𝒓^0,𝒓i1)
    2. β=(ρi/ρi1)(α/ωi1)
    3. 𝒑i=𝒓i1+β(𝒑i1ωi1𝒗i1)
    4. 𝒚=𝑲1𝒑i
    5. 𝒗i=𝑨𝒚
    6. α=ρi/(𝒓^0,𝒗i)
    7. 𝒔=𝒓iα𝒗i
    8. 𝒛=𝑨𝒔
    9. 𝒕=𝑲1𝒛
    10. ωi=(𝑲11𝒕,𝑲11𝒔)/(𝑲11𝒕,𝑲11𝒕)
    11. 𝒙i=𝒙i1+α𝒚+ωi𝒛
    12. 𝒙i 足够精确则退出
    13. 𝒓i=𝒔ωi𝒕

这个形式等价于将无预处理的稳定双共轭梯度法应用于显式预处理后的方程组

𝑨~𝒙~=𝒃~

其中 𝑨~=𝑲11𝑨𝑲21𝒙~=𝑲2𝒙𝒃~=𝑲11𝒃。换句话说,左预处理和右预处理都可以通过这个形式实施。

推导

双共轭梯度法的多项式形式

在双共轭梯度法中,搜索方向 𝒑i𝒑^i 以及残量 𝒓i𝒓^i 通过以下递推关系更新:

𝒑i=𝒓i+βi𝒑i1,
𝒑^i=𝒓^i+βi𝒑i1,
𝒓i=𝒓i1αi𝑨𝒑i,
𝒓^i=𝒓^i1α𝑨T𝒑^i.

常数 αiβi 取值为

αi=ρi/(𝒑^i,𝑨𝒑i),
βi=ρi/ρi1,

其中 ρi=(𝒓^i1,𝒓i1),使得残量和搜索方向分别满足双正交性和双共轭性,也就是对于 ij

(𝒓^i,𝒓j)=0,
(𝒑^i,𝑨𝒑j)=0.

不难证明,

𝒓i=Pi(𝑨)𝒓0,
𝒓^i=Pi(𝑨T)𝒓^0,
𝒑i+1=Ti(𝑨)𝒓0,
𝒑^i+1=Ti(𝑨T)𝒓^0,

其中 Pi(𝑨)Ti(𝑨) 是关于 𝑨i 次多项式。这些多项式满足以下递推关系:

Pi(𝑨)=Pi1(𝑨)αi𝑨Ti1(𝑨),
Ti(𝑨)=Pi(𝑨)βi+1Ti1(𝑨).

从双共轭梯度法导出稳定双共轭梯度 法

双共轭梯度法的残量和搜索方向不是必须显式跟踪的。换句话说,双共轭梯度法的迭代是可以隐式进行的。稳定双共轭梯度法中希望得到

𝒓~i=Qi(𝑨)Pi(𝑨)𝒓0

的递推关系,其中 Qi(𝑨)=(𝑰ω1𝑨)(𝑰ω1𝑨)(𝑰ωi𝑨)ωj 为适当选取的常数。以此代替 𝒓i=Pi(𝑨) 的目的是希望 Qi(𝑨) 可以使 𝒓~i 有比 𝒓i 更快速和更平滑的收敛性。

根据 Pi(𝑨)Ti(𝑨) 的递推关系以及 Qi(𝑨) 的定义,

Qi(𝑨)Pi(𝑨)𝒓0=(𝑰ωi𝑨)(Qi1(𝑨)Pi1(𝑨)𝒓0αi𝑨Qi1(𝑨)Pi1(𝑨)𝒓0).

于是还需要一条关于 Qi(𝑨)Ti(𝑨)𝒓0 的递推关系。这同样可以从双共轭梯度法的递推关系中导出:

Qi(𝑨)Ti(𝑨)𝒓0=Qi(𝑨)Pi(𝑨)𝒓0βi+1(𝑰ωi𝑨)Qi1(𝑨)Ti1(𝑨)𝒓0.

类似于 𝒓~i,稳定双共轭梯度法定义

𝒑~i+1=Qi(𝑨)Ti(𝑨)𝒓0.

写成向量形式,𝒑~i𝒓~i 的递推关系就是

𝒑~i=𝒓~i1+βi(𝑰ωi1𝑨)𝒑~i1,
𝒓~i=(𝑰ωi𝑨)(𝒓~i1αi𝑨𝒑~i).

为了导出 𝒙i 的递推关系,定义

𝒔i=𝒓~i1αi𝑨𝒑~i.

于是 𝒓~i 的递推关系就可以写成

𝒓~i=𝒓~i1αi𝑨𝒑~iωi𝑨𝒔i,

这对应于

𝒙i=𝒙i1+αi𝒑~i+ωi𝒔i.

确定稳定双共轭梯度法的常数

现在只需确定双共轭梯度法的常数 αiβi 以及选择一个合适的 ωi

在双共轭梯度法中,βi=ρi/ρi1, 其中

ρi=(𝒓^i1,𝒓i1)=(Pi1(𝑨T)𝒓^0,Pi1(𝑨)𝒓0).

由于稳定双共轭梯度法不显式跟踪 𝒓^i𝒓iρi 不能立即用这条公式计算出来。但是,它可以和标量

ρ~i=(Qi1(𝑨T)𝒓^0,Pi1(𝑨)𝒓0)=(𝒓^0,Qi1(𝑨)Pi1(𝑨)𝒓0)=(𝒓^0,𝒓i1)

关联起来。由于双正交性,𝒓i1=Pi1(𝑨)𝒓0 正交于 Ui2(𝑨T)𝒓^0,其中 Ui2(𝑨T) 是关于 𝑨T 的任意 i2 次多项式。因此在点积 (Pi1(𝑨T)𝒓^0,Pi1(𝑨)𝒓0)(Qi1(𝑨T)𝒓^0,Pi1(𝑨)𝒓0) 中只需考虑 Pi1(𝑨T)Qi1(𝑨T) 的最高次项。Pi1(𝑨T)Qi1(𝑨T) 的最高次项系数分别是 (1)i1α1α2αi1(1)i1ω1ω2ωi1。因此

ρi=(α1/ω1)(α2/ω2)(αi1/ωi1)ρ~i,

于是

βi=ρi/ρi1=(ρ~i/ρ~i1)(αi1/ωi1).

关于 αi 的简单公式可以类似地导出。在双共轭梯度法中,

αi=ρi/(𝒑^,𝑨𝒑i)=(Pi1(𝑨T)𝒓^0,Pi1(𝑨)𝒓0)/(Ti1(𝑨T)𝒓^0,𝑨Ti1(𝑨)𝒓0).

类似于上面的情况,由于双正交性和双共轭性,在点积中只需考虑 Pi1(𝑨T)Ti1(𝑨T) 的最高次项。Pi1(𝑨T)Ti1(𝑨T) 的最高次项系数恰巧是相同的。因此,它们可以在公式中被同时替换为 Qi1(𝑨T),于是

αi=(Qi1(𝑨T)𝒓^0,Pi1(𝑨)𝒓0)/(Qi1(𝑨T)𝒓^0,𝑨Ti1(𝑨)𝒓0)=ρ~i/(𝒓^0,𝑨Qi1(𝑨)Ti1(𝑨)𝒓0)=ρ~i/(𝒓^0,𝑨𝒑~i).

最后,稳定双共轭梯度法选择 ωi 使得 𝒓~i=(𝑰ωi𝑨)𝒔i 的 2-范数作为 ωi 的函数被最小化。这在

((𝑰ωi𝑨)𝒔i,𝑨𝒔i)=0

时达到,因此 ωi 的最优值是

ωi=(𝑨𝒔i,𝒔i)/(𝑨𝒔i,𝑨𝒔i).

相关主题

参考文献