数值分析11(共轭梯度法)

合集下载

共轭梯度法公式

共轭梯度法公式

共轭梯度法公式
共轭梯度法是一种用于求解线性方程组的迭代算法。

其主要思想是通过利用前一次迭代的信息来加速当前迭代的速度,从而减少迭代次数和计算量。

共轭梯度法公式包括以下几个步骤:
1. 初始化:设初始解为x0,残量b0为Ax0-b,共轭方向d0=b0。

2. 迭代求解:对于第k次迭代,计算步长αk,使得xk+1=xk+αkd,其中d是共轭方向,满足dTkAd=0,即d是A的共轭向量。

3. 更新残量:计算新的残量bk+1=Axk+1-b,如果bk+1小于预设精度,则停止迭代。

4. 更新共轭方向:计算新的共轭方向dk+1=bk+1+βkdk,其中βk=(bk+1)Tbk+1/(bk)Tbk,保证dk+1与之前的共轭方向都是A的共轭向量。

5. 重复迭代,直到满足收敛条件,返回最终解xk+1。

共轭梯度法是一种高效的求解大型线性方程组的方法,尤其适用于稀疏矩阵和对称正定矩阵。

公式简单易懂,容易实现,且具有较快的收敛速度。

- 1 -。

共轭梯度法步骤

共轭梯度法步骤

共轭梯度法步骤共轭梯度法是一种求解线性方程组的迭代算法,它以高效稳定的特点而广受欢迎。

以下是共轭梯度法的步骤:步骤1:初始化首先,我们需要有一个初始向量x0和一个初始残量r0=b-Ax0。

其中,A为系数矩阵,b为常数向量。

步骤2:计算方向向量令d0=r0,表示第一次迭代的方向向量。

步骤3:计算步进长度令α0=(r0·r0)/(d0·Ad0),其中·表示向量的点积。

α0表示迭代过程中每个方向向量的步进长度。

步骤4:更新解向量令x1=x0+α0d0,表示迭代后的解向量。

步骤5:计算新残量令r1=r0-α0Ad0。

步骤6:判断终止条件如果r1的范数小于预设阈值,或者迭代次数达到预设次数,终止迭代。

否则,进入下一次迭代。

步骤7:更新方向向量令β1=(r1·r1)/(r0·r0),表示更新方向向量的轴线。

步骤8:计算新方向向量令d1=r1+β1d0,表示新的迭代方向向量。

步骤9:计算新的步进长度令α1=(r1·r1)/(d1·Ad1)。

步骤10:更新解向量令x2=x1+α1d1。

步骤11:更新残量令r2=r1-α1Ad1。

步骤12:重复步骤6至11,直至满足终止条件。

总结起来,共轭梯度法的步骤主要包括初始化、计算方向向量、计算步进长度、更新解向量、计算新残量、判断终止条件、更新方向向量、计算新的步进长度、更新解向量和更新残量等。

该算法迭代次数较少,收敛速度快,适用于大规模线性方程组的求解。

共轭梯度法

共轭梯度法

共轭梯度法1.算法思想:共轭梯度法是利用目标函数梯度逐步产生共轭方向作为线搜索方向的方法,每次搜索方向都是在目标函数梯度的共轭方向,搜索步长通过一维极值算法确定。

2.算法步骤:用共轭梯度法求无约束多维极值问题min (),n f x x R ∈的算法步骤如下:(1) 给定初始点(0)x ,及精度0ε>; (2) 若(0)()f x ε∇≤,停止,极小值点为(0)x ,否则转步骤(3);(3) 取(0)(0)()p f x =-∇,且置0k =;(4) 用一维搜索法求k t ,使得()()()()()0()mink k k k k t f x t p f x tp ≥+=+,令,(1)()()k k k k x x t p +=+,转步骤5; (5) 若(1)()k f x ε+∇≤,停止,极小值点为(1)k x +,否则转步骤(6);(6) 若1k n +=,令(0)()n x x =,转步骤(3),否则转步骤(7); (7) 令(1)(1)()()k k k k p f x p λ++=-∇+,2(1)2()()()k kk f xf x λ+∇=∇,置1k k =+,转步骤(4)。

3.算法源程序:#include<stdio.h> #include<math.h>#define N 10#define eps pow(10,-6)double f(double x[],double p[],double t){double s;s=pow(x[0]+t*p[0],2)+25*pow(x[1]+t*p[1],2); return s;}/*以下是进退法搜索区间源程序*/void sb(double *a,double *b,double x[],double p[]) {double t0,t1,t,h,alpha,f0,f1;int k=0;t0=2.5; /*初始值*/h=1; /*初始步长*/alpha=2; /*加步系数*/f0=f(x,p,t0);t1=t0+h;f1=f(x,p,t1);while(1){if(f1<f0){h=alpha*h; t=t0;t0=t1; f0=f1;k++;}else{if(k==0){h=-h;t=t1;}else{*a=t<t1?t:t1;*b=t>t1?t:t1;break;}}t1=t0+h;f1=f(x,p,t1);}}/*以下是黄金分割法程序源代码*/double hjfg(double x[],double p[]){double beta,t1,t2,t;double f1,f2;double a=0,b=0;double *c,*d;c=&a,d=&b;sb(c,d,x,p);/*调用进退法搜索区间*/printf("\nx1=%lf,x2=%lf,p1=%lf,p2=%lf",x[0],x[1],p[0],p[1]); printf("\n[a,b]=[%lf,%lf]",a,b);beta=(sqrt(5)-1.0)/2;t2=a+beta*(b-a); f2=f(x,p,t2);t1=a+b-t2; f1=f(x,p,t1);while(1){if(fabs(t1-t2)<eps)break;else{if(f1<f2){t=(t1+t2)/2;b=t2; t2=t1;f2=f1; t1=a+b-t2;f1=f(x,p,t1);}else{a=t1; t1=t2;f1=f2;t2=a+beta*(b-a);f2=f(x,p,t2);}}}t=(t1+t2)/2;return t;}/*以下是共轭梯度法程序源代码*/void gtd(){double x[N],g[N],p[N],t=0,f0,mod1=0,mod2=0,nanda=0; int i,k,n;printf("请输入函数的元数值n=");scanf("%d",&n);printf("\n请输入初始值:\n");for(i=0;i<n;i++)scanf("%lf",&x[i]);f0=f(x,g,t);g[0]=2*x[0]; g[1]=50*x[1];mod1=sqrt(pow(g[0],2)+pow(g[1],2));/*求梯度的长度*/if(mod1>eps){p[0]=-g[0]; p[1]=-g[1]; k=0;while(1){t=hjfg(x,p);/*调用黄金分割法求t的值*/printf("\np1=%lf,p2=%lf,t=%lf",p[0],p[1],t);x[0]=x[0]+t*p[0]; x[1]=x[1]+t*p[1];g[0]=2*x[0]; g[1]=50*x[1];/*printf("\nx1=%lf,x2=%lf,g1=%lf,g2=%lf",x[0],x[1],g [0],g[1]);*/mod2=sqrt(pow(g[0],2)+pow(g[1],2)); /*求梯度的长度*/if(mod2<=eps) break;else{if(k+1==n){g[0]=2*x[0]; g[1]=50*x[1];p[0]=-g[0]; p[1]=-g[1]; k=0;}else{nanda=pow(mod2,2)/pow(mod1,2);printf("\nnanda=%lf,mod=%lf",nanda,mod2);p[0]=-g[0]+nanda*p[0];p[1]=-g[1]+nanda*p[1];mod1=mod2;k++;}}printf("\n--------------------------");}}printf("\n最优解为x1=%lf,x2=%lf",x[0],x[1]);printf("\n最终的函数值为%lf",f(x,g,t));}main(){gtd();}4.运行结果:5.结论与总结:通过这次运筹学的课程设计,,从中让我学到了很多知识,对共轭梯度法的设计与实现有了进一步的认识,搜索方向都是在目标函数梯度的共轭方向,搜索步长通过一维极值算法确定,本次课程设计通过上网查找和在图书馆查找相关资料但从中还有很多不足之处,在日后的学习中不断完善。

共轭梯度法(精品文档)

共轭梯度法(精品文档)

1

g2T (g2 d1T (g2
g1) g1)

g2T g2 g1T g1
4) 一般地,在第 k 次迭代中,令
k 1
dk gk idi i0
适当选取 i ,使 dkTGdi 0 ( i 0,
, k 1),可得到
i

gkT Gdi diT Gdi

gkT (gi1 gi ) diT (gi1 gi )
§4.2 共轭梯度法
提纲
1、共轭梯度法---F-R共轭梯度法 2、共轭梯度法性质定理及例题 3、再开始FR共轭梯度法 4、Beale三项共轭梯度法 5、预条件共轭梯度法(了解)
共轭梯度法
在上一节中讨论了共轭方向法,其中n个共轭方向是预先设定好的。但是如何 让获取这些共轭方向并为提及。本节讨论一种重要的共轭方向法——共轭梯 度法。这种方法是将共轭性和最速下降方向相结合,利用已知迭代点处的梯 度方向构造一组共轭方向,并沿此方向进行搜索,求出函数的极小点。因在 迭代过程中通过对负梯度方向进行适当校正获得共轭方向,故而称之为共轭 梯度法。
算法步骤—FR共轭梯度法
1、选取初始数据,选取初始点 x0 ,给定允许误差 0 ;
2、检查是否满足终止准则,计算 f (x0 ) ,若 || f (x0 ) || ,迭代终
止,x0为近似最优解,否则转向3;
3、 构造初始搜索方向,计算 d0 f (x0 ), k 0;

k 1

gkT (gk gk1)
dT k 1
(
gk

gk 1 )

gkT gk gkT1 gk 1
共轭梯度法的迭代公式为:

共轭梯度法

共轭梯度法
线性无关,由线性代数知识知
必有
p
T j
∇f
(X
n
)
=0(源自j=0,1,L,
n
− 1)
因为A正定,所以f (X ) 是凸函数,故 X n 是惟一的全局 极小点。
从而
∇f (Xk ) = AXk + b
=
AX
j+1
+
λ* j+1
Apj+1
+L+
λ* k −2
Apk−2
+
λ* k −1
Apk
−1
+
b
=
∇f
(X
⎡6 ⎢⎣17
12⎤ 17⎥⎦
⎢⎣⎡−
90 289

210⎤ 289⎥⎦
T

210⎤⎡ 3 289⎥⎦⎢⎣−1
−11⎥⎦⎤⎢⎣⎡−
90 289

210⎤T 289⎥⎦
= 17 10
X2
=
X1
+
λ1 p1
=
⎡ 26 ⎢⎣17
38 ⎤ T 17 ⎥⎦
+ 17 10
⎢⎣⎡−
90 289

210 ⎤ T 289 ⎥⎦
= [1
1]T
∇f ( X 2 ) = [0 0]T
练习: 试用共轭梯度法二次函数
min
f
(x)
=
x12
+
1 2
x22
+
1 2
x32
的极小点。取初始点为x( 0 ) = (1,1,1)T
3 、非二次函数的共轭梯度法
一般地,我们有:
⎧ X k+1 = X k + λk pk

共轭梯度法

共轭梯度法
例 3.1 用共轭梯度法求解无约束非线性规划问题
2 2 min f ( x ) = x1 + 2x2 x
⎛1⎞ 给定初始点 x (0) = ⎜ ⎜1⎟ ⎟。 ⎝ ⎠
13
⎛ 2 x1 ⎞ ⎛ 2 0⎞ 2 首先, ∇f ( x ) = ⎜ ⎜ 0 4⎟ ⎟ ,以下利用(4.14)确定 β k 。 ⎜ 4x ⎟ ⎟ ,H= ∇ f ( x ) = ⎜ ⎝ ⎠ ⎝ 2⎠ k=0:
0
k +1
) 与搜索方向 s 0 ," , s k 均正交。同时,利用引理 4.1 马上
设 H ∈ R n×n 是对称正定阵,s ," , s
0
n −1
0
n −1
是非零 G—共轭方向组,x ∈ R 。 若对问题(UQP),
0
n
从 x 出发,依次沿 s ," , s
0
进行最优一维搜索,最终得到 x ,则 x 是(UQP)的最优解。
为保证 H-共轭性,在 x 处必须取 s 为搜索方向,而不能取 α s (α > 0) 为搜索方向。
k k
k
利用定理 4.3,马上得到上述算法的有限终止性。 定理 4.4 设 H ∈ R n×n 是对称正定阵。若用凸二次规划的共轭梯度法求解 (UQP) 时产生迭代点
x1 ," , x K ,则 x K 是(UQP)的最优解,并且 K ≤ n 。
首先由(4.7)知, g = ∇f ( x ) ( j = 0, " , k -1)是 s ," , s 的线性组合,因此根据定理 4.2,
j j 0 j
( g k )T g j =0, j = 0, " , k -1
由于

——共轭梯度法ppt课件

——共轭梯度法ppt课件

r ( k 1 ) , r ( k 1 ) r ( k ) kr ( k ) k 1 p ( k 1 ) , A p ( k )
1 r(k1),r(k1)
k
r(k),Ap(k)
r(k1), r(k1)
r(k), r(k)
共轭梯度法
算法 :(共轭梯度法 )
(1) (x) 的梯度为:
(x) x 1, Rn 和 R,有
(x y ) 1 A (x y ),x y b ,x y 2 2A y,y(A xb,y)(x) 2
(3) 令 x*=A-1b,那么有
( x ) 1 b T A 1 b b T A 1 b 1 b T A 1 b 1 A x ,x
计算方法
第六章 线性方程组的迭代解法
—— 共轭梯度法
本讲内容
共轭梯度法
最速下降法 共轭梯度法 共轭梯度法的收敛性分析
等价问题
思索线性方程组:Ax = b ,其中 A 对称正定 作二次泛函 (x): Rn R
(x )1(A x ,x ) (b ,x )1x T A xx T b
2
2
(x) 具有以下性质:
证明:板书
共轭梯度法
k 与 k 的计算
k r ( k ) , p ( k ) p ( k ) , A p ( k ) r ( k ) , r ( k ) p ( k ) , A p ( k )
k r ( k 1 ) ,A p ( k ) p ( k ) ,A p ( k )
共轭梯度法
详细作法:令 p(0) = r(0) ,设 x(k) 曾经求得,那 么 x(k+1) 由下面的公式确定:
x(k1)x(k)kp(k)
其中
p(k)r(k)k1p(k1)

共轭梯度法详细解读

共轭梯度法详细解读

共轭梯度法详细解读
嘿,朋友们!今天咱就来好好唠唠共轭梯度法。

你想想啊,咱平常解决问题就像走迷宫似的,有时候会在里面转来转去找不到出路,而共轭梯度法呀,就像是在迷宫里给咱指了一条明路!比如说你想找一条最快从山这头到那头的路,共轭梯度法就能帮上大忙啦!
它可不是随随便便就出现的哦,那可是数学家们绞尽脑汁研究出来的宝贝呢!就好比一个超级英雄,专门来打救我们这些在复杂问题里苦苦挣扎的人。

在实际应用里,它可厉害着呢!比如说在工程计算中,要设计一个最完美的结构,共轭梯度法就能迅速算出最优解。

哇塞,这不就相当于有个超厉害的军师在帮咱出谋划策嘛!
你再想想,我们日常生活中很多事情都可以类比成用共轭梯度法来解决问题呀。

比如说你要规划一次旅行,怎么安排路线最合理,不就是在找那个最优的旅行路径嘛,这时候共轭梯度法的思路就能派上用场啦!它就像一个隐藏在幕后的高手,默默地为我们排忧解难。

而且哦,一旦你掌握了它,那种感觉就像是你突然掌握了一种绝世武功,能在各种难题面前游刃有余。

这可太酷了吧!
哎呀呀,共轭梯度法真的是太神奇、太有用啦!大家可一定要好好去了
解它、运用它呀,你绝对会被它的魅力折服的!相信我,没错的!。

共轭梯度法

共轭梯度法

证明:采用数学归纳法, 不过, 还是省略它
(5.8)意味着 d iT Qd j 0, j i, i 1, 2, , n - 1 即Broyden 族在用精确搜索求解凸二次函数极小化问题 时, 所产生的方向关于矩阵Q相互共轭.属于共轭方向法.
前面讨论的共轭方向法 需要在算法之初 产生 n个共轭方向,因而需要很大的存贮量,而且 不能用来求解非二次问题.
j 0 k
dT j Qp k 1 d Qp j
T j
d j,
(5.5)
步2 若k n - 2, 则停止, 否则, 令k : k 1, 转步1.
容易验证, 由算法5.1产生的向量组 d 0 , d1 , , d n-1 R n 关于矩阵Q相互共轭
下面的定理解释了第四章介绍的Broyden 族具有二次终 止性的根本原因 :
其中 k 是待定参数, 适当选取 k , 使得 d kT Qd k -1 0.
一般地, 搜搜方向的计算公式为: - f ( x0 ), dk - f ( xk ) k d k -1 , k 0 k 1 (5.10)
在下面我们来推导 (5.10) 参数 k 的计算公式 :
d k -f ( xk ) k d k -1
其中 k 是由精确搜索得到的步长. 即满足
于是求得
d kT-1Qf ( xk ) k T dk -1Qd k -1
在该计算式中含矩阵Q, 为减少计算量及使共轭梯度能 用于求解非二次函数的优化问题, 在计算式中消除 Q.
由上面的条件得到
T T T p0 Qp1 - p0 Qf ( x1 ) p0 Qp 0 0
等值线
f ( x1 )
由此解得 所以 p Qf ( x1 ) T p0 Qp 0

共轭梯度法课件

共轭梯度法课件

4.3共轭梯度法4.3.1共轭方向法定义4.3.1设A 是n ×n 对称正定矩阵,d 1,d 2,是n 维非零矢量,如果d 1T Ad 2=0则称d 1和d 2是A-共轭的,简称共轭的设d 1,d 2,...,d m 是R n 中一组非零向量,如果d i T Ad j =0,i ≠j ,j,i=1,2,...,k则d 1,d 2,...,d m 是A-共轭的,简称共轭的,也称它们是一组A 共个方向定理4.3.3设x 0∈Rn 是任意初始点,对于极小化二次函数min f(x)=1/2 x T Ax-b T x 共轭方向法至多经n 步精确线性搜索终止;且每一x i+1都是f(x)在x 0和方向d 1,d 2,....,di, 所张成的线性流形{|x x=x 0+,0j i j j da ∑=j a ∀}中的极小点。

4.3.4共轭梯度法共轭梯度法是一个典型的共轭方向法,他的每一个搜索方向是相互共轭的,而这些搜索方向d k 仅仅是负梯度方向-g k 与上一次迭代的搜索方向d k-1组合。

因此,存储量小,计算方便。

定理4.3.6对于正定二次函数,采用精确线性搜索的共轭梯度法在m ≦n 步后终止,且对1≦i≦n成立下列关系式:d i T Ad j=0,j=0,1,...,i-1,g i T Ag j=0,j=0,1-1,d i T Ag i= - g i T g I[g0,g1,...,g i]=[g0,Ag0,,...,A i g0][d0,d1,...,d i]=[g0,Ag0,,...,A i g0]其中[g0,g1,...,g i]和[d0,d1,...,d i]分别表示g0,g1,...,g i及d0,d1,...,d i张成的子空间,[g0,Ag0,,...,A i g0]表示g0的i阶Krylov子空间。

定理4.3.9(FR共轭梯度法的总体收敛性定理)假定f R n R在有界水平集L={x R n|f(x)≦f(x0)}上连续可微,且有下界,那么采用精确线性搜索的F-R共轭梯度法产生的序列{x k}至少有一个聚点是驻点,即1当{x k}是有穷数列时,其最后一个点是f(x)的驻点;2当{x k}是无穷数列时,它必有聚点,且任一聚点都是f(x)的驻点。

共轭梯度法总结

共轭梯度法总结

共轭梯度法总结
共轭梯度法总结
一、什么是共轭梯度法
共轭梯度法(Conjugate Gradient Method),是一种用于求解线性方程组的迭代优化算法,它是一种搜索梯度的迭代算法。

共轭梯度法的基本思想是沿梯度的反方向搜索,并在每一步令搜索的方向接近更新的局部梯度。

它是一种非常有效的求解有约束的非线性优化问题的方法,是求解线性方程组的有效算法。

共轭梯度法可以看作是一种极小化函数的迭代方法,它最主要的思想是不断更新梯度的方向,从而寻找函数值最小的点。

二、共轭梯度法的原理
共轭梯度法是一种迭代优化算法,它以凸二次型函数为例,可以用来求解最小值问题。

它的基本思想是:
(1)首先求得函数的梯度,即每一步优化的搜索方向,使梯度变为最小;
(2)以梯度的反方向搜索,令搜索的方向接近更新的局部梯度,而不是与旧的梯度成正比的步长;
(3)逐步更新搜索的方向为新的梯度;
(4)重复这个过程,直到所有的自变量满足限制条件。

三、共轭梯度法的优缺点
共轭梯度法最大的优点是它具有收敛速度快,可以在有限的迭代步数内收敛到最优解;另外,它还具有计算量小,不需要计算精确的
Hessian矩阵的优点。

共轭梯度法的缺点是它不能用来求解非凸优化问题,因为它只能求解凸优化问题;另外,它也不能用于强不可约的优化问题。

共轭梯度法

共轭梯度法

共轭梯度法
数学上,共轭梯度法是求解特定线性系统的数值解的方法,其中那些矩阵为对称和正定。

共轭梯度法是一个迭代方法,所以它适用于稀疏矩阵系统,因为这些系统对于象乔莱斯基分解这样的直接方法太大了。

这种系统在数值求解偏微分方程时相当常见。

共轭梯度法也可以用于求解无约束的最优化问题。

双共轭梯度法提供了一种处理非对称矩阵情况的推广。

方法的表述
设我们要求解下列线性系统
Ax = b,,
其中n-×-n矩阵A是对称的(也即,A T = A),正定的(也即,x T Ax > 0对于所有非0向量x属于R n),并且是实系数的。

将系统的唯一解记作x*。

最后算法
经过一些简化,可以得到下列求解Ax = b的算法,其中A是实对称正定矩阵。

x
:= 0
k := 0
r
:= b
repeat until r k is "sufficiently small":
k := k + 1
if k = 1
p
:= r0
1
else
end if
x
:= x k-1 + αk p k k
r
:= r k-1 - αk A p k k
end repeat
结果为x k。

共轭梯度方法

共轭梯度方法

共轭梯度方法(Conjugate Gradient Method)是求解线性方程组的一种迭代算法。

该方法适用于求解大型稀疏的对称正定线性方程组,可以显著减少计算量和存储空间。

该方法的主要思想是利用共轭方向(Conjugate Directions)的性质,在有限次迭代中求解方程组的解。

共轭梯度方法的基本步骤如下:
选取一个初值$x_0$,并令$r_0=b-Ax_0$,其中$b$ 为方程组的右端向量,$A$ 为系数矩阵。

计算一个共轭方向$p_0=r_0$,即$p_0$ 与$r_0$ 正交,并满足$Ap_0 \neq 0$。

对于$k=0,1,2,\ldots$,执行以下操作:
a. 计算$\alpha_k=\frac{r_k^Tr_k}{p_k^TAp_k}$。

b. 更新解向量$x_{k+1}=x_k+\alpha_kp_k$。

c. 计算残差向量$r_{k+1}=r_k-\alpha_kAp_k$。

d. 计算$\beta_k=\frac{r_{k+1}^Tr_{k+1}}{r_k^Tr_k}$。

e. 更新共轭方向$p_{k+1}=r_{k+1}+\beta_kp_k$,即$p_{k+1}$ 与$p_k$ 具有共轭性。

如果残差向量$r_k$ 较小,则停止迭代,输出解向量$x_k$。

共轭梯度方法具有收敛速度快、存储空间小等优点,但对于非对称和非正定的线性方程组,该方法可能不收敛。

同时,该方法也有一些变体,如预处理共轭梯度法、共轭残差法等,可以更好地解决不同类型的线性方程组求解问题。

共轭梯度法

共轭梯度法

共轭梯度法1. 算法原理求解一个系数矩阵为正定矩阵的线性方程组可通过求泛函)(x f 的极小值点来获得,进而可以利用共轭梯度法来求解。

共轭梯度法中关键的两点是,确定迭代格式)()()1(k k k k d x x α+=+中的搜索方向)(k d 和最佳步长k α。

实际上搜索方向)(k d是关于矩阵A 的共轭向量,在迭代中逐步构造之;步长k α的确定原则是给定迭代点)(k x 和搜索方向)(k d 后,要求选取非负数k α,使得)()()(k k k d x f α+达到最小,即选择0≥k α,满足)(min )()()(0)()(k k k k k d x f d x f kααα+=+≤。

设迭代点)(k x和搜索方向)(k d已经给定,k α可以通过一元函数)()()()(k k d xf g αα+=的极小化)()(min )()(0k k d xf g ααα+=≤来求得,所以最佳步长)()()()(k k k k k Addd r TT=α。

在给定初始向量)0(x 后,由于负梯度方向是函数下降最快的方向,故第1次迭代取搜索方向)0()0()0()0()(Ax b x f r d-=-∇==。

令)0(0)0()1(d x x α+=,其中)0()0()0()0(0Addd r TT=α。

第2次迭代时,从)1(x 出发的搜索方向不再取()1r,而是选取)0(0)1()1(d r d β+=,使得)1(d与()0d 是关于矩阵A 的共轭向量,即要求)1(d 满足()()()0,01=Ad d ,由此可求得参数)0()0()0()1(0-Ad d Ad r TT=β,然后从()1x 出发,沿方向)1(d进行搜索得)1(1)1()2(d x xα+=,其中1α已由上面k α的计算式获得。

一般地,设已经求出)()()1(k k k k d x x α+=+,计算)1()1(++-=k k Ax b r。

数值分析ppt第6章_共轭梯度法

数值分析ppt第6章_共轭梯度法

• 共轭梯度法可由多种途径引入,这里我们将采用较为直观的
最优化问题来引入。为此,我们先来介绍最速下降法。
考虑线性方程组
的求解问题。其中 是给定的
(4.1) 阶对称正定矩阵,
维向量。
是给定的
维向量,
是待求的
为此,我们定义二次泛函
(4. 2)
定理6.4.1 设
对称正定,求解方程组 的极小点。
等价于求二次泛函
证明 直接计算可得

,则有

在某点
处达到极小,则必有 ,即 是方程组的解。
,从而有
反之,若
是方程组的解,即

于是对任一向量
注意到A的正定性,则
,因此

是泛函
的极小点。
最速下降法
求解线性方程组的问题就转化为求二次泛函 的极小点的问题。求二次函数的极小值问题, 通常的做法就好象盲人下山那样,先任意给定一个初始向量 确定一个下山的方向 的直线 使得对所有实数 ,沿着经过点 找一个点 而方向为
共轭梯度法
• 在使用SOR方法求解线性方程组时,需要确定松驰因子,只 有系数矩阵具有较好的性质时,才有可能找到最佳松驰因子, 而且计算时还需要求得对应的Jacobi矩阵B的谱半径,这常常 是非常困难的。
• 介绍一种不需要确定任何参数的求解对称正定线性方程组的
方法——共轭梯度法(或简称CG法)。它是50年代初期由 Hestenes和Stiefel首先提出的,近20年来有关的研究得到了 前所未有的发展,目前有关的方法和理论已经相当成熟,并 且已经成为求解大型稀疏线性方程组最受欢迎的一类方法。

以上性质说明不论采用什么方法,ຫໍສະໝຸດ 要能够构造个两两A共轭的向量

共轭梯度法

共轭梯度法

v
i 0
p Api
n
i T i
pi
证明:
任意向量 v (v R ) 可以表示成
v c j Pj
j 0
n 1
用 Pi A
T
(i 1,2,,n-1) 左乘式(1)得
n 1 j 0
PiT Av c j PiT APj ci PiT APi
ci P iT Av P i APi
共轭梯度法
(Fletcher-Reeves)
梯度法的特点 优点 迭代过程简单,编制程序较易,一次迭代的工作量较少,计 算机内存量小。 函数值下降方向明确,对初始点没有严格要求。 缺点 跌代过程中走许多弯路,有些情况下,收敛速度较慢。
d ( k ) -f (x ( k ) ) f (x ( k 1) ) d ( k ) 0
f (x )
(1)
f (x* ) A (x(1) 1d1 ) B A x (1) B 1Ad1 0
=
d (1)
f (x(1) ) 1Ad1 0
x*
1d (1)
d (f (x d f (x
( 0) T (0) T
(1)
) 1Ad(1) )
提供共轭向量系的方法有多种,如共轭梯度法,Powell方法等。
(二)共轭梯度法
Fletcher & Reeves (1964)
构造共轭方向的具体方法
x
(k )
x
( 0)
id(i )
i 0
k 1
(1) 初始搜索方向的确定 选定初始点
x (0) ,下降方向 d (0)

x (0) 处的负梯度方向;

共轭梯度法

共轭梯度法

共轭梯度法对于任意形式的目标函数()f X ,在极值点*X 附近展开成泰勒级数,且取前三项,有()()()****2**1()...2TT f X f Xf X X X X X f X X X ⎡⎤⎡⎤⎡⎤⎡⎤≈+∇-+-∇-⎣⎦⎣⎦⎣⎦⎣⎦因在极值点*X 处()*0f X ∇=,而()2**()f X H X ∇=为()f X 在*X 的二阶偏导数矩阵,即Hessian 矩阵,故()****1().().2T f X f X X X H X X X ⎡⎤⎡⎤≈+--⎣⎦⎣⎦ 对于二次函数来说,若令()()()2*2*2*221122,,f X f X f X a b c x x x x ∂∂∂===∂∂∂∂则()**1(),a b H X f X d b c ⎡⎤==⎢⎥⎣⎦而—常数 则,得到()()()()()()()()()()()()()()11221212121122*1**112*2**12**112**1222****11122-1()+--2---1=+--2--1-2---2x x a b f X d x x x x b c x x a x x b x x d x x x x b x x c x x d a x x b x x x x c x x ⎡⎤⎡⎤⎢⎥⎡⎤≈⎢⎥⎣⎦⎢⎥⎣⎦⎣⎦⎡⎤+⎢⎥⎡⎤⎣⎦⎢⎥+⎣⎦⎡⎤=+++⎢⎥⎣⎦由上式可知,当12*1**2x x X X x x ⎡⎤⎡⎤===⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦时,得到目标函数的极小值()*1()f X f X d ==,当22(),,...f X d d =时,则有等值线族。

令2()f X d =,代入上式,则有()()()()112222****2111221()-2---2f X d d a x x b x x x x c x x ⎡⎤=≈+++⎢⎥⎣⎦所以目标函数()f X 在*X 点附近的等值线方程为()()()()112222****1122-2---0a x x b x x x x c x x d +++=式中,122()d d d =-=常数。

共轭梯度法

共轭梯度法

又称共轭斜量法,是解线性代数方程组和非线性方程组的一种数值方法,例如对线性代数方程组A尣=ƒ, (1)式中A为n阶矩阵,尣和ƒ为n维列向量,当A对称正定时,可以证明求(1)的解尣*和求二次泛函(2)的极小值问题是等价的。

此处(尣,у)表示向量尣和у的内积。

由此,给定了初始向量尣,按某一方向去求(2)取极小值的点尣,就得到下一个迭代值尣,再由尣出发,求尣等等,这样来逼近尣*。

若取求极小值的方向为F在尣(k=1,2,…)处的负梯度方向就是所谓最速下降法,然而理论和实际计算表明这个方法的收敛速度较慢,共轭梯度法则是在尣处的梯度方向r和这一步的修正方向p所构成的二维平面内,寻找使F减小最快的方向作为下一步的修正方向,即求极小值的方向p(其第一步仍取负梯度方向)。

计算公式为再逐次计算(k=1,2,…)。

可以证明当i≠j时,从而p,p形成一共轭向量组;r,r,…形成一正交向量组。

后者说明若没有舍入误差的话,至多n次迭代就可得到(1)的精确解。

然而在实际计算中,一般都有舍入误差,所以r,r,…并不真正互相正交,而尣尣,…等也只是逐步逼近(1)的真解,故一般将共轭梯度法作为迭代法来使用。

近来在解方程组(1)时,常将共轭梯度法同其他一些迭代法结合作用。

特别是对病态方程组这种方法往往能收到比较显著的效果。

其方法是选取一对称正定矩阵 B并进行三角分解,得B=LL T。

将方程组(1)化为hу=b, (3)此处y=l T尣,b=l-1ƒ,h=l-1Al-T,而。

再对(3)用共轭梯度法,计算公式为(k=0,1,2,…)适当选取B,当B 很接近A时,h的条件数较之A大大减小,从而可使共轭梯度法的收敛速度大为加快,由一些迭代法的矩阵分裂A=M -N,可选取M 为这里的B,例如对称超松弛迭代(SSOR),强隐式迭代(SIP)等,这类方法常称为广义共轭梯度法或预条件共轭梯度法,它也可用于解代数特征值问题。

势函数的一种二阶偏微分方程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7/34
n
n
13:31
定理4.10(初等变分原理) 设A =(aij )n×n为实对称正 n 定矩阵, x, b R 则 x是二次函数
1 f ( x ) ( Ax , x ) (b, x ) 2 的极小值点 x 是线性方程组 Ax = b 的解。 证明: 设 u 是 Ax = b的解 1 Au = b f ( u) ( Au, u) 2 对任意 x∈R n , 只须证明 f (x) – f (u) ≥ 0 1 1 f ( x ) f ( u) ( Ax , x ) (b, x ) ( Au, u) 2 2
13:31
Rosenbrock 方程 f(x1,x2)=(1-x1)2+100(x2-x12)2
13:31
Rosenbrock 方程 f(x1,x2)=(1-x1)2+100(x2-x12)2
13:31
Barzilai-Borwein方法
• 方向(最速下降-最好方向) (best rk) • 步长(上一次精确搜索步长) (best tk-1) • 最好的rk +上一步最好的 tk-1 最好
计算系数:
13:31
p b k T pk Apk
T k
22/34
—— 共轭向量组构造 ——
u1 v1
思路: Gram-Schmidt正交化过程
( u1 , v2 ) ( u1 , u1 ) ( u1 , v3 ) ( u1 , u1 )
u2 v 2 u3 v3
u1 u1
( u2 , v3 ) ( u2 , u2 )
u2
uk v k
ik
( ui , vk ) ( ui , ui )
ui
一系列最速下降方向rk b Ax ( k ) 改造成A共轭向量组
13:31
( Api , rk ) pk rk pi i k ( Api , pi )
g(t ) ( Ax
求解得 t0
13:31
( 0)
b, r0 ) t ( Ar0 , r0 ) 0
= ( r0 , r0) / (Ar0 , r0)
11/34
解对称正定方程组Ax = b 的最速下降算法:
第一步: 取初值 x(0)∈R(n) , >0,计算 r0 = b – Ax(0), k 0; 第二步: 计算 tk = (rk ,rk ) / (Ark , rk) x(k+1) = x(k) + tk rk , rk+1 = b – Ax(k+1)
j = –(Apj , rk ) / (Apj , pj ) , ( j = 0,· · · , k-1) pk = rk + ( 0 p0+ · · · + k 1 pk-1 )
13:31
k k+1,转第二步。
24/34
定理4.12 A 是 n 阶对称正定矩阵, p0, p1 ,· · · , pn-1 是关于 A 共轭的向量组, 任取 x(0)∈Rn , 计算
其中d k 为x x k 单位向量, t k 为步长。
(a , b) || a ||2 || b ||2 cos a , b , 其中 a , b 表示向量a和b的夹角。
最速下降方向: r = –f = b – Ax 从初值点 x(0) 出发,以负梯度方向 r 为搜索方向
选择步长 t0, 使 x(1) = x(0) + t0r 为 f(x) 极小值点
《数值分析》 Leabharlann 1 初等变分原理 最速下降法 共轭梯度法
数值试验算例
13:31
1/34
预备知识
n x , y R 设 , 则实数
( x , y)= xT y= x1y1+ …+xnyn ( x, x) ≥ 0, 当且仅当x=0时等号成立; ( x, y ) = ( y, x ); (kx+l y, z ) = k( x, z ) + l( y, z ); (x,y)=||x||2||y||2cos<x,y>。
13:31
5/34
单变量函数极值点(费马引理):
设x0是f ( x )的一个极值点的必要条件是f ( x0 )=0。
注释: 费马引理的价值在于将极值问题转化为 非线性方程的求解问题。
13:31
6/34
多变量函数极值点:
设x0是f ( x )的一个极值点的必要条件是 gradf ( x0 ) 0。
23/34
原始共轭梯度算法 第一步:取初值 x(0) =0, >0, 计算 r0 = b – Ax(0), 若 || r0||≤ 结束; 否则 p0r0, k 1, 转第二步;
第二步: 计算 k 1 = (pk-1,b ) / (Apk-1, pk-1)
x(k) = x(k-1) + k 1 pk-1 ; (张成k维子空间) 第三步: 如果 k = n, 则结束; 否则计算 rk = b – Ax(k), 转第四步; 第四步: 如果 ||rk|| ≤ , 则结束;否则计算
13:31
3/34
预备知识 梯度(多元函数的一阶导数信息):
f ( x ) gradf ( x )

f x1
,
f x2
,,
f xn

T
例如 f(x1,x2,x3)=x12x22x32
xf 2 x x 2 x 2 1 2 3 f 1 2 2 f ( x ) x2 = 2 x1 x2 x3 2 2 f x 2 x1 x2 x3 3
13:31
2/34
预备知识
矩阵A正定,如果对于任意非零向量x满足 xTAx>0.
设A是 n 阶对称正定阵
(Ax, x) ≥ 0, 当且仅当x=0时等号成立; ( Ax, y ) = ( x, Ay )= (A y, x )= ( y, Ax ); (kAx+lA y, z ) = k( Ax, z ) + l(Ay, z ).
13:31
1 ( A( x u), ( x u)) 0 2
8/34
设 u 是 f(x) 极小值点。取非零向量 x∈R n,
对任意 t∈R , 有
1 g( t ) f ( u tx ) ( A( u tx ), u tx ) ( b, u tx ) 2 2 t f ( u) t ( Au b, x ) ( Ax , x ) 2 当 t=0 时, g(0)= f(u)达到极小值, 所以 g′ (0) =0,即 ( Au – b , x ) = 0 Au – b = 0
全局思想: 在n维空间中,任意n个线性无关的向量构成n 维空间的基。换句话说,n维空间中任意向量均 可以由这组基线性表示。
13:31
19/34
The Best of the 20th Century: Editors Name Top 10 Algorithms, SIAM News
现代迭代方法: 子空间方法 共轭梯度法的关键是构造一组两两共 轭的方向(即张成n维空间的基)。巧妙的是 共轭方向可以由上次搜索方向和当前的梯 度方向线性组合产生。
1 f ( x ) ( Ax, x ) (b, x ) = 1 2 aij xi x j bi xi 2 i , j 1 i 1
n a1i xi b1 i 1 gradf Ax b 0 n a x b ni i n i 1
所以u 是方程组 Ax = b 的解。
13:31
9/34
最速下降方向
在 x 处,梯度方向是 f(x) 增长最快方向
负梯度方向是 f(x) 下降最快方向
f ( x ) f ( x k ) (gradf ( x k ))T ( x xk ) f ( x k ) t k (gradf ( x k ))T d k ,
第三步: k k+ 1, 如果 ||rk|| ≥ ,转第二步;
否则输出 x(k), 结束。
注释: 最速下降算法思想简单且容易实现,是 求解无约束优化问题的经典方法。 13:31
12/34
最好
+ 最好 =
最好 ?
• 方向(最速下降) (best rk) • 步长(精确搜索) (best tk) • x(k+1) = x(k) + tkrk 是否最好 ?
13:31
25/34
共轭梯度算法 (The Conjugate Gradient Algorithm) 1. Start:x0,r0:= b-Ax0, p0:= r0, k:=0.
2. Iterate: Until convergence do, (a) alpha := (rk,rk)/(Apk,pk) (b) xk+1 := xk + alpha* pk (c) rk+1 := rk – alpha*Apk (d) beta := (rk+1,rk+1)/(rk,rk) (e) pk+1 := rk+1 + beta*pk k:=k+1
13:31
10/34
精确搜索步长 取初值点 x(0), 取负梯度方向 r0 = b – A x(0) 求点: x(1) = x(0) + t0r0 使得
f (x
(0)
t 0 r0 ) min f ( x
t R
(0)
t r0 )
记 g(t ) f ( x( 0) ) t ( Ax ( 0) b, r0 ) t 2 ( Ar0 , r0 ) / 2 为选取最佳步长 t0,令
相关文档
最新文档