基本概念
范数
其用于衡量向量和矩阵的大小。
常见的向量范数定义如下:
∥x∥1∥x∥2∥x∥∞∥x∥p=∣x1∣+∣x2∣+⋯+∣xn∣=∣x1∣2+∣x2∣2+⋯+∣xn∣2=1≤i≤nmax∣xi∣=(i=1∑n∣xi∣p)p1
矩阵范数的定义:对任意n阶方阵A,若对应一个非负实数∥A∥,满足:
- ∥A∥≥0,当且仅当A=0时等号成立;
- 对任意实数α,∥αA∥=∣α∣⋅∥A∥;
- 对任意两个n阶方阵A和B,∥A+B∥≤∥A∥+∥B∥;
- 对任意两个n阶方阵A和B,∥AB∥≤∥A∥⋅∥B∥。
与向量范数的定义比较,前三个性质只是向量范数的推广,第四个性质则是矩阵乘法的要求(矩阵范数的相容条件)。
为了介绍常见的矩阵范数,这里需要引入谱半径的定义:设A是n阶矩阵,则称ρ(A)=max1≤i≤n∣λi∣为A的谱半径,这里的λi为A的特征值。
谱半径=矩阵按模的最大特征值。
根据矩阵范数的定义,可以定义出矩阵的算子范数:
∥A∥p=x∈Rnmax∥x∥p∥Ax∥p(1)
该范数由向量范数导出,也称为导出范数或诱导范数,以下是一些常见的矩阵范数:
∥A∥1∥A∥2∥A∥∞=1≤j≤nmaxi=1∑n∣aij∣(沿着行方向累加后的最大值)=ρ(ATA)(谱范数)=1≤i≤nmaxj=1∑n∣aij∣(沿着列方向累加后的最大值)
单位阵的任何一种算子范数均为1。
矩阵的F范数是向量2范数的直接推广(不属于算子范数):
∥A∥F=i=1∑nj∑n∣aij∣2(所有元素平方和的根)
以上这些范数都满足矩阵范数的定义要求。
由式(1)可引出相容的概念:若∥Ax∥α≤∥A∥β⋅∥x∥α,则称矩阵范数和向量范数是相容的。
可以看出,矩阵的算子范数与相应的向量范数是相容的。
条件数
在实际问题中,对于线性方程组Ax=b,数据A和b总会存在误差δA和δb,其会对所要求解的x产生一个扰动δx。
一方面,若仅在方程组右端的b有扰动δb,即
A(x+δx)=b+δb
于是有
δx⟹∥δx∥⟹∥δx∥∵∥b∥∴∥δx∥⋅∥b∥⟹∥x∥∥δx∥=A−1δb=∥A−1δb∥≤∥A−1∥⋅∥δb∥≤∥A∥⋅∥x∥≤∥A−1∥⋅∥δb∥⋅∥A∥⋅∥x∥≤∥A∥∥A−1∥∥b∥∥δb∥(2)
另一方面,若仅在方程组左端的A有扰动δA,即
(A+δA)(x+δx)=b
于是有
Aδx⟹Aδx⟹δx⟹∥δx∥⟹∥x+δx∥∥δx∥+δAx+δAδx=0=−δA(x+δx)=−A−1δA(x+δx)≤∥A−1∥⋅∥δA∥⋅∥x+δx∥≤∥A∥∥A−1∥∥A∥∥δA∥(3)
观察式(2)和(3),可以看到,无论是左端A还是右端b有扰动,解x的相对误差除了受相应扰动的相对误差(∥A∥∥δA∥和∥b∥∥δb∥)影响外,还与∥A∥∥A−1∥有关,其起到了放大倍数的作用。
于是,引入了条件数的概念:设A为n阶非奇异矩阵,称数cond(A)=∥A∥∥A−1∥为线性方程组Ax=b的条件数,或称为矩阵A的条件数。
条件数的大小与所选取的范数有关;
单位阵的条件数为1:cond(I)=1;
若A对称正定,则cond2(A)=λn(A)λ1(A),λ1(A)和λn(A)分别为最大、最小特征值。
对于一个确定的方程组,若系数矩阵的条件数相对的小,则称该方程组是良态的;若条件数相对的大,则称该方程组是病态的,其系数矩阵为病态矩阵。
基本迭代法
给定一个线性方程组
Ax=b(4)
其中,A∈Rn×n和b∈Rn已知。
假定A有分裂A=M−N,其中M是非奇异矩阵。那么上述线性方程组可以改写为:
Mx=Nx+b
或者
x=M−1Nx+M−1b⟹x=Bx+g
从而可以建立如下迭代公式:
Mx(k+1)=Nx(k)+b(5)
或者写成:
x(k+1)=Bx(k)+g(6)
其中,B=M−1N称为迭代矩阵。
基本迭代法:给定一个初值x(0),按照式(6)进行迭代,可得到一个向量序列{x(k)}。若x(k)收敛于确定的向量x∗,则x∗=Bx∗+g⟹Ax∗=b,即x∗为该线性方程组的解。
但这样每次迭代需要计算一个系数矩阵为M的线性方程组,因此,当M具有某些特殊性质时,系数矩阵为M的线性方程组将易于求解(即M要构造得好)。
例如,M是对角矩阵或上三角矩阵等矩阵。
令A=D−L−U,其中D为对角矩阵,L为严格下三角矩阵,U为严格上三角矩阵:
D=diag(a11,a22,⋯,ann), L=−⎣⎢⎢⎢⎡0a21⋮an100⋮⋯⋯⋯⋱an,n−100⋮0⎦⎥⎥⎥⎤, U=−⎣⎢⎢⎢⎡0⋮00a12⋮00⋯⋱⋯0a1n⋮an−1,n0⎦⎥⎥⎥⎤
根据不同的构造形式,对以下三种基本迭代方法(Jacobi迭代法、Gauss-Seidel迭代法、SOR迭代法)进行分析。
Jacobi迭代法
在式(5)中,取M=D和N=L+U,则得到雅可比(Jacobi)迭代法,其迭代格式为:
Dx(k+1)=(L+U)x(k)+b(Jacobi迭代格式)
此时,迭代矩阵为:
BJacobi=D−1(L+U)=D−1(D−A)=I−D−1A
Jacobi迭代法算法:
-
给定初值x(0);
-
对k=0,1,2,⋯,计算:
-
xi(k+1)=aii1(bi−∑j=1,i=jnaijxi(k));
这里写成了每个元素求解的形式,也可直接写成向量求解的形式x(k+1)=D−1(L+U)x(k)+D−1b。
-
若近似解达到收敛条件,则结束;否则,继续2~3步的计算。
Gauss-Seidel迭代法
若Jacobi迭代法是收敛的,那么在Jacobi迭代法算法的第3步中,将计算出来的x(k+1)的分量(xi(k+1))直接投入到下一个迭代方程中使用,可能会得到更好的效果。
即,将原来的∑j=1,i=jnaijxi(k)分成了两部分叠加:∑j=1i−1aijxi(k+1)+∑j=i+1naijxi(k)=lr,ix(k+1)+ur,ix(k),其中,lr,i和ur,i分别表示L和U的第i行向量。
这样建立起来的迭代格式即为高斯-赛德尔(Gauss-Seidel)迭代法(GS迭代),其迭代格式为:
Dx(k+1)=Lx(k+1)+Ux(k)+b(GS迭代格式1)
或者把x(k+1)全部移到左侧:
(D−L)x(k+1)=Ux(k)+b(GS迭代格式2)
此时,迭代矩阵为:
BGS=(D−L)−1U=(D−L)−1(D−L−A)=I−(D−L)−1A
GS迭代算法:
-
给定初值x(0);
-
对k=0,1,2,⋯,计算:
-
xi(k+1)=aii1(bi−∑j=1i−1aijxi(k+1)−∑j=i+1naijxi(k));
右侧括号中的第二项累加下标是j=i+1;
这里写成了每个元素求解的形式,也可直接写成向量求解的形式x(k+1)=(D−L)−1Ux(k)+(D−L)−1b。
-
若近似解达到收敛条件,则结束;否则,继续2~3步的计算。
SOR迭代法
对GS迭代格式1进行改写得到:
x(k+1)=D−1(Lx(k+1)+Ux(k)+b)=x(k)+D−1(Lx(k+1)+Ux(k)−Dx(k)+b)
这时,可以将等式右侧的第二项看作是修正量,为了获得更快的收敛效果,可以在该修正量前乘上一个参数ω,即得到逐次超松弛(Successive over relaxation,SOR)迭代法。其中,ω称为松弛因子,SOR迭代格式如下:
x(k+1)=x(k)+ωD−1(Lx(k+1)+Ux(k)−Dx(k)+b)(SOR迭代格式1)
或者把x(k+1)全部移到左侧,并集中右侧的x(k):
⟹(I−ωD−1L)x(k+1)=x(k)+ωD−1Ux(k)−ωx(k)+ωD−1b⟹(D−ωL)x(k+1)=Dx(k)+ωUx(k)−ωDx(k)+ωb⟹(D−ωL)x(k+1)=((1−ω)D+ωU)x(k)+ωb⟹x(k+1)=(D−ωL)−1((1−ω)D+ωU)x(k)+ω(D−ωL)−1b(SOR迭代格式2)
此时,迭代矩阵为:
BSOR=(D−ωL)−1((1−ω)D+ωU)
ω=1时,SOR迭代法即为GS迭代法。
SOR迭代算法:
-
给定初值x(0);
-
对k=0,1,2,⋯,计算:
-
xi(k+1)=xi(k)+aiiω(bi−∑j=1i−1aijxi(k+1)−∑j=inaijxi(k));
右侧括号中的第二项累加下标是j=i;
这里写成了每个元素求解的形式,也可直接写成向量求解的形式,即(SOR迭代格式2)。
-
若近似解达到收敛条件,则结束;否则,继续2~3步的计算。
不定常迭代法
这里介绍两类最基本的不定常迭代方法:
-
求解对称正定线性方程组的最速下降法和共轭梯度法;
这两种方法本质上是一种变分方法,对应于求一个二次函数的极值,也称之为极小化方法;
预处理共轭梯度法已被广泛应用到各个领域,是求解大型稀疏对称正定方程组的最有效方法。
-
求解不对称线性方程组的广义极小残量法。
最速下降法
设A对称正定,线性方程组为
Ax=b(7)
其中,A=(aij)∈Rn×n,x=(x1,x2,⋯,xn)T,b=(b1,b2,⋯,bn)T。
首先,介绍上述线性方程组等价的变分问题。
任取x,对于给定的A和b,定义n元二次函数φ:Rn→R为:
φ(x)=21(x,Ax)−(x,b)=21i=1∑nj=1∑naijxixj−i=1∑nbixi(8)
其中,(x,y)=xTy=∑i=1nxiyi(内积)。
该二次函数(8)具有如下性质:
-
对于x∈Rn,∂xi∂φ=21∑j=1n(aij+aji)xj−bi,即φ(x)的梯度为:
∇φ(x)=21(A+AT)x−b=Ax−b
从这个地方就可以大致看出,φ(x)的极值点就是式(7)的解。
-
对于x,y∈Rn,a∈R,有:
φ(x+ay)=21(x+ay,A(x+ay))−(x+ay,b)=21(x,Ax)+21(x,aAy)+21(ay,Ax)+21(ay,aAy)−(x,b)−(ay,b)=φ(x)+a(y,Ax)−a(y,b)+2a2(y,Ay)=φ(x)+a(y,Ax−b)+2a2(y,Ay)
-
设x∗=A−1b为式(5)的解,那么φ(x∗)=21(x∗,b)−(x∗,b)=−21(x∗,b),且对于x∈Rn,有:
φ(x)−φ(x∗)=21(x,Ax)−(x,b)+21(x∗,b)=21(x,Ax)−(x,Ax∗)+21(x∗,Ax∗)=21(x,Ax)−21(x,Ax∗)−21(x,Ax∗)+21(x∗,Ax∗)=21(x,A(x−x∗))−21(x−x∗,Ax∗)=21(x,A(x−x∗))−21(x∗,A(x−x∗))=21(x−x∗,A(x−x∗))
以上三个性质的证明都需要用到A的对称性。
这里引入如下定理:设A对称正定,x∗是方程组Ax=b的解的充要条件是x∗为二次函数φ(x)的极小值点,即φ(x∗)=minx∈Rnφ(x)。
那么,求解Ax=b的问题可以转化为求函数φ(x)的唯一极小值点的问题。
为了找到这个极小值点,可以从任一点x(k)出发,沿某一指定的方向y(k)∈Rn,搜索下一个近似点x(k+1),使得φ(x(k+1))在该方向上达到极小值。该搜索策略,即迭代格式如下:
x(k+1)=x(k)+αky(k)(9)
选择y(k)的方式不同,将会得到不同的算法。
令y(k)为某一搜索方向,r(k)=b−Ax(k)为x(k)对应的残量,有如下函数(套用式(8)的性质2):
φ(x(k+1))=φ(x(k)+αky(k))=φ(x(k))−αk(y(k),r(k))+2αk2(y(k),Ay(k))(10)
在上式中,为了使φ(x(k+1))在已知x(k)和y(k)下能够达到最小,则说明步长αk需要满足如下要求(只剩下αk这个变量在影响φ(x(k+1))):
dαkdφ(x(k)+αky(k))=0⟹αk(y(k),Ay(k))=(y(k),r(k))⟹αk=(y(k),Ay(k))(y(k),r(k))(11)
由$$\mathbf{A}$$的正定性得到:
dαk2d2φ(x(k)+αky(k))=(y(k),Ay(k))>0
因此,可以说明αk=(y(k),Ay(k))(y(k),r(k))正是φ(x(k)+αky(k))的极小值点。将式(11)代入式(10),得到:
φ(x(k+1))−φ(x(k))=φ(x(k)+αky(k))−φ(x(k))=−(y(k),Ay(k))(y(k),r(k))2+21(y(k),Ay(k))(y(k),r(k))2=−21(y(k),Ay(k))(y(k),r(k))2(12)
可以看到,当(y(k),r(k))=0,即y(k)和r(k)不正交时,φ(x(k+1))<φ(x(k))成立。
即随着迭代进行,φ(x(k+1))是不断在减小的。
由式(12)可知, φ(x(k+1))相对于φ(x(k))的下降量是取决于y(k)的方向而不是y(k)的大小。
原因如下:
将式(12)中的y(k)进行单位化,可以得到:
φ(x(k+1))−φ(x(k))=−21∥y(k)∥2(ynorm(k),Aynorm(k))∥y(k)∥2(ynorm(k),r(k))2=−21(ynorm(k),Aynorm(k))(ynorm(k),r(k))2
其中,ynorm(k)表示单位化后的向量,∥⋅∥表示向量模长。容易看出,下降量只与y(k)的方向,即ynorm(k)有关。
那么,当y(k)与r(k)同向时,下降量最多,也可称为,下降最快。
而下降最快的方向,正好是在该点x(k)的负梯度方向,换言之,在点x(k)处下降最快的方向为在该点的负梯度方向。
结合式(8)的性质1和残量r(k)的定义即可看出。
从而,取y(k)=r(k),并代入迭代格式(9),可以得到求的极小值点的最速下降法。其中,αk=(r(k),Ar(k))(r(k),r(k))。
最速下降法算法:
- 选定初值x(0);
- 对k=0,1,2,⋯,直至收敛,计算:
- r(k)=b−Ax(k);
- αk=(r(k),Ar(k))(r(k),r(k));
- x(k+1)=x(k)+αkr(k)。
但一次迭代出现了两次矩阵-向量乘法运算,即Ax(k)和Ar(k)。
由于x(k+1)=x(k)+αkr(k)⟹r(k+1)=r(k)−αkAr(k),那么,可以不用算Ax(k)就可以完成第5步。
不过,这样子计算r(k+1)会导致舍入误差逐渐累积,使得最后计算出来的r(k+1)达不到精度。因此,一般可设置每几次迭代后再计算Ax(k+1)来修正r(k+1)。
共轭梯度法
从局部角度来看,最速下降法所选择的负梯度方向是最佳的搜索方向,但从整体角度来看并非最优。
为了寻找更好的搜索方向,且每次确定搜索方向时的计算也不会太过复杂,共轭梯度法诞生了。
假设A对称正定,但此时不再沿着负梯度方向r(0),r(1),⋯r(k)搜索,而是寻找另外一组方向,使得经过k次搜索后,得到近似解x(k)。
这里引入共轭的定义:A对称正定,若Rn中向量组{p(0),p(1),⋯,p(l)}满足:
(Ap(i),p(j))=(p(i),p(j))A=0,i=j
则称该向量组为Rn中的一个A-共轭向量组,或称为A-正交向量组,或称这些向量是A-共轭的(两两A-共轭)。
可理解为:从另一个角度上看,这些向量是”正交“的,而该角度由A确定。
可以证明,A-共轭向量组中的向量是线性无关的。
共轭梯度法所要寻找的方向便是这样的共轭方向{p(0),p(1),⋯,p(l)},并且要求p(k)是由当前负梯度r(k)和上一帧搜索方向p(k−1)的线性组合:
p(k)=r(k)+βk−1p(k−1)(13)
待有时间和更加深入的理解后,将进一步说明是如何引出该构造的。
Hestenes-Stiefel公式
现在问题则变成:如何确定出这样的βk−1?根据{p(0),p(1),⋯,p(l)}是A-共轭向量组,得到
⟹(p(k−1),p(k))A⟹0⟹βk−1=(p(k−1),r(k))A+βk−1(p(k−1),p(k−1))A=(p(k−1),r(k))A+βk−1(p(k−1),p(k−1))A=−(p(k−1),p(k−1))A(p(k−1),r(k))A(14)
式(14)称为Hestenes-Stiefel公式。
虽然式(14)只用了p(k)和p(k−1)A-共轭的条件,(这里不加证明给出)但按照式(14)进行构造的{p(0),p(1),⋯,p(l)}是能够满足A-共轭的。
Crowder-Wolfe公式
观察式(14),里面还含有矩阵-向量运算,为了消去矩阵-向量运算,可以利用如下等式:
x(k)⟹Ax(k)⟹b−Ax(k)⟹r(k)−r(k−1)=x(k−1)+αkp(k−1)=Ax(k−1)+αkAp(k−1)=b−Ax(k−1)−αkAp(k−1)=−αkAp(k−1)(15)
可以将Ap(k−1)运算替换为只有向量之差的计算,即Ap(k−1)=−αk1(r(k)−r(k−1)),那么,式(14)修正为
βk−1=−(p(k−1),p(k−1))A(p(k−1),r(k))A=−−αk1(r(k)−r(k−1),p(k−1))−αk1(r(k)−r(k−1),r(k))=−(r(k)−r(k−1),p(k−1))(r(k)−r(k−1),r(k))(16)
式(16)称为Crowder-Wolfe公式。
Dixon公式
这里不加证明给出两个性质:
- (r(i),r(j))=0, i=j;
- (p(i),r(j))=0, i<j。
根据性质1,式(16)的分子则简化为:
(r(k)−r(k−1),r(k))=(r(k),r(k))(17)
根据性质2,式(16)的分母则简化为:
(r(k)−r(k−1),p(k−1))=−(r(k−1),p(k−1))(18)
那么,根据式(17)和式(18),式(16)可修正为:
βk−1=−(r(k)−r(k−1),p(k−1))(r(k)−r(k−1),r(k))=(r(k−1),p(k−1))(r(k),r(k))(19)
式(19)称为Dixon公式。
Fletcher-Reeves公式
观察式(18),由于p(k−1)=r(k−1)+βk−2p(k−2),那么式(18)可进一步简化为:
(r(k)−r(k−1),p(k−1))=−(r(k−1),p(k−1))=−(r(k−1),r(k−1)+βk−2p(k−2))=−(r(k−1),r(k−1))(20)
那么,根据式(17)和式(20),式(16)可修正为:
βk−1=−(r(k)−r(k−1),p(k−1))(r(k)−r(k−1),r(k))=(r(k−1),r(k−1))(r(k),r(k))(21)
式(21)称为Fletcher-Reeves公式。
Polak-Ribiere-Polyak公式
若只对式(16)的分母使用式(20)进行简化,则式(16)修正为:
βk−1=−(r(k)−r(k−1),p(k−1))(r(k)−r(k−1),r(k))=(r(k−1),r(k−1))(r(k)−r(k−1),r(k))(22)
式(22)称为Polak-Ribiere-Polyak公式。
在实际应用中,常使用FR和PRP公式,因为这两个公式只需要梯度(残量)信息便能直接计算βk−1。
在第一步迭代时(k=1),上述公式无法计算出p(0),因此,一般就直接取为负梯度方向,即p(0)=r(0)。
为了保证所寻找的方向能够使φ(x(k))减小,那么说明p(k)方向不会太过偏离梯度下降的方向,即(p(k),r(k))<0。
对于步长,同最速下降法的线性搜索一致:
dαkdφ(x(k)+αkp(k))=0⟹αk(p(k),Ap(k))=(p(k),r(k))
可求得:
αk=(p(k),Ap(k))(p(k),r(k))=(p(k),p(k))A(r(k)+βk−1p(k−1),r(k))=(p(k),p(k))A(r(k),r(k))(23)
共轭梯度算法:
- 选定初值x(0),设p(0)=r(0)=b−Ax(0);
- 对k=0,1,2,⋯,直至收敛,计算:
- αk=(p(k),p(k))A(r(k),r(k));
- x(k+1)=x(k)+αkp(k)
- r(k+1)=b−Ax(k+1);
- βk=(r(k),r(k))(r(k+1),r(k+1))(FR公式)或者βk=(r(k),r(k))(r(k+1)−r(k),r(k+1))(PRP公式);
- p(k+1)=r(k+1)+βkp(k);
与最速下降法对比,共轭梯度法其实就多了一步搜索方向微调的步骤,即第7步。
预处理
为了保证迭代矩阵的条件数能够小点,一般会对原方程Ax=b进行变换,即M−1Ax=M−1b,例如可以取M=diag(A),可以使求解过程收敛更快。
参考资料