现在需要求解一个大规模稀疏方程组 A x = b Ax=b Ax=b,可以用迭代法比如 Jacobi 迭代法、Gauss-Seidel 迭代法等,不过这一节要讨论的是 Krylov 子空间方法,核心部分是 Arnoldi 迭代。
定理(Cayley-Hamilton):设 A ∈ C n × n A\in{\mathbb C}^{n\times n} A∈Cn×n,则 A A A 的特征多项式 χ ( z ) \chi(z) χ(z) 是 A A A 的零化多项式,也即 χ ( A ) = 0 \chi(A)=0 χ(A)=0。
假设特征多项式 χ ( z ) = z n + c n − 1 z n − 1 + ⋯ + c 1 z + c 0 = ( − 1 ) n det ( A ) \chi(z)=z^n + c_{n-1}z^{n-1} + \cdots + c_1 z+ c_0=(-1)^n \operatorname{det}(A) χ(z)=zn+cn−1zn−1+⋯+c1z+c0=(−1)ndet(A),那么根据 χ ( A ) = 0 \chi(A)=0 χ(A)=0 可以得到
A − 1 = − 1 c 0 A n − 1 − c n − 1 c 0 A n − 2 + ⋯ − c 1 c 0 I = q n − 1 ( A ) A^{-1} = -\frac{1}{c_0} A^{n-1} - \frac{c_{n-1}}{c_0} A^{n-2} + \cdots -\frac{c_1}{c_0} I = q_{n-1}(A) A−1=−c01An−1−c0cn−1An−2+⋯−c0c1I=qn−1(A)
利用这个等式,在求解线性方程组的时候,给定任意初值 x 0 x_0 x0,都有 A x ∗ − A x 0 = b − A x 0 ≡ r 0 Ax^{\ast}-Ax_0=b-Ax_0 \equiv r_0 Ax∗−Ax0=b−Ax0≡r0,于是 x ∗ = x 0 + q n − 1 ( A ) r 0 x^{\ast} = x_0 + q_{n-1}(A)r_0 x∗=x0+qn−1(A)r0,因此理论上可以在空间
K = { r 0 , A r 0 , ⋯ , A m r 0 , ⋯ , A n − 1 r 0 } \mathcal{K}=\left\{\boldsymbol{r}_{0}, A \boldsymbol{r}_{0}, \cdots, A^{m} \boldsymbol{r}_{0}, \cdots, A^{n-1} \boldsymbol{r}_{0}\right\} K={r0,Ar0,⋯,Amr0,⋯,An−1r0}
中找到方程组的准确解,但是科学与工程计算问题中 n n n 可以达到 1 0 6 10^6 106 量级,直接求解代价太高。因此希望在其一个低维子空间中搜索近似解。
定义 m m m 维 Krylov 子空间为
K m = span ( r 0 , A r 0 , A 2 r 0 , ⋯ , A m − 1 r 0 ) \mathcal{K}_{m}=\operatorname{span}\left(\boldsymbol{r}_{0}, A \boldsymbol{r}_{0}, A^{2} \boldsymbol{r}_{0}, \cdots, A^{m-1} \boldsymbol{r}_{0}\right) Km=span(r0,Ar0,A2r0,⋯,Am−1r0)
方程组求解问题转化为
min x ∈ x 0 + K m ∥ x ∗ − x ∥ . \min_{x\in x_0+{\mathcal K}_m} \Vert x^{\ast} - x\Vert. x∈x0+Kmmin∥x∗−x∥.
现在的问题就是在何种范数意义下求解问题 min x ∈ x 0 + K m ∥ x ∗ − x ∥ \min_{x\in x_0+{\mathcal K}_m} \Vert x^{\ast} - x\Vert minx∈x0+Km∥x∗−x∥。假设 K m {\mathcal K}_m Km 的一组基作为列向量构成矩阵 V m V_m Vm,最优解为 x m = x 0 + V m y ∗ ∈ x 0 + K m , y ∗ ∈ R m x_m = x_0 + V_m y^{\ast} \in x_0 + {\mathcal K}_m, ~ y^{\ast}\in{\mathbb R}^{m} xm=x0+Vmy∗∈x0+Km, y∗∈Rm。
取 2 2 2 范数 min x ∈ x 0 + K m ∥ x ∗ − x ∥ 2 \min_{x\in x_0+{\mathcal K}_m} \Vert x^{\ast} - x\Vert_2 minx∈x0+Km∥x∗−x∥2,那么根据最佳平方逼近条件(对 x x x求导,取零点),或者 Galerkin 正交条件,可以推出法方程为
⟨ x ∗ − x m , y ⟩ = 0 , ∀ y ∈ K m ⟺ V m T ( x ∗ − x m ) = 0 \begin{aligned} &\langle x^{\ast} - x_m, y \rangle = 0, ~ \forall y\in {\mathcal K}_m \\ \iff & V_m^{\rm T}(x^{\ast}-x_m) = 0 \end{aligned} ⟺⟨x∗−xm,y⟩=0, ∀y∈KmVmT(x∗−xm)=0
但是这个方法不可行!因为要求 x m x_m xm 就需要知道 x ∗ x^{\ast} x∗。
若 A A A 对称正定,那么可以改求解问题 min x ∈ x 0 + K m ⟨ A ( x − x ∗ ) , x − x ∗ ⟩ \min_{x\in x_0+{\mathcal K}_m} \langle A(x-x^{\ast}), x-x^{\ast}\rangle minx∈x0+Km⟨A(x−x∗),x−x∗⟩,根据Galerkin 正交条件有法方程
⟨ A ( x ∗ − x m ) , y ⟩ = 0 , ∀ y ∈ K m ⟺ r m = A ( x ∗ − x m ) ⊥ K m ⟺ V m T ( r 0 − A x m ) = 0 \begin{aligned} &\langle A(x^{\ast} - x_m), y \rangle = 0, ~ \forall y\in {\mathcal K}_m \\ \iff & r_m = A(x^{\ast}-x_m) \perp {\mathcal K}_m \\ \iff & V_m^{\rm T}(r_0 - Ax_m) = 0 \end{aligned} ⟺⟺⟨A(x∗−xm),y⟩=0, ∀y∈Kmrm=A(x∗−xm)⊥KmVmT(r0−Axm)=0
这个方法可行!后面需要做两件事情:1)求出一组基 V m V_m Vm;2)解法方程。
Note:这里为了得到法方程,需要假设 A A A 对称正定。但是在后面的 FOM 方法中,不论 A A A 是否正定,都基于 Galerkin 条件直接采用了这一法方程来求解线性方程组。至于这么做是否有理论支持我也不太清楚,就姑且相信它是合理的。
当 A A A 非奇异,不去求解 min ∥ x ∗ − x ∥ \min \Vert x^{\ast} - x\Vert min∥x∗−x∥,而是求解 min x ∈ x 0 + K m ∥ A ( x ∗ − x ) ∥ 2 \min_{x\in x_0+{\mathcal K}_m} \Vert A(x^{\ast} - x)\Vert_2 minx∈x0+Km∥A(x∗−x)∥2,那么再次根据 Galerkin 条件,可以导出法方程
⟨ A ( x ∗ − x m ) , A y ⟩ = 0 , ∀ y ∈ K m ⟺ r m = A ( x ∗ − x m ) ⊥ A K m ⟺ V m T A T ( r 0 − A x m ) = 0 \begin{aligned} &\langle A(x^{\ast} - x_m), Ay \rangle = 0, ~ \forall y\in {\mathcal K}_m \\ \iff & r_m = A(x^{\ast}-x_m) \perp A{\mathcal K}_m \\ \iff & V_m^{\rm T}A^{\rm T}(r_0 - Ax_m) = 0 \end{aligned} ⟺⟺⟨A(x∗−xm),Ay⟩=0, ∀y∈Kmrm=A(x∗−xm)⊥AKmVmTAT(r0−Axm)=0
这个方法也是可行的。
不论如何,上面几种方法最后都归结为两个问题:
获得正交基底的方法主要有 Arnoldi 过程(CGS)、改进 Arnoldi 过程(MGS)、以及 Lanczos 过程。名字起的很 fancy,别被吓到,其实他们都只是 Gram-Schmidt 正交化方法。
迭代过程可以归结为
v 1 = r 0 / ∥ r 0 ∥ w j = A v j − ⟨ A v j , v 1 ⟩ v 1 − ⟨ A v j , v 2 ⟩ v 2 − ⋯ − ⟨ A v j , v j ⟩ v j v j + 1 = w j ∥ w j ∥ 2 , j = 1 , 2 , ⋯ h i , j = ⟨ A v j , v i ⟩ \begin{aligned} \boldsymbol{v}_{1} &= \boldsymbol{r}_{0} / \Vert \boldsymbol{r}_{0} \Vert \\ \boldsymbol{w}_{j} &=A \boldsymbol{v}_{j}-\langle A \boldsymbol{v}_{j}, \boldsymbol{v}_{1}\rangle \boldsymbol{v}_{1}-\langle A \boldsymbol{v}_{j}, \boldsymbol{v}_{2}\rangle \boldsymbol{v}_{2}-\cdots-\langle A \boldsymbol{v}_{j}, \boldsymbol{v}_{j}\rangle \boldsymbol{v}_{j} \\ \boldsymbol{v}_{j+1} &=\frac{\boldsymbol{w}_{j}}{\left\|\boldsymbol{w}_{j}\right\|_{2}}, j=1,2, \cdots \\ h_{i,j} &= \langle A \boldsymbol{v}_{j}, \boldsymbol{v}_{i}\rangle \end{aligned} v1wjvj+1hi,j=r0/∥r0∥=Avj−⟨Avj,v1⟩v1−⟨Avj,v2⟩v2−⋯−⟨Avj,vj⟩vj=∥wj∥2wj,j=1,2,⋯=⟨Avj,vi⟩
得到的 { v 1 , v 2 , . . . , v m , . . . , v n } \{ v_1, v_2, ..., v_m,..., v_n \} {v1,v2,...,vm,...,vn} 是单位正交基。由 h i , j h_{i,j} hi,j 作为元素构成矩阵 H m ∈ R m × m H_m \in {\mathbb R}^{m\times m} Hm∈Rm×m,可以验证 H m H_m Hm 为 Hessenberg 阵,并且 h i + 1 , i = ∥ w i ∥ 2 h_{i+1,i}=\Vert \boldsymbol{w}_{i} \Vert_2 hi+1,i=∥wi∥2。在 H m H_m Hm 的基础上可以定义 H ˉ m ∈ R ( m + 1 ) × m \bar{H}_m \in {\mathbb R}^{(m+1)\times m} Hˉm∈R(m+1)×m,也就是在最后一行下面再加一行 [ 0 , . . . , 0 , h m + 1 , m ] [0,...,0,h_{m+1,m}] [0,...,0,hm+1,m]。
可以验证他们满足如下等式,这三个式子在后面会频繁用到,极其重要!
A V m = V m H m + w m e m T = V m + 1 H ˉ m V m T A V m = H m \begin{aligned} AV_m &= V_m H_m + \boldsymbol{w}_{m} \boldsymbol{e}_{m}^{\rm T} \\ &= V_{m+1} \bar{H}_m \\ V_m^{\rm T} A V_m &= H_m \end{aligned} AVmVmTAVm=VmHm+wmemT=Vm+1Hˉm=Hm
前面的 Arnoldi 过程在计算 w j \boldsymbol{w}_{j} wj 的时候,相当于把 A v j A \boldsymbol{v}_{j} Avj 分别计算了 j j j 次投影,每次都是向一个一维的子空间 span { v i } \operatorname{span}\{ \boldsymbol{v}_{i} \} span{vi} 投影,可能会有计算不稳定的问题。对其进行改进的方法如下,交换顺序之后,每次都是向一个 n − 1 n-1 n−1 维子空间投影。
是 Arnoldi 过程的特殊情况,当 A = A T A=A^{\rm T} A=AT,那么 H m H_m Hm 为三对角矩阵,那么 w j \boldsymbol{w}_{j} wj 的计算简化为
w j = A v j − ⟨ A v j , v j − 1 ⟩ v j − 1 − ⟨ A v j , v j ⟩ v j \boldsymbol{w}_{j} = A \boldsymbol{v}_{j}-\langle A \boldsymbol{v}_{j}, \boldsymbol{v}_{j-1}\rangle \boldsymbol{v}_{j-1}-\langle A \boldsymbol{v}_{j}, \boldsymbol{v}_{j}\rangle \boldsymbol{v}_{j} wj=Avj−⟨Avj,vj−1⟩vj−1−⟨Avj,vj⟩vj
针对上面几种不同的迭代过程,可以有不同的求解方法。
FOM (Full orthogonalization method) 根据 Galerkin 条件, r m ⊥ K m r_m\perp {\mathcal K}_m rm⊥Km,根据法方程 V m T ( r 0 − A V m y ) = 0 V_m^{\rm T}(r_0 - AV_my)=0 VmT(r0−AVmy)=0,因此有
r m ⊥ K m ⟺ V m T ( r 0 − A V m y ) = 0 ⟹ H m y = ∥ r 0 ∥ e 1 \begin{aligned} & r_m\perp {\mathcal K}_m \iff V_m^{\rm T}(r_0 - AV_my)=0 \Longrightarrow H_m y = \Vert r_0\Vert \boldsymbol{e}_1 \end{aligned} rm⊥Km⟺VmT(r0−AVmy)=0⟹Hmy=∥r0∥e1
伪代码为
根据 x m = x 0 + V m y x_m = x_0 + V_m y xm=x0+Vmy,残差有 r m = r 0 − A V m y = r 0 − ( V m H m + w m e m T ) y = − w m e m T y r_m = r_0-AV_my=r_0-(V_m H_m + \boldsymbol{w}_{m} \boldsymbol{e}_{m}^{\rm T})y = -\boldsymbol{w}_{m} \boldsymbol{e}_{m}^{\rm T} y rm=r0−AVmy=r0−(VmHm+wmemT)y=−wmemTy。
若 A A A 对称,那么 H m H_m Hm 为三对角阵,特别地记为 T m T_m Tm
T m = ( α 1 β 2 β 2 α 2 β 3 ⋱ ⋱ ⋱ β m − 1 α m − 1 β m β m α m ) ∈ R m × m T_{m}=\left(\begin{array}{ccccc} \alpha_{1} & \beta_{2} & & & \\ \beta_{2} & \alpha_{2} & \beta_{3} & & \\ & \ddots & \ddots & \ddots & \\ & & \beta_{m-1} & \alpha_{m-1} & \beta_{m} \\ & & & \beta_{m} & \alpha_{m} \end{array}\right) \in \mathbb{R}^{m \times m} Tm=⎝⎜⎜⎜⎜⎛α1β2β2α2⋱β3⋱βm−1⋱αm−1βmβmαm⎠⎟⎟⎟⎟⎞∈Rm×m
记 T m T_m Tm 的 LU 分解为
T m = L m U m = ( 1 λ 2 1 ⋱ ⋱ λ m − 1 1 λ m 1 ) ( η 1 ω 2 η 2 ω 3 ⋱ ⋱ η m − 1 ω m η m ) T_{m}=L_{m} U_{m}=\left(\begin{array}{ccccc} 1 & & & & \\ \lambda_{2} & 1 & & & \\ & \ddots & \ddots & & \\ & & \lambda_{m-1} & 1 & \\ & & & \lambda_{m} & 1 \end{array}\right)\left(\begin{array}{ccccc} \eta_{1} & \omega_{2} & & & \\ & \eta_{2} & \omega_{3} & & \\ & & \ddots & \ddots & \\ & & & \eta_{m-1} & \omega_{m} \\ & & & & \eta_{m} \end{array}\right) Tm=LmUm=⎝⎜⎜⎜⎜⎛1λ21⋱⋱λm−11λm1⎠⎟⎟⎟⎟⎞⎝⎜⎜⎜⎜⎛η1ω2η2ω3⋱⋱ηm−1ωmηm⎠⎟⎟⎟⎟⎞
其中 ω m = β m \omega_{m}=\beta_{m} ωm=βm, λ m = β m η m − 1 \quad \lambda_{m}=\frac{\beta_{m}}{\eta_{m-1}} λm=ηm−1βm, η m = α m − λ m ω m \quad \eta_{m}=\alpha_{m}-\lambda_{m} \omega_{m} ηm=αm−λmωm。那么根据下面这一性质,Lanczos过程可以迭代进行
L m = ( L m − 1 0 l m − 1 T 1 ) , U m = ( U m − 1 y m − 1 0 T η m ) L m − 1 = ( L m − 1 − 1 0 − l m − 1 T L m − 1 − 1 1 ) , U m − 1 = ( U m − 1 − 1 − 1 η m U m − 1 − 1 y m − 1 0 T 1 / η m ) \begin{aligned} L_{m}=\left(\begin{array}{c|c} L_{m-1} & \mathbf{0} \\ \hline \boldsymbol{l}_{m-1}^{T} & 1 \end{array}\right), \quad &U_{m}=\left(\begin{array}{c|c} U_{m-1} & \boldsymbol{y}_{m-1} \\ \hline \mathbf{0}^{T} & \eta_{m} \end{array}\right) \\ L_{m}^{-1} = \left(\begin{array}{c|c} L_{m-1}^{-1} & \mathbf{0} \\ \hline -\boldsymbol{l}_{m-1}^{T}L_{m-1}^{-1} & 1 \end{array}\right), \quad & U_{m}^{-1}=\left(\begin{array}{c|c} U_{m-1}^{-1} & -\frac{1}{\eta_m} U_{m-1}^{-1} \boldsymbol{y}_{m-1} \\ \hline \mathbf{0}^{T} & 1/\eta_{m} \end{array}\right) \end{aligned} Lm=(Lm−1lm−1T01),Lm−1=(Lm−1−1−lm−1TLm−1−101),Um=(Um−10Tym−1ηm)Um−1=(Um−1−10T−ηm1Um−1−1ym−11/ηm)
根据这个方法,还可以到处CG(共轭梯度)法的形式。
Generalized minimal residual method (GMRES) 实际上就是最小化参量的二范数,即 min ∥ r m ∥ 2 = min x ∈ x 0 + K m ∥ A ( x ∗ − x ) ∥ 2 \min \Vert r_m \Vert_2 = \min_{x\in x_0+{\mathcal K}_m} \Vert A(x^{\ast} - x)\Vert_2 min∥rm∥2=minx∈x0+Km∥A(x∗−x)∥2,根据 Galerkin 条件,应有 r m ⊥ A K m ⟺ V m T A T A V m y = V m T A T r 0 , y ∈ R m r_m\perp A{\mathcal K}_m \iff V_m^{\rm T}A^{\rm T}AV_my = V_m^{\rm T}A^{\rm T}r_0, ~ y\in{\mathbb R}^m rm⊥AKm⟺VmTATAVmy=VmTATr0, y∈Rm。
另个一思路是 min ∥ r 0 − A V m y ∥ = min ∥ V m + 1 ( ∥ r 0 ∥ e 1 − H ˉ m y ) ∥ = min ∥ ∥ r 0 ∥ e 1 − H ˉ m y ∥ \min\Vert r_0-AV_my\Vert = \min \Vert V_{m+1} (\Vert r_0\Vert e_1 - \bar{H}_my)\Vert = \min \Vert \Vert r_0\Vert e_1 - \bar{H}_my\Vert min∥r0−AVmy∥=min∥Vm+1(∥r0∥e1−Hˉmy)∥=min∥∥r0∥e1−Hˉmy∥,最小二乘解 H ˉ m T ( H ˉ m y − ∥ r 0 ∥ e 1 ) = 0 \bar{H}_m^{\rm T}(\bar{H}_my - \Vert r_0\Vert e_1)=0 HˉmT(Hˉmy−∥r0∥e1)=0。
是 GMRES 的特殊情况,当 A = A T A=A^{\rm T} A=AT 的时候, H m H_m Hm 为三对角阵 T m T_m Tm, min ∥ r m ∥ 2 = min ∥ ∥ r 0 ∥ e 1 − T m y ∥ \min \Vert r_m\Vert_2 = \min \Vert \Vert r_0\Vert e_1 - T_m y \Vert min∥rm∥2=min∥∥r0∥e1−Tmy∥。
最后给我的博客打个广告,欢迎光临
https://glooow1024.github.io/
https://glooow.gitee.io/
前面的一些博客链接如下
泛函分析专栏
高等数值分析专栏
【高等数值分析】多项式插值
【高等数值分析】函数逼近
【高等数值分析】数值积分和数值微分
【高等数值分析】常微分方程数值解
【高等数值分析】Krylov子空间方法