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=0,当且仅当a1=a2=...=an=0时成立,由上式有diTA(a1d1+a2d2+...+andn)=aidiTAdi=0,由于A对称正定,故diTAdi>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=1∑naidi=akdkTAdkak=dkTAdkdkTAxx=i=1∑ndiTAdidiTAxdi(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=1∑ndiTAdidiTAxdi=i=1∑ndiTAdidiTbdi(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
min∣∣Ax−c∣∣2,记
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)=∣∣Ax−c∣∣2=(Ax−c)T(Ax−c)=xTATAx−2cTAx+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}
min21xTQx−bTx(3)
其中
Q
\boldsymbol{Q}
Q对称正定,
f
′
(
x
)
=
Q
x
−
b
f'(\boldsymbol{x})=\boldsymbol{Q}\boldsymbol{x}-\boldsymbol{b}
f′(x)=Qx−b,事实上直接令
f
′
(
x
)
=
0
f'(\boldsymbol{x})=0
f′(x)=0即可得真实解
x
∗
=
Q
−
1
b
\boldsymbol{x^*}=\boldsymbol{Q^{-1}\boldsymbol{b}}
x∗=Q−1b。那么如果使用迭代的方法如何求解呢?给定初始值
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=xi−x∗,称作误差向量ri=b−Qxi,称作残差向量(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...dn−1,这些向量构成了
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=x0−x∗=−α0d0−α1d1−...−αn−1dn−1e1=x1−x∗=x0+α0d0−x∗=−α1d1−...−αn−1dn−1...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+1∑n−1(−α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...dn−1关于
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+1∑n−1(−α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...un−1,通过施密特正交化来构建一组共轭向量
d
0
,
d
1
.
.
.
d
n
−
1
\boldsymbol{d_0},\boldsymbol{d_1}...\boldsymbol{d_{n-1}}
d0,d1...dn−1,首先令
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=0∑i−1β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=0∑i−1β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=0∑i−1βikdkTrj0=uiTrj取ui=ri,即有riTrj=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=riTrj−riTrj+1∴riTQdj=⎩⎪⎪⎪⎨⎪⎪⎪⎧αi1riTri−αi−11riTri0i=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=⎩⎪⎨⎪⎧αi−11di−1TQdi−1riTri0i=j+1i>j+1(14)
由此可见,
β
i
j
\beta_{ij}
βij中,只有一个非零项
β
i
,
i
−
1
\beta_{i,i-1}
βi,i−1,这样只需要存储前一步的搜索方向向量就可以了,进一步将公式
(
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,i−1=di−1Tri−1di−1TQdi−1di−1TQdi−1riTri=di−1Tri−1riTri=ri−1Tri−1riTri(由公式(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} min21xTQx−bTx
初始迭代点: 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=b−Qx0
循环:
α 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