共轭梯度法推导

1.共轭向量

 在介绍共轭梯度法前,首先介绍一下共轭向量的概念。对于向量 e 1 \boldsymbol{e_1} e1 e 2 \boldsymbol{e_2} e2,如果两个向量正交,则有 e 1 T e 2 = 0 \boldsymbol{e_1}^\mathrm{T}\boldsymbol{e_2}=0 e1Te2=0,那么对于共轭向量来说,假设有一正定对称矩阵 A \boldsymbol{A} A,如果 e 1 T A e 2 = 0 \boldsymbol{e_1}^\mathrm{T}\boldsymbol{A}\boldsymbol{e_2}=0 e1TAe2=0,则称 e 1 \boldsymbol{e_1} e1 e 2 \boldsymbol{e_2} e2关于矩阵 A \boldsymbol{A} A相互共轭。即 e 2 \boldsymbol{e_2} e2经过线性变换 A \boldsymbol{A} A后与 e 1 \boldsymbol{e_1} e1正交,通常所指的正交可认为是 A = I \boldsymbol{A}=\boldsymbol{I} A=I的特殊情况。

 那么对于非零向量组 d 1 , d 2 . . . d n \boldsymbol{d_1},\boldsymbol{d_2}...\boldsymbol{d_n} d1,d2...dn,若有 d i T A d j = 0 ( i ≠ j ) \boldsymbol{d_i}^\mathrm{T}\boldsymbol{A}\boldsymbol{d_j}=0(i\neq j) diTAdj=0(i=j),则称该向量组关于矩阵 A n × n \boldsymbol{A_{n×n}} An×n相互共轭,且 d 1 , d 2 . . . d n \boldsymbol{d_1},\boldsymbol{d_2}...\boldsymbol{d_n} d1,d2...dn线性无关,证明如下:
要 证 明 线 性 无 关 , 即 对 于 a 1 d 1 + a 2 d 2 + . . . + a n d n = 0 , 当 且 仅 当 a 1 = a 2 = . . . = a n = 0 时 成 立 , 由 上 式 有 d i T A ( a 1 d 1 + a 2 d 2 + . . . + a n d n ) = a i d i T A d i = 0 , 由 于 A 对 称 正 定 , 故 d i T A d i > 0 , 因 此 a i = 0. 要证明线性无关,即对于\\a_1\boldsymbol{d_1}+a_2\boldsymbol{d_2}+...+a_n\boldsymbol{d_n}=0,当且仅当a_1=a_2=...=a_n=0时成立,\\ 由上式有\boldsymbol{d_i}^\mathrm{T}\boldsymbol{A}(a_1\boldsymbol{d_1}+a_2\boldsymbol{d_2}+...+a_n\boldsymbol{d_n})=a_i\boldsymbol{d_i}^\mathrm{T}\boldsymbol{A}\boldsymbol{d_i}=0,\\ 由于\boldsymbol{A}对称正定,故\boldsymbol{d_i}^\mathrm{T}\boldsymbol{A}\boldsymbol{d_i}>0,因此a_i=0. 线a1d1+a2d2+...+andn=0a1=a2=...=an=0,diTA(a1d1+a2d2+...+andn)=aidiTAdi=0,AdiTAdi>0,ai=0.

 由于该向量组线性无关,故该向量组可以构成 n n n维空间的一组基。空间中任一向量 x = ∑ i = 1 n a i d i \boldsymbol{x}=\sum_{i=1}^n {a_i\boldsymbol{d_i}} x=i=1naidi,可以证明 a i = d i T A x d i T A d i a_i=\displaystyle\frac{\boldsymbol{d_i}^\mathrm{T}A\boldsymbol{x}}{\boldsymbol{d_i}^\mathrm{T}A\boldsymbol{d_i}} ai=diTAdidiTAx,证明如下:
d k T A x = d k T A ∑ i = 1 n a i d i = a k d k T A d k a k = d k T A x d k T A d k x = ∑ i = 1 n d i T A x d i T A d i d i (1) \boldsymbol{d_k}^\mathrm{T}\boldsymbol{A}\boldsymbol{x}=\boldsymbol{d_k}^\mathrm{T}\boldsymbol{A}\sum_{i=1}^n {a_i\boldsymbol{d_i}}=a_k\boldsymbol{d_k}^\mathrm{T}\boldsymbol{A}\boldsymbol{d_k}\\ a_k=\displaystyle\frac{\boldsymbol{d_k}^\mathrm{T}A\boldsymbol{x}}{\boldsymbol{d_k}^\mathrm{T}A\boldsymbol{d_k}} \\\boldsymbol{x}=\sum_{i=1}^n {\displaystyle\frac{\boldsymbol{d_i}^\mathrm{T}A\boldsymbol{x}}{\boldsymbol{d_i}^\mathrm{T}A\boldsymbol{d_i}}\boldsymbol{d_i}}\tag{1} dkTAx=dkTAi=1naidi=akdkTAdkak=dkTAdkdkTAxx=i=1ndiTAdidiTAxdi(1)
 为了对共轭向量的作用有一个认识,这里举一个例子。例如对于线性方程组 A x = b A \boldsymbol{x}=\boldsymbol{b} Ax=b,其中 A A A对称正定,如果已知 A A A的一个共轭向量组 d 1 , d 2 . . . d n \boldsymbol{d_1},\boldsymbol{d_2}...\boldsymbol{d_n} d1,d2...dn,那么:
x = ∑ i = 1 n d i T A x d i T A d i d i = ∑ i = 1 n d i T b d i T A d i d i (2) \boldsymbol{x}=\sum_{i=1}^n {\displaystyle\frac{\boldsymbol{d_i}^\mathrm{T}A\boldsymbol{x}}{\boldsymbol{d_i}^\mathrm{T}A\boldsymbol{d_i}}\boldsymbol{d_i}}=\sum_{i=1}^n {\displaystyle\frac{\boldsymbol{d_i}^\mathrm{T}\boldsymbol{b}}{\boldsymbol{d_i}^\mathrm{T}A\boldsymbol{d_i}}\boldsymbol{d_i}}\tag{2} x=i=1ndiTAdidiTAxdi=i=1ndiTAdidiTbdi(2)
这样,就不需要对系数矩阵 A A A求逆就可得结果。

2.共轭梯度法

 对于更一般的线性方程组 A x = c \boldsymbol{A}\boldsymbol{x}=\boldsymbol{c} Ax=c,其中 A \boldsymbol{A} A可逆,要求 x \boldsymbol{x} x,可以将其转化为一个最优化问题: min ⁡ ∣ ∣ A x − c ∣ ∣ 2 \min||\boldsymbol{A}\boldsymbol{x}-\boldsymbol{c}||^2 minAxc2,记 f ( x ) = ∣ ∣ A x − c ∣ ∣ 2 = ( A x − c ) T ( A x − c ) = x T A T A x − 2 c T A x + c T c f(\boldsymbol{x})=||\boldsymbol{A}\boldsymbol{x}-\boldsymbol{c}||^2=(\boldsymbol{A}\boldsymbol{x}-\boldsymbol{c})^\mathrm{T}(\boldsymbol{A}\boldsymbol{x}-\boldsymbol{c})=\boldsymbol{x}^\mathrm{T}\boldsymbol{A}^\mathrm{T}\boldsymbol{A}\boldsymbol{x}-2\boldsymbol{c}^\mathrm{T}\boldsymbol{A}\boldsymbol{x}+\boldsymbol{c}^\mathrm{T}\boldsymbol{c} f(x)=Axc2=(Axc)T(Axc)=xTATAx2cTAx+cTc,令 Q = A T A \boldsymbol{Q}=\boldsymbol{A}^\mathrm{T}\boldsymbol{A} Q=ATA b T = c T A \boldsymbol{b}^\mathrm{T}=\boldsymbol{c}^\mathrm{T}\boldsymbol{A} bT=cTA,则问题等效于求
min ⁡ 1 2 x T Q x − b T x (3) \min\displaystyle\frac{1}{2}\boldsymbol{x}^\mathrm{T}\boldsymbol{Q}\boldsymbol{x}-\boldsymbol{b}^\mathrm{T}\boldsymbol{x}\tag{3} min21xTQxbTx(3)
其中 Q \boldsymbol{Q} Q对称正定, f ′ ( x ) = Q x − b f'(\boldsymbol{x})=\boldsymbol{Q}\boldsymbol{x}-\boldsymbol{b} f(x)=Qxb,事实上直接令 f ′ ( x ) = 0 f'(\boldsymbol{x})=0 f(x)=0即可得真实解 x ∗ = Q − 1 b \boldsymbol{x^*}=\boldsymbol{Q^{-1}\boldsymbol{b}} x=Q1b。那么如果使用迭代的方法如何求解呢?给定初始值 x 0 \boldsymbol{x_0} x0,下面定义两个变量:
e i = x i − x ∗ , 称 作 误 差 向 量 r i = b − Q x i , 称 作 残 差 向 量 (4) \boldsymbol{e_i}=\boldsymbol{x_i}-\boldsymbol{x^*},称作误差向量\\ \boldsymbol{r_i}=\boldsymbol{b}-\boldsymbol{Q}\boldsymbol{x_i},称作残差向量\tag{4} ei=xix,ri=bQxi,(4)
由以上定义,易得下面两个推论:
r i = − Q e i r i = − f ′ ( x ) (5) \boldsymbol{r_i}=-\boldsymbol{Q}\boldsymbol{e_i}\\ \boldsymbol{r_i}=-f'(\boldsymbol{x})\tag{5} ri=Qeiri=f(x)(5)
假设我们有一个正交向量组 d 0 , d 1 . . . d n − 1 \boldsymbol{d_0},\boldsymbol{d_1}...\boldsymbol{d_{n-1}} d0,d1...dn1,这些向量构成了 n n n维空间的一组基,那么初始误差 e 0 \boldsymbol{e_0} e0可以写作(系数前添加符号是为了使 d i \boldsymbol{d_i} di与搜索方向一致):
e 0 = x 0 − x ∗ = − α 0 d 0 − α 1 d 1 − . . . − α n − 1 d n − 1 e 1 = x 1 − x ∗ = x 0 + α 0 d 0 − x ∗ = − α 1 d 1 − . . . − α n − 1 d n − 1 . . . e n = 0 (6) \boldsymbol{e_0}=\boldsymbol{x_0}-\boldsymbol{x^*}=-\alpha_0\boldsymbol{d_0}-\alpha_1\boldsymbol{d_1}-...-\alpha_{n-1}\boldsymbol{d_{n-1}}\tag{6}\\ \boldsymbol{e_1}=\boldsymbol{x_1}-\boldsymbol{x^*}=\boldsymbol{x_0}+\alpha_0\boldsymbol{d_0}-\boldsymbol{x^*}=-\alpha_1\boldsymbol{d_1}-...-\alpha_{n-1}\boldsymbol{d_{n-1}}\\ ...\\ \boldsymbol{e_{n}}=0 e0=x0x=α0d0α1d1...αn1dn1e1=x1x=x0+α0d0x=α1d1...αn1dn1...en=0(6)
共轭梯度法的思想就是在每一步的迭代中,消除某一方向上的误差,这样通过 n n n步迭代即可求得结果。下面求每一项系数,由上式有:
e i + 1 = e i + α i d i d i T e i + 1 = d i T ( ∑ j = i + 1 n − 1 ( − α j ) d j ) = 0 d i T e i + 1 = d i T e i + α i d i T d i = 0 α i = − d i T e i d i T d i (7) \boldsymbol{e_{i+1}}=\boldsymbol{e_{i}}+\alpha_{i}\boldsymbol{d_{i}}\\ \boldsymbol{d_{i}}^\mathrm{T}\boldsymbol{e_{i+1}}=\boldsymbol{d_{i}}^\mathrm{T}(\sum_{j=i+1}^{n-1} (-\alpha_{j})\boldsymbol{d_{j}})=0\\ \boldsymbol{d_{i}}^\mathrm{T}\boldsymbol{e_{i+1}}=\boldsymbol{d_{i}}^\mathrm{T}\boldsymbol{e_{i}}+\alpha_{i}\boldsymbol{d_{i}}^\mathrm{T}\boldsymbol{d_{i}}=0\\ \alpha_{i}=-\displaystyle\frac{\boldsymbol{d_{i}}^\mathrm{T}\boldsymbol{e_{i}}}{\boldsymbol{d_{i}}^\mathrm{T}\boldsymbol{d_{i}}}\tag{7} ei+1=ei+αididiTei+1=diT(j=i+1n1(αj)dj)=0diTei+1=diTei+αidiTdi=0αi=diTdidiTei(7)
以此步长进行迭代,即可保证第 i i i次迭代后的误差向量 e i + 1 \boldsymbol{e_{i+1}} ei+1与第 i i i次迭代时的搜索方向向量 d i \boldsymbol{d_{i}} di是正交的,这样也避免了后续迭代过程中再次往 d i \boldsymbol{d_{i}} di方向搜索。由公式 ( 4 ) (4) (4)的定义知,迭代过程中 e i \boldsymbol{e_{i}} ei是无法直接计算的,因此我们不能通过这个公式直接得到 α i \alpha_{i} αi的取值。但是如果引入共轭向量的概念,即向量组 d 0 , d 1 . . . d n − 1 \boldsymbol{d_0},\boldsymbol{d_1}...\boldsymbol{d_{n-1}} d0,d1...dn1关于 Q \boldsymbol{Q} Q是共轭的,那么有:
d i T Q d j = 0 ( i ≠ j ) d i T Q e i + 1 = d i T Q ( ∑ j = i + 1 n − 1 ( − α j ) d j ) = 0 d i T Q e i + 1 = d i T Q e i + α i d i T Q d i = 0 α i = − d i T Q e i d i T Q d i = d i T r i d i T Q d i (7) \boldsymbol{d_i}^\mathrm{T}\boldsymbol{Q}\boldsymbol{d_j}=0(i\neq j) \\\boldsymbol{d_{i}}^\mathrm{T}\boldsymbol{Q}\boldsymbol{e_{i+1}}=\boldsymbol{d_{i}}^\mathrm{T}\boldsymbol{Q}(\sum_{j=i+1}^{n-1} (-\alpha_{j})\boldsymbol{d_{j}})=0\\ \boldsymbol{d_{i}}^\mathrm{T}\boldsymbol{Q}\boldsymbol{e_{i+1}}=\boldsymbol{d_{i}}^\mathrm{T}\boldsymbol{Q}\boldsymbol{e_{i}}+\alpha_{i}\boldsymbol{d_{i}}^\mathrm{T}\boldsymbol{Q}\boldsymbol{d_{i}}=0\\ \alpha_{i}=-\displaystyle\frac{\boldsymbol{d_{i}}^\mathrm{T}\boldsymbol{Q}\boldsymbol{e_{i}}}{\boldsymbol{d_{i}}^\mathrm{T}\boldsymbol{Q}\boldsymbol{d_{i}}}=\displaystyle\frac{\boldsymbol{d_{i}}^\mathrm{T}\boldsymbol{r_{i}}}{\boldsymbol{d_{i}}^\mathrm{T}\boldsymbol{Q}\boldsymbol{d_{i}}}\tag{7} diTQdj=0(i=j)diTQei+1=diTQ(j=i+1n1(αj)dj)=0diTQei+1=diTQei+αidiTQdi=0αi=diTQdidiTQei=diTQdidiTri(7)
上式最后一步用到了公式 ( 5 ) (5) (5),由公式 ( 4 ) (4) (4)的定义知,迭代过程中 r i \boldsymbol{r_{i}} ri是可以求得的,这样就求得了每一方向上的步长。

 接下来,问题就变为如何在迭代过程中构造关于 Q \boldsymbol{Q} Q的共轭向量组。存在一种简单方法,我们称之为施密特正交化。

 假设我们有一组 n n n个线性无关的向量 u 0 , u 1 . . . u n − 1 \boldsymbol{u_0},\boldsymbol{u_1}...\boldsymbol{u_{n-1}} u0,u1...un1,通过施密特正交化来构建一组共轭向量 d 0 , d 1 . . . d n − 1 \boldsymbol{d_0},\boldsymbol{d_1}...\boldsymbol{d_{n-1}} d0,d1...dn1,首先令 d 0 = u 0 \boldsymbol{d_0}=\boldsymbol{u_0} d0=u0,那么对于 d 1 \boldsymbol{d_1} d1我们通过将 u 1 \boldsymbol{u_1} u1减掉该向量中关于 d 0 \boldsymbol{d_0} d0不构成共轭的那部分,即保留该向量中与 d 0 \boldsymbol{d_0} d0共轭的那部分分量,即得到 d 1 \boldsymbol{d_1} d1,后续构建的向量依次类推,公式如下:
d i = u i + ∑ k = 0 i − 1 β i k d k (8) \boldsymbol{d_i}=\boldsymbol{u_i}+\sum_{k=0}^{i-1}\beta_{ik} \boldsymbol{d_k}\tag{8} di=ui+k=0i1βikdk(8)
为了求解 β i k \beta_{ik} βik,我们将等式两侧同时左乘 d j T Q \boldsymbol{d_j}^\mathrm{T}\boldsymbol{Q} djTQ,有:
d j T Q d i = d j T Q u i + d j T Q ∑ k = 0 i − 1 β i k d k = d j T Q u i + d j T Q β i j d j = 0 , ( i > j ) ∴ β i j = − d j T Q u i d j T Q d j (9) \boldsymbol{d_j}^\mathrm{T}\boldsymbol{Q}\boldsymbol{d_i}=\boldsymbol{d_j}^\mathrm{T}\boldsymbol{Q}\boldsymbol{u_i}+\boldsymbol{d_j}^\mathrm{T}\boldsymbol{Q}\sum_{k=0}^{i-1}\beta_{ik} \boldsymbol{d_k}\\ =\boldsymbol{d_j}^\mathrm{T}\boldsymbol{Q}\boldsymbol{u_i}+\boldsymbol{d_j}^\mathrm{T}\boldsymbol{Q}\beta_{ij} \boldsymbol{d_j}=0,(i>j)\\ \therefore \beta_{ij}=-\displaystyle\frac{\boldsymbol{d_j}^\mathrm{T}\boldsymbol{Q}\boldsymbol{u_i}}{\boldsymbol{d_j}^\mathrm{T}\boldsymbol{Q}\boldsymbol{d_j}}\tag{9} djTQdi=djTQui+djTQk=0i1βikdk=djTQui+djTQβijdj=0,(i>j)βij=djTQdjdjTQui(9)
由公式可知,每构造一个新的共轭向量,我们需要保存之前已构造的共轭向量,进而计算 β i k \beta_{ik} βik,操作复杂度高。

 有没有办法解决这个问题呢?在迭代过程中,我们利用残差向量来构造共轭向量,即 u i = r i \boldsymbol{u_i}=\boldsymbol{r_i} ui=ri,这是因为残差向量有一个非常好的性质,即:
r i T r j = 0 , i ≠ j (10) \boldsymbol{r_{i}}^\mathrm{T}\boldsymbol{r_{j}}=0,i \neq j\tag{10} riTrj=0,i=j(10)
即当前残差向量与之前所有的残差向量均正交,所以只要残差向量不为 0 0 0,一定会产生新的方向的分量,即是线性无关的一组向量,这是因为如前所述 e j \boldsymbol{e_{j}} ej中已经不包含由 d i \boldsymbol{d_i} di方向分量,故有 d i T r j = d i T Q e j = 0 \boldsymbol{d_i^\mathrm{T}}\boldsymbol{r_{j}}=\boldsymbol{d_i^\mathrm{T}}\boldsymbol{Q}\boldsymbol{e_{j}}=0 diTrj=diTQej=0,由式 ( 8 ) (8) (8)有:
d i T r j = u i T r j + ∑ k = 0 i − 1 β i k d k T r j 0 = u i T r j 取 u i = r i , 即 有 r i T r j = 0 , i ≠ j (11) \boldsymbol{d_i^\mathrm{T}}\boldsymbol{r_{j}}=\boldsymbol{u_i^\mathrm{T}}\boldsymbol{r_{j}}+\sum_{k=0}^{i-1}\beta_{ik} \boldsymbol{d_k^\mathrm{T}}\boldsymbol{r_{j}}\\ 0=\boldsymbol{u_i^\mathrm{T}}\boldsymbol{r_{j}}\\ 取\boldsymbol{u_i}=\boldsymbol{r_i},即有\boldsymbol{r_{i}}^\mathrm{T}\boldsymbol{r_{j}}=0,i \neq j\tag{11} diTrj=uiTrj+k=0i1βikdkTrj0=uiTrjui=ririTrj=0,i=j(11)
β i j = − d j T Q r i d j T Q d j \beta_{ij}=-\displaystyle\frac{\boldsymbol{d_j}^\mathrm{T}\boldsymbol{Q}\boldsymbol{r_i}}{\boldsymbol{d_j}^\mathrm{T}\boldsymbol{Q}\boldsymbol{d_j}} βij=djTQdjdjTQri,残差向量 r i \boldsymbol{r_i} ri满足下面的迭代公式:
r i + 1 = − Q e i + 1 = − Q ( e i + α i d i ) = r i − α i Q d i (12) \boldsymbol{r_{i+1}}=-\boldsymbol{Q}\boldsymbol{e_{i+1}}\\ =-\boldsymbol{Q}(\boldsymbol{e_{i}+\alpha_{i}\boldsymbol{d_{i}}}) \\=\boldsymbol{r_{i}}-\alpha_{i}\boldsymbol{Q}\boldsymbol{d_{i}}\tag{12} ri+1=Qei+1=Q(ei+αidi)=riαiQdi(12)

由上式可得:
r i T r j + 1 = r i T r j − α j r i T Q d j ∴ α j r i T Q d j = r i T r j − r i T r j + 1 ∴ r i T Q d j = { 1 α i r i T r i i = j − 1 α i − 1 r i T r i i = j + 1 0 e l s e (13) \boldsymbol{r_{i}^\mathrm{T}}\boldsymbol{r_{j+1}}=\boldsymbol{r_{i}^\mathrm{T}}\boldsymbol{r_{j}}-\alpha_{j}\boldsymbol{r_{i}^\mathrm{T}}\boldsymbol{Q}\boldsymbol{d_{j}}\\ \therefore \alpha_{j}\boldsymbol{r_{i}^\mathrm{T}}\boldsymbol{Q}\boldsymbol{d_{j}}=\boldsymbol{r_{i}^\mathrm{T}}\boldsymbol{r_{j}}-\boldsymbol{r_{i}^\mathrm{T}}\boldsymbol{r_{j+1}}\\ \therefore \boldsymbol{r_{i}^\mathrm{T}}\boldsymbol{Q}\boldsymbol{d_{j}}= \begin{cases}\displaystyle\frac{1}{\alpha_{i}}\boldsymbol{r_{i}^\mathrm{T}}\boldsymbol{r_{i}}&i=j\\ -\displaystyle\frac{1}{\alpha_{i-1}}\boldsymbol{r_{i}^\mathrm{T}}\boldsymbol{r_{i}}&i=j+1\\ 0&else \end{cases}\tag{13} riTrj+1=riTrjαjriTQdjαjriTQdj=riTrjriTrj+1riTQdj=αi1riTriαi11riTri0i=ji=j+1else(13)

将上式带入公式 ( 9 ) (9) (9)
β i j = − d j T Q u i d j T Q d j = − d j T Q r i d j T Q d j = − r i T Q d j d j T Q d j = { 1 α i − 1 r i T r i d i − 1 T Q d i − 1 i = j + 1 0 i > j + 1 (14) \tag{14}\beta_{ij}=-\displaystyle\frac{\boldsymbol{d_j}^\mathrm{T}\boldsymbol{Q}\boldsymbol{u_i}}{\boldsymbol{d_j}^\mathrm{T}\boldsymbol{Q}\boldsymbol{d_j}}=-\displaystyle\frac{\boldsymbol{d_j}^\mathrm{T}\boldsymbol{Q}\boldsymbol{r_i}}{\boldsymbol{d_j}^\mathrm{T}\boldsymbol{Q}\boldsymbol{d_j}}= -\displaystyle\frac{\boldsymbol{r_i}^\mathrm{T}\boldsymbol{Q}\boldsymbol{d_j}}{\boldsymbol{d_j}^\mathrm{T}\boldsymbol{Q}\boldsymbol{d_j}} =\begin{cases} \displaystyle\frac{1}{\alpha_{i-1}}\displaystyle\frac{\boldsymbol{r_{i}^\mathrm{T}}\boldsymbol{r_{i}}}{\boldsymbol{d_{i-1}}^\mathrm{T}\boldsymbol{Q}\boldsymbol{d_{i-1}}}&i=j+1\\ 0&i>j+1 \end{cases} βij=djTQdjdjTQui=djTQdjdjTQri=djTQdjriTQdj=αi11di1TQdi1riTri0i=j+1i>j+1(14)

由此可见, β i j \beta_{ij} βij中,只有一个非零项 β i , i − 1 \beta_{i,i-1} βi,i1,这样只需要存储前一步的搜索方向向量就可以了,进一步将公式 ( 7 ) (7) (7)带入上式,有:
β i , i − 1 = d i − 1 T Q d i − 1 d i − 1 T r i − 1 r i T r i d i − 1 T Q d i − 1 = r i T r i d i − 1 T r i − 1 = r i T r i r i − 1 T r i − 1 ( 由 公 式 ( 11 ) 可 得 ) \beta_{i,i-1}=\displaystyle\frac{\boldsymbol{d_{i-1}}^\mathrm{T}\boldsymbol{Q}\boldsymbol{d_{i-1}}}{\boldsymbol{d_{i-1}}^\mathrm{T}\boldsymbol{r_{i-1}}}\displaystyle\frac{\boldsymbol{r_{i}^\mathrm{T}}\boldsymbol{r_{i}}}{\boldsymbol{d_{i-1}}^\mathrm{T}\boldsymbol{Q}\boldsymbol{d_{i-1}}}\\ =\displaystyle\frac{\boldsymbol{r_{i}^\mathrm{T}}\boldsymbol{r_{i}}}{\boldsymbol{d_{i-1}}^\mathrm{T}\boldsymbol{r_{i-1}}}=\displaystyle\frac{\boldsymbol{r_{i}^\mathrm{T}}\boldsymbol{r_{i}}}{\boldsymbol{r_{i-1}}^\mathrm{T}\boldsymbol{r_{i-1}}}(由公式(11)可得) βi,i1=di1Tri1di1TQdi1di1TQdi1riTri=di1Tri1riTri=ri1Tri1riTri((11))

3.总结

 至此,步长,迭代方向均已求出,共轭梯度法总结如下:

目标: min ⁡ 1 2 x T Q x − b T x \min\displaystyle\frac{1}{2}\boldsymbol{x}^\mathrm{T}\boldsymbol{Q}\boldsymbol{x}-\boldsymbol{b}^\mathrm{T}\boldsymbol{x} min21xTQxbTx

初始迭代点: x 0 \boldsymbol{x_0} x0

初始迭代方向: d 0 = r 0 = b − Q x 0 \boldsymbol{d_0}=\boldsymbol{r_0}=\boldsymbol{b}-\boldsymbol{Q}\boldsymbol{x_0} d0=r0=bQx0

循环:

α i = r i T r i d i T Q d i \alpha_i=\displaystyle\frac{\boldsymbol{r_{i}}^\mathrm{T}\boldsymbol{r_{i}}}{\boldsymbol{d_{i}}^\mathrm{T}\boldsymbol{Q}\boldsymbol{d_{i}}} αi=diTQdiriTri

x i + 1 = x i + α i d i \boldsymbol{x_{i+1}}=\boldsymbol{x_{i}}+\alpha_i\boldsymbol{d_{i}} xi+1=xi+αidi

r i + 1 = r i − α i Q d i \boldsymbol{r_{i+1}}=\boldsymbol{r_{i}}-\alpha_i\boldsymbol{Q}\boldsymbol{d_{i}} ri+1=riαiQdi

β i + 1 = r i + 1 T r i + 1 r i T r i \beta_{i+1}=\displaystyle\frac{\boldsymbol{r_{i+1}^\mathrm{T}}\boldsymbol{r_{i+1}}}{\boldsymbol{r_{i}}^\mathrm{T}\boldsymbol{r_{i}}} βi+1=riTriri+1Tri+1

d i + 1 = r i + 1 + β i + 1 d i \boldsymbol{d_{i+1}}=\boldsymbol{r_{i+1}}+\beta_{i+1}\boldsymbol{d_{i}} di+1=ri+1+βi+1di

参考:https://flat2010.github.io/2018/10/26/%E5%85%B1%E8%BD%AD%E6%A2%AF%E5%BA%A6%E6%B3%95%E9%80%9A%E4%BF%97%E8%AE%B2%E4%B9%89/#8-%E5%85%B1%E8%BD%AD%E6%A2%AF%E5%BA%A6%E6%B3%95

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值