7.1_Krylov子空间

7.1 Krylov子空间

7.1.1 Arnoldi过程与Lanczos过程

ARn×nA \in \mathbb{R}^{n \times n} , rRnr \in \mathbb{R}^n , 则由 AArr 生成的 Krylov 子空间定义为

Km(A,r)=span{r,Ar,A2r,,Am1r},mn,\mathcal {K} _ {m} (A, r) = \operatorname {s p a n} \{r, A r, A ^ {2} r, \dots , A ^ {m - 1} r \}, \quad m \leq n,

通常简记为 κm\kappa_{m}

设解析解在 Km\mathcal{K}_m 中的“最佳近似解”为 x(m)x^{(m)} 。我们假定 r,Ar,A2r,,Am1rr, Ar, A^2 r, \ldots, A^{m-1}r 线性无关,则 dimKm=m\dim \mathcal{K}_m = m 。令 v1,v2,,vmv_1, v_2, \ldots, v_mKm\mathcal{K}_m 的一组基,则 Km\mathcal{K}_m 中的任意向量 xx 均可表示为

x=y1v1+y2v2++ymvm=Vmy,x = y _ {1} v _ {1} + y _ {2} v _ {2} + \dots + y _ {m} v _ {m} = V _ {m} y,

其中 y=[y1,y2,,ym]y = [y_{1},y_{2},\ldots ,y_{m}]^{\top} 为线性表出系数, Vm=[v1,v2,,vm]V_{m} = [v_{1},v_{2},\dots ,v_{m}] . 于是, 寻找“最佳近似解” x(m)x^{(m)}

就转化为下面两个子问题:

(1) 寻找一组合适的基 v1,v2,,vmv_{1}, v_{2}, \ldots, v_{m} ;
(2) 求出 x(m)x^{(m)} 在这组基下面的线性表出系数 y(m)=[y1(m),y2(m),,ym(m)]y^{(m)} = \left[y_1^{(m)}, y_2^{(m)}, \ldots, y_m^{(m)}\right]^\top .

Arnoldi过程

首先考虑基的选取. 假定 r,Ar,A2r,,Am1rr, Ar, A^2 r, \ldots, A^{m-1}r 线性无关, 因此它们就自然地组成 Km\mathcal{K}_m 的一组基. 但为了确保算法的稳定性, 一般来说, 我们通常希望选取一组标准正交基. 这并不困难, 只需对向量组 {r,Ar,A2r,,Am1r}\{r, Ar, A^2 r, \ldots, A^{m-1}r\} 进行单位正交化即可. 对这个过程略加修改, 就就得到下面的Arnoldi过程.

算法7.1.Arnoldi过程(MGS)
1: v1=r/r2v_{1} = r / \| r \|_{2}
2: for j=1j = 1 to m1m - 1 do
3: z=Avjz = A v_{j}
4: for i=1i = 1 to jj do % MGS
5: hi,j=(vi,z)h_{i,j} = (v_{i}, z)
6: z=zhi,jviz = z - h_{i,j} v_{i}
7: end for
8: hj+1,j=z2h_{j+1,j} = \| z \|_{2}
9: if hj+1,j=0h_{j+1,j} = 0 then
10: break
11: end if
12: vj+1=z/hj+1,jv_{j+1} = z / h_{j+1,j}
13: end for

可以证明, Arnoldi 过程生成的向量 v1,v2,,vmv_{1}, v_{2}, \ldots, v_{m} 构成 Km\mathcal{K}_{m} 的一组标准正交基.

引理7.1 如果Arnoldi过程不中断, 则

Km=span{v1,v2,,vm}.\mathcal {K} _ {m} = \operatorname {s p a n} \left\{v _ {1}, v _ {2}, \dots , v _ {m} \right\}.

(留作练习, 归纳法)

Vm=[v1,v2,,vm],V_{m} = [v_{1},v_{2},\ldots ,v_{m}],

Hm+1,m=[h1,1h1,2h1,3h1,mh2,1h2,2h2,3h2,mh3,2h3,3h3,mhm,mhm+1,m]R(m+1)×m,H _ {m + 1, m} = \left[ \begin{array}{c c c c c} h _ {1, 1} & h _ {1, 2} & h _ {1, 3} & \dots & h _ {1, m} \\ h _ {2, 1} & h _ {2, 2} & h _ {2, 3} & \dots & h _ {2, m} \\ & h _ {3, 2} & h _ {3, 3} & \dots & h _ {3, m} \\ & & \ddots & \ddots & \vdots \\ & & & \ddots & h _ {m, m} \\ & & & & h _ {m + 1, m} \end{array} \right] \in \mathbb {R} ^ {(m + 1) \times m},

则由Arnoldi过程可知

hj+1,jvj+1=Avjh1,jv1h2,jv2hj,jvj,h _ {j + 1, j} v _ {j + 1} = A v _ {j} - h _ {1, j} v _ {1} - h _ {2, j} v _ {2} - \dots - h _ {j, j} v _ {j},

Avj=i=1j+1hi,jvi=Vm+1[h1,jhj+1,j00]=Vm+1Hm+1,m(:,j).A v _ {j} = \sum_ {i = 1} ^ {j + 1} h _ {i, j} v _ {i} = V _ {m + 1} \left[ \begin{array}{c} h _ {1, j} \\ \vdots \\ h _ {j + 1, j} \\ 0 \\ \vdots \\ 0 \end{array} \right] = V _ {m + 1} H _ {m + 1, m} (:, j).

所以有

AVm=Vm+1Hm+1,m=VmHm+hm+1,mvm+1em,(7.1)A V _ {m} = V _ {m + 1} H _ {m + 1, m} = V _ {m} H _ {m} + h _ {m + 1, m} v _ {m + 1} e _ {m} ^ {\top}, \tag {7.1}

其中 HmH_{m} 是由 Hm+1,mH_{m + 1,m} 的前 mm 行组成的矩阵,即 Hm=Hm+1,m(1:m,1:m),em=[0,,0,1]TH_{m} = H_{m + 1,m}(1:m,1:m),e_{m} = [0,\dots ,0,1]^{\mathsf{T}}\in Rm\mathbb{R}^m .由于 VmV_{m} 是列正交矩阵,上式两边同乘 VmTV_{m}^{\mathsf{T}} 可得

VmAVm=Hm.(7.2)V _ {m} ^ {\top} A V _ {m} = H _ {m}. \tag {7.2}

等式 (7.1) 和 (7.2) 是 Arnoldi 过程的两个重要性质. 这两个性质也可以通过下图来表示.

AVm=Vm+1Hm+1,m=VmHm+A \boxed {V _ {m}} = V _ {m + 1} \boxed {H _ {m + 1, m}} = V _ {m} \boxed {H _ {m}} +

需要指出的是, 如果 r,Ar,A2r,,Am1rr, Ar, A^2 r, \ldots, A^{m-1} r 线性相关, 则 Arnoldi 过程就会提前中断. 此时, 我们会得到一个不变子空间.

定理7.2 如果Arnoldi过程在第 kk 步时中断, 即 hk+1,k=0h_{k+1,k} = 0 , 其中 k<mk < m . 则有 AVk=VkHkAV_k = V_kH_k , 即 Kk\mathcal{K}_kAA 的一个不变子空间.

(留作课外自习, 直接利用等式 (7.1))

Lanczos过程

如果 AA 是对称矩阵, 则 HmH_{m} 为对称三对角矩阵, 此时将其记为 TmT_{m} , 即

Tm=[α1β1β1βm1βm1αm].(7.3)T _ {m} = \left[ \begin{array}{c c c c} \alpha_ {1} & \beta_ {1} & & \\ \beta_ {1} & \ddots & \ddots & \\ & \ddots & \ddots & \beta_ {m - 1} \\ & & \beta_ {m - 1} & \alpha_ {m} \end{array} \right]. \tag {7.3}

与Arnoldi过程类似, 我们有下面的性质

AVm=VmTm+βmvm+1em,(7.4)A V _ {m} = V _ {m} T _ {m} + \beta_ {m} v _ {m + 1} e _ {m} ^ {\top}, \tag {7.4}
VmTAVm=Tm.(7.5)V _ {m} ^ {\mathsf {T}} A V _ {m} = T _ {m}. \tag {7.5}

考察关系式 (7.4) 两边的第 jj 列可知

βjvj+1=Avjαjvjβj1vj1,j=1,2,,\beta_ {j} v _ {j + 1} = A v _ {j} - \alpha_ {j} v _ {j} - \beta_ {j - 1} v _ {j - 1}, \quad j = 1, 2, \dots ,

这里我们令 v0=0v_{0} = 0β0=0\beta_0 = 0 根据这个三项递推公式,Arnoldi过程可简化为下面的Lanczos过程

算法7.2.Lanczos过程

1: Set v0=0v_{0} = 0 and β0=0\beta_0 = 0
2: v1=r/r2v_{1} = r / \| r \|_{2}
3: for j=1j = 1 to m1m - 1 do
4: z=Avjz = A v_{j}
5: αj=(vj,z)\alpha_{j} = (v_{j},z)
6: z=zαjvjβj1vj1z = z - \alpha_{j}v_{j} - \beta_{j - 1}v_{j - 1}
7: βj=z2\beta_{j} = \| z\|_{2}
8: if βj=0\beta_{j} = 0 then
9: break

10: end if
11: vj+1=z/βjv_{j + 1} = z / \beta_j
12: end for

可以证明, 由Lanczos过程得到的向量组 {v1,v2,,vm}\{v_{1}, v_{2}, \ldots, v_{m}\} 是单位正交的.

定理7.3 设 {v1,v2,,vm}\{v_{1}, v_{2}, \ldots, v_{m}\} 是由Lanczos过程得到的向量组,则

(vi,vj)=δij={1,i=j,0,ij,i,j=1,2,,m.(v _ {i}, v _ {j}) = \delta_ {i j} = \left\{ \begin{array}{l l} 1, & i = j, \\ 0, & i \neq j, \end{array} \right. i, j = 1, 2, \ldots , m.

(留作练习)

7.1.2 Krylov子空间方法一般格式

Krylov子空间迭代法的一般过程

(1) 令 m=1m = 1
(2) 定义 Krylov 子空间 Km\mathcal{K}_m ;
(3) 找出仿射空间 x(0)+Kmx^{(0)} + \mathcal{K}_m 中的“最佳近似”解;
(4) 如果这个近似解满足精度要求, 则迭代结束; 否则令 mm+1m \gets m + 1 , 即将 Krylov 子空间的维数增加一维, 并返回第 (3) 步.

在实际计算中, 为了充分利用迭代初值中所包含的有用信息, 我们通常是在仿射空间 x(0)+Kmx^{(0)} + \mathcal{K}_m 中寻找“最佳近似解”.

算法7.3.Krylov子空间迭代算法

1: 选取初始向量 x(0)x^{(0)}
2: 计算 r0=bAx(0)r_0 = b - Ax^{(0)} , v1=r0/r02v_{1} = r_{0} / \| r_{0}\|_{2}
3: 寻找“最佳近似解”: x(1)x(0)+K1=x(0)+span{v1}x^{(1)} \in x^{(0)} + \mathcal{K}_1 = x^{(0)} + \operatorname{span}\{v_1\}
4: if x(1)x^{(1)} 满足精度要求 then
5: 终止迭代
6: end if
7: for m=2m = 2 to nn do
8: 调用Arnoldi或Lanczos过程计算向量 vmv_{m}
9: 寻找“最佳近似解”: x(m)x(0)+Km=x(0)+span{v1,,vm}x^{(m)} \in x^{(0)} + \mathcal{K}_m = x^{(0)} + \operatorname{span}\{v_1, \ldots, v_m\}
10: if x(m)x^{(m)} 满足精度要求 then

11: 终止迭代
12: end if
13: end for

子空间的选取和更新问题可以通过Krylov子空间来解决. 下面需要考虑如何寻找方程组在仿射空间 x(0)+Kmx^{(0)} + \mathcal{K}_m 中的“最佳近似”解 x(m)x^{(m)} . 首先, 我们必须给出“最佳”的定义, 即 x(m)x^{(m)} 满足什么条件时才是“最佳”的, 不同的定义会导致不同的算法.

我们很自然地想到用近似解与真解之间的距离来衡量“最佳”,即使得 x(m)xx^{(m)} - x_{*} 在某种意义下最小,如 x(m)x2\| x^{(m)} - x_{*}\|_{2} 达到最小.但是由于 xx_{*} 不知道,因此这种方式往往是不实用.

实用的“最佳”判别方式有:

(1) 使得 rm2=bAx(m)2\| r_{m}\|_{2} = \| b - Ax^{(m)}\|_{2} 最小, 即极小化残量 rm=bAx(m)r_m = b - Ax^{(m)} . 这种方式是可行的, 当 AA 对称时, 相应的算法即为 MINRES 方法, 当 AA 不对称时, 相应的算法即为 GMRES 方法;
(2) 若 AA 对称正定, 我们也可以极小化残量的能量范数 rmA1\| r_{m}\|_{A^{-1}} , 相应的算法即为 CG 方法. 事实上, 我们有

rmA1(rmA1rm)12=((bAx(m))A1(bAx(m)))12=((A1bx(m))TA(A1bx(m)))12=((xx(m))TA(xx(m)))12=xx(m)A.\begin{array}{l} \left\| r _ {m} \right\| _ {A ^ {- 1}} \triangleq \left(r _ {m} ^ {\top} A ^ {- 1} r _ {m}\right) ^ {\frac {1}{2}} = \left(\left(b - A x ^ {(m)}\right) ^ {\top} A ^ {- 1} \left(b - A x ^ {(m)}\right)\right) ^ {\frac {1}{2}} \\ = \left(\left(A ^ {- 1} b - x ^ {(m)}\right) ^ {\mathsf {T}} A \left(A ^ {- 1} b - x ^ {(m)}\right)\right) ^ {\frac {1}{2}} \\ = \left(\left(x _ {*} - x ^ {(m)}\right) ^ {\mathsf {T}} A \left(x _ {*} - x ^ {(m)}\right)\right) ^ {\frac {1}{2}} \\ = \left\| x _ {*} - x ^ {(m)} \right\| _ {A}. \\ \end{array}

因此CG方法也可以看作是极小化能量范数 xx(m)A\| x_{*} - x^{(m)}\|_{A} 的算法