&3.6 共轭方向法
引言
本节之后的方法大多属于共轭方向法。
3.6.1 共轭方向的概念
若两个向量XRn,YRn,满足如下关系:
XTAY0 (3-6-1)
其中,A为nn的对称正定阵,则称X和Y是关于A共轭的,X和Y称之为共轭方向。
T注意:若XY0,则称X与Y正交。实际上,共轭是正交的推广。
211AS1S2111,,例1: 有两个二维向量12,判断S1与S2是否关于A共轭,
是否正交?
解:
TS1AS2121111021,因此,S1与S2关于A共轭。
S1TS211101,因此,S1与S2正交。
3.6.2 共轭向量的概念
如果有m个n维向量S1,S2,S3,...,Sm,满足
TSiASj0TSiASj0(ij),且A正定(ij) (3-6-2)
则称这m个向量是A的共轭向量。如果A维单位阵,则称这m个为正交向量。
3.6.3 共轭向量的几何意义
设目标函数为
1TXAXBTXC2 (3-6-3)
f(X)其中,A为nn阶的对称正定阵。f(X)的梯度为:
F(X)AXB (3-6-4)
设从某点X0出发,沿P0方向进行搜索得到f(X)的极小点X1,则有
F(X1)TP0(AX1B)TP00 (3-6-5)
'X0设从某点出发,仍沿P0方向进行搜索得到f(X)的极小点X2,则有
F(X2)TP0(AX2B)TP00 (3-6-6)
式(3-6-6)减(3-6-5),可得:
(X2X1)TAP00 (3-6-7)
这说明(X2X1)与P0是关于A共轭的。
3.6.4 共轭方向法的原理
TSiASj0TSAS0考虑m个n维向量S1,S2,...,Sm,满足ij(ij),且A正定(ij),则这m个向量一定
是线性无关的。用反证法。
假设S1,S2,...,Sm线性相关,则一定存在一组不全为0的一组数1,2,...,m,满足
1S12S2...mSm0 (3-6-8)
则有
SiTA(1S12S2...mSm)1SiTAS12SiTAS2...mSiTASm0 (3-6-8)
TSi1,2,...,mi其中,。因此有:ASi0,但这与原假设不符。因此,一定可以得出S1,S2,...,Sm线性无关的结论。
注意:在n维空间中的任意向量,均可以用n个线性无关的n维向量表示,也可以说,
n维是由n个线性无关的n维向量张成的(此处还差一步:正交化)。那么,设目标函数f(X)的极小点为X*,初始点为X0,S0,S2,...,Sn1为关于A的n个共轭向量,则有:
X*X00S01S1...n1Sn1 (3-6-9)
将式(3-6-9)写成差分格式:
Xk1XkX2X1XkkSkXk1k1Sk1X11S1X00S0 (3-6-10)
*XXk0,1,...,n1k1k1式中,,表示经过次迭代后,。该式表明,Xk1为目标函数
沿Sk方向的一个极小点,则有:
F(Xk1)TSkF(XkkSk)TSk0 (3-6-11)
即
[A(XkkSk)B]TSkTT(AXkB)TSkkSkASkF(Xk)TSkkSkASk0 (3-6-12)
即可推导出:
F(Xk)TSkkTSkAS (3-6-13)
式(3-6-13)表明,如果能够构造出一系列共轭向量Sk(k1,2,...,n1),则可以求出k,那么经过k步迭代,可以求得Xk1。对于二次函数,kn。
22minf(X)x125x2
例2 求解
解:
首先,构造二次型:
f(x)1TXAXBTXC220x11x1x20X02050x2
2A0即050,B0,C0。
取X02,2,取第0个搜索方向为:
T2024100S0F(X0)(AX0B)0502,则根据式(3-6-13),有:
F(X0)TS00TTS0AS04210004100T4100045010010016500032
2100164X1X00S02500032100
由于S1与S0关于A共轭,则有
TS1AS0TS12004050100
625S11,则 上式与无穷多解,我们任取
F(X1)TS11TTS1AS16252062510501
20625050X11T6250X2X11S1X1110 X2X*
3.6.5 构造共轭方向的一般方法
在n维空间中,已知有n个单位向量:
第i个分量为
ei[0,0,...,1,0,...,0]i1,2,...,n
则n个共轭方向可以这样确定:
S1e1[1,0,0,...,0]TS2e21S1e21e1 (3-6-14)
其中,1为待定系数。
由于,S2和S1关于A共轭,因此ST2AS10,即
(e21S1)TAS1(eT21S1T)AS10 可得
eT12AS1S1TAS1 继续,可以构造
S3e31S12S2 考虑S3TAS20,即
(e31S12S2)TAS20 由于S1TAS20,式(3-6-19)化简为:
(3-6-15)
(3-6-16)
(3-6-17)
(3-6-18)
(e32S2)TAS20 (3-6-19)
即可推出:
Te3AS22TS2AS2 (3-6-20)
TS3同时考虑AS10,即
(e31S12S2)TAS10 (3-6-21)
TS1同理,由于AS20,式(3-6-21)化简为:
(e31S1)TAS10 (3-6-22)
因此有
Te3AS1T1S1AS1 (3-6-23)
特别注意:由于S3不仅与S2关于A共轭,同时也与S1关于A共轭,所以1的表达式和在S2时的表达式(3-6-16)是不同的。由此可以类推,可得:
k1Skek1S12S2k1Sk1ekiSii1TeASikkiSiTASik2,3,...,n (3-6-24)
例题,见Matlab程序
3.6.6 共轭梯度法
共轭梯度法是一种构造共轭方向的方法。任取一个初始点,经过n次迭代,得到n个点,利用这n个点的梯度方向可以构造一组共轭方向。具体做法为:设有一个n维函数f(X),用梯度法经过n1次迭代,即可以得到这n个迭代点X0,X1,X2,Xn1,这些点所对应的函数的梯度为g0,g1,g2gn1。即可以构造一组共轭方向:
S0g0k1SgiSi,kki0TgkASiTi,SiASik1,2,,n1 (3-6-25)
可以证明,按照式(3-6-25)构造的n个方向S0,S1,S2,Sn1是关于A共轭的。然后,即可按下式计算:
Xk1XkkSkTgkSkkSTASkk (3-6-26)
如果f(X)是二次函数,那么经过n次迭代后必然可以收敛到极小点。
如果按这样的算法计算,则一定需要求得函数的海赛矩阵A,在实用性上存在困难,并且加大了计算负担,因此我们需要想法避免在计算过程中出现A。现在我们对以上公式作一些适当的简化。
设有一个二次函数
f(X)1TXAXBTXC2,在进行极小化过程中,迭代公式为:
Xk1XkkSkkSkXk1Xk (3-6-27)
设gk为迭代点Xk的梯度,并且令:
ykgk1gk (3-6-28)
这是前后两相邻迭代点的梯度之差。则有:
ykAXk1BAXkBA(Xk1Xk)AkSkkASk (3-6-29)
对n个共轭方向
S1,S2,,Sn,有:
ST,2,,njASk0(jk)j,k1
故
TTkSTjASkSjkASkSjyk0 (3-6-30)
可见在迭代过程中,前后两次迭代点的梯度之差与其他任一共轭方向是正交的。即
Tyk1Sj0Tyk2Sj0yTS0j1j (3-6-31)
设kj,则:
TTTTTTTTTgkSjgkSjgk1Sjgk1Sjgk2Sjgk2Sjgk2Sjgj1Sjgj1SjTTTTTTT(gkgk1)Sj(gk1gk2)Sj(gj2gj1)Sj(gj1Sj)TTTTyk1Sjyk2Sjyj1Sjgj1Si(3-6-32)
又因为式(3-6-31),故有
TgkSjgTj1Sj (3-6-33)
在此式中,
gj1是迭代点
Xj1处的梯度,而
Xj1是沿
Sj方向搜索新得之点。在梯度法中
我们已经证明了点
Xj1处的梯度方向与求得
Xj1点时的搜索方向是正交的,所以有:
gTj1Sj0 (3-6-34)
则有:
TgkSj0,j1,2,,k1 (3-6-35)
这就是说,某迭代点的梯度方向与此点以前各点的搜索方向均是正交的。
我们再回到构造n个共轭方向的问题上来。
S0g0S1g10S0k1已知式(3-6-25):SkgkjSjj0
那么,对于第r次迭代(其中kr),则有
r1SrgrjSjj0 所以
r1rgrSrjSj0jSjjj0 此处r1。
将上式等号两边同时左乘gTk,得到
gTrkgrTr(gk)jSjj0 又因为j0,1,2,,r,而kr,所以在上面和式中每一项均为零,即rgTkjSj0j0 (3-6-36)
(3-6-37)
(3-6-38)
(3-6-39)
所以
Tgkgr0 (3-6-40)
根据式(3-6-28),已知:
yjgj1gjjASj,所以
1
ASj(gj1gj)j 将式(3-6-41)等号两边同时左乘
gTk,得:
gT1kASj(gTgTkj1gkgj)j gTkgj10j0,1,2,,k2考虑当时,有gTkgj0
所以
gTkASj0 k1j根据式(3-6-25),
SkgkjSjgTkASj0,且
jSTjASj
所以当jk1时,均有:
j0,仅当jk1时,k10。
(3-6-41)
(3-6-42)
(3-6-43)
所以有:
Skgkk1Sk1 (3-6-44)
再对此式作进一步的简化:
Sk1gk1k2Sk2Sk2gk2k3Sk3S1g10S0S0g0 代入上面(3-6-25)式,可得:
Skgk(k1gk1)(k1k2gk2)(k1k2k3gk3)k1k20g0 将式(3-6-46)两边分别左乘
(k1ASk1)T(gkgk1)T得:
(Tk1ASk1)SkgTgTTTkkgk1gkk1gkgk1k1gk1gk1TTk1k2gkgk2k1k2gk1gk2TTk10gkg0k10gk1g0 因为Sk1和Sk是A共轭方向
所以 (Tk1ASk1)TSkk1Sk1ASk0
(3-6-45)
(3-6-46)
(3-6-47)
Tgkgr0,r1,2,,k1由前已知
所以式(3-6-47)右边各项中除两项于是有:
TT(gkgk)和(k1gk-1gk1)不等于零外,其余均等于零,
TTgkgkk1gk1gk10 (3-6-48)
由此即可得到求k1的公式如下:
k1TgkgTkgk1gk1 (3-6-49)
此式中不含海塞矩阵A,因而免去了许多繁琐的计算,而且不用担心A的正定及非奇异问题,对初始点的选择无任何限值了。
从以上分析,我们得出了共轭梯度法的计算步骤及迭代公式如下:
1) 任选初始点X0,则:
X1X00S0XXS0111Xk1XkkSk (3-6-50)
2) 计算:
S0g0SgS1100Skgk1k1Sk1 (3-6-51)
其中,
k1TgkgTk,k1,2,n1gk1gk1。则可构造n个共轭方向S0,S2,Sn1。
3) 对于每个迭代点及每个共轭方向,求k,使f(XkkSk)min。
4)按收敛判断准则判断Xk1是否为极小点,若是,则可以停机,输出结果;若不是,则应继续进行,直到满足精度要求,求出极小值点为止。
对于n维二次函数,只用迭代n次,一定可以收敛到极小值点。若为非二次函数,则在迭代n次,得到Xn点后,不一定就是极小值点。若经过判断不是,就应令X0Xn,k0重新构造n个共轭方向,重复以上迭代过程。