共轭梯度法(Conjugate Gradient Method)

我们要求解线性方程组

Ax=b

其中 A 是对称正定矩阵(spd),给定 Rn 中n个线性无关的向量 r0,r1,,rn1 , 我们想要构造另外的一组基 p0,p1,,pn1 , 并满足
pi,pj=0,ij

其中内积 , 待定,上述性质就是共轭性。
然后将解表示为
x=i=0n1αipi

利用共轭性, 我们有
αi=x,pipi,pi,i=0,1,,n1

根据问题的特性和矩阵的对称正定性, 我们定义内积如下
x,y=xTAy,x,yRn

那么
αi=x,pipi,pi=xTApipTiApi=bTpipTiApi,i=0,1,,n1

我们发现本来需要知道 x 才能确定 αi , 现在自然的克服了这个困难。
在给定 r0,r1,,rn1 的情况下, 我们又该如何求出满足共轭条件的 p0,p1,,pn1 呢?这其实就是线性代数里面的正交化过程(Gram-Schmidt)。
假设已经知道了 p0,p1,,pi1 , 我们记
pi=rik<iβkpk

在上式两端对 pk,k<i , 做内积, 有
βk=pk,ripk,pk=pTkAripTkApkk<i

也就是说
pi=rik<ipTkAripTkApkpk

接下来我们要选择 r0,r1,,rn1 , 这里我们令
ri=bAxi,xi=k<iαkpk,i=0,1,,n1

其中 x0 是任意的,通常取0向量。注意上面其实定义了每一步的残差(residual),我们这样选是很直观的。
现在我们要化简 βk , 因为分子分母都要进行矩阵和向量的乘法,这需要很多计算量。
首先注意到
ri+1=bAxi+1=bA(xi+αipi)=riαiApi

以及
pTkri=pTk(bAxi)=pTkbαkpTkApk=0,k<i

此时我们有
pTkAri=1αk(rkrk+1)Tri

如果 k<i ,
rTkri=(pk+j<iβjpj)Tri=0

所以
pTkAri=0,k<i1,pTi1Ari=1αi1rTiri

同样的道理
pTkApk=pTkA(rkj<kβjpj)=pTkArk=1αkrTkrk

所以
pi=ri+rTirirTi1ri1pi1

还能化简 αi
αi=bTpipTiApi=(ri+Axi)TpipTiApi=rTipipTiApi=rTiripTiApi

最后我们有如下算法:

  1. 初始条件: x0=0,r0=b,p0=r0
  2. 迭代: αi=rTiripTiApi,xi+1=xi+αipi , ri+1=riαiApi,pi+1=pi+rTi+1ri+1rTiripi .

可以发现,最多执行 n 步就能求得解。

你可能感兴趣的:(数学)