2.5 共轭梯度法

合集下载

共轭梯度法公式

共轭梯度法公式

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

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

共轭梯度法公式包括以下几个步骤:
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
共轭梯度法的迭代公式为:

共轭梯度法

共轭梯度法

最速下降法1.最速下降方向函数f(x)在点x处沿方向d的变化率可用方向导数来表示。

对于可微函数,方向导数等于梯度与方向的内积,即:Df(x;d) = ▽f(x)T d,因此,求函数f(x)在点x处的下降最快的方向,可归结为求解下列非线性规划:min ▽f(x)T ds.t. ||d|| ≤ 1当 d = -▽f(x) / ||▽f(x)||时等号成立。

因此,在点x处沿上式所定义的方向变化率最小,即负梯度方向为最速下降方向。

2.最速下降算法最速下降法的迭代公式是x(k+1) = x(k) + λk d(k) ,其中d(k)是从x(k)出发的搜索方向,这里取在x(k)处的最速下降方向,即d = -▽f(x(k)).λk是从x(k)出发沿方向d(k)进行一维搜索的步长,即λk满足f(x(k) + λk d(k)) = min f(x(k)+λd(k)) (λ≥0).计算步骤如下:(1)给定初点x(1) ∈ R n,允许误差ε> 0,置k = 1。

(2)计算搜索方向d = -▽f(x(k))。

(3)若||d(k)|| ≤ε,则停止计算;否则,从x(k)出发,沿d(k)进行一维搜索,求λk,使f(x(k) + λk d(k)) = min f(x(k)+λd(k)) (λ≥0).(4)令x(k+1) = x(k) + λk d(k),置k = k + 1,转步骤(2)。

共轭梯度法1.共轭方向无约束问题最优化方法的核心问题是选择搜索方向。

以正定二次函数为例,来观察两个方向关于矩阵A共轭的几何意义。

设有二次函数:f(x) = 1/2 (x - x*)T A(x - x*) ,其中A是n×n对称正定矩阵,x*是一个定点,函数f(x)的等值面1/2 (x - x*)T A(x - x*) = c是以x*为中心的椭球面,由于▽f(x*) = A(x - x*) = 0,A正定,因此x*是f(x)的极小点。

共轭梯度法

共轭梯度法
例 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
由于

25共轭梯度法

25共轭梯度法
设 p1 , p2 , , pk 是 Rn 中一组非零向量,如果它们两两关于A
共轭,即 piT Apj 0, i j ,i , j 1,2, ,k。 则称这组方向是关于A共轭的,也称它们是一组A共轭方向。
注:如 果A是 单 位 矩 阵 , 则
p1T I p2 0 p1T p2 0
p1 p2
§2.5 共轭梯度法
预备知识 最速下降法 共轭梯度法 数值试验算例
21:26
预备知识:内积的定义
I II
方程组问题: 极值问题:
Ax =
min
b
f
(x)
1
xT Ax
bT
x
xRn
设 x, y Rn , 记 ( x , y) = xT y
2
▪( x, y ) = ( y, x ); ▪( tx, y ) = t ( x, y); ▪( x+ y, z ) = ( x, z ) + ( y, z ); ▪( x, x) ≥ 0, 且( x, x) = 0 x = 0;
p(k 1) r (k 1) k p(k )
进行下一次迭代
例:用CG迭代法求解下列方程组: x(0) (0 0 0)T
2 0 1 x1
3
0 1 0 x2 1
1 0 2 x3
3
解: 易验证系数矩阵是对称正定的.
Step1 计算 p(0) r(0) b Ax(0) (3 1 3)T
0
x2 x1
x*
x3
注 最速下降方向反映了目 标函数的一种局部性质。它只是 局部目标函数值下降最快的方向。 最速下降法是线性收敛的算法。
f(x1,x2)=100x12+x22
最速下降法

共轭梯度法详细解读

共轭梯度法详细解读

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

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

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

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

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

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

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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
x
(0)
T
(r , r ) 19 0 ( 0) ( 0) ( Ar , r ) 55
( 0)
x
0r
(0)
19 (3 1 3)T 55
最好
+ 最好 =
最好 ?
• 方向(最速下降) (best rk) • 步长(精确搜索) (best k)
( k 1) (k ) (k ) x x r • 是否最好 ? k
The Best of the 20th Century: Editors Name Top 10 Algorithms, SIAM News
现代迭代方法: Krylov子空间方法
共轭梯度法的关键是构造一组两两共 轭的方向(即一组线性无关向量)。巧妙的是 , 共轭方向可以由上次搜索方向和当前的梯 度方向之组合来产生。
的几何意义
2
x

p(1)
r (1)
x
(1)
p
(0)
此时 ( x ) 在 2 上可表示为
H x (1) r (1) p(0)
( , )
T 1 (1) (1) (0) (1) (1) (0) x r p A x r p 2 T (1) (1) (0) b x r p
Hestenes和Stiefle(1952)提出来的,用于解正定系数矩阵的 线性方程组, Fletcher和Reeves(1964)首先提出了解非线性最优化问题的 共轭梯度法。 由于共轭梯度法不需要矩阵存储,且有较快的收敛速度和二次 终止性等优点,现在共轭梯度法已经广泛地应用与实际问题, 已经成为求解大型稀疏线性方程组最受欢迎的一类方法。
19:41
(k ) x 则由前述最速下降算法产生的序列 满足
Th

A 的特征值为 0 1
n ,
x
其中
(k )

x
A
x A b。
1
n 1 n 1
k
x
(0)
x
A
上述定理说明,当 1
n时最速下降法收敛非常慢。
锯齿现象
H ( x) x Ax 2b x aij xi x j 2 b j x j
T T
n
n
n
i 1 j 1
j 1
的极小值点 x 是线性方程组 Ax = b 的解。
19:41

H ( x ) min H ( x ), 则由极值的必要条件得 n
xR
H ( x ) 2 Ax 2b 0.
d (r , r ) ( 0) ( 0) H(x r ) 0 0 ( 0) ( 0) d ( Ar , r )
(0) (0)
d ( 0) ( 0) ( 0) ( 0) 注意到 2 ( x r ) 2( Ar , r ) 0 d
2
min ( x

( 0)
r 0 ,则 x 就是方程组的解; (0) (0) 如果 r 0 ,则沿 r 方向进行一维极小搜索: ( 0) ( 0) 求 0 使得 H ( x r ) 达到最小值, 则
如果
(0)
(0)
x x
(1)
( 0)
0r .
( 0)
H ( x ( 0 ) r ( 0 ) )= 1 (0) ( x r ( 0 ) )T A( x ( 0 ) r ( 0 ) ) bT ( x ( 0 ) r ( 0 ) ) 2
Barzilai-Borwein方法
局部思想: 最速下降法思想简单,但是收敛速度慢。本 质上是因为负梯度方向函数下降快是局部性质。 全局思想: N 维空间的任意向量可以由N个线性无关 的向量线性表示。
19:41
3、共轭梯度法/*Conjugate-Gradient Method*/
共轭梯度法不仅是解决大型线性方程组最有用的方法之一, 也是解大型非线性最优化最有效的算法之一。
(0)
下面以 x
为新的迭代值,重复上述过程即可
共轭梯度法的算法
T
1T
设 p1 , p2 ,, pk 是 Rn 中一组非零向量,如果 它们两两关于 A
则称这组方向是关于 A共轭的,也称它们是一 组A共轭方向。
注:如果A是单位矩阵,则
1T 2
p I p 0 p p2 0
1T
p1 p2
共轭是正交的推广!!
共轭梯度法 选取初始向量
x
设A是 n 阶对称正定阵 ( Ax, y ) = ( x, Ay ) ; ( Ax,x ) ≥0, 且( Ax, x) = 0 x = 0
2/16
预备知识
梯度:
f ( x ) gradf ( x )
xf f1 f ( x ) x 2 f x 3
§2.5 共轭梯度法
预备知识
最速下降法 共轭梯度法
数值试验算例
19:41
预备知识:内积的定义 I 方程组问题: Ax = b 1 T T m in f ( x ) x Ax b x II 极值问题: xR n 2 n 设 x , y R , 记 ( x , y) = xT y ( x, y ) = ( y, x ); ( tx, y ) = t ( x, y); ( x+ y, z ) = ( x, z ) + ( y, z ); ( x, x) ≥ 0, 且( x, x) = 0 x = 0;
lim x ( k ) x *。
k
从瞎子下山到最优化方法
Science of Better
19:41
瞎子与计算机
• 瞎子: 能感觉到脚下的坡度(这是海拔函数 在当前点的梯度值),但不知道山上其它点 的任何情况 • 计算机: 计算目标函数在该点的信息(如函 数值和梯度值), 但不知道其它点的信息
19:41
2.5.2 最速下降法
几何意义:
等值线
x
(0)


x

思 想
最速下降法是指每次沿着函数值 下降最快的方向寻找最小值点。
而函数值下降最快的方向是函数的负梯度方向
最速下降法实现过程: (0) 选取初始向量 x ,由二次函数 H ( x ) 的基本性质 ( 0) (0) (0) H ( x ) b Ax r
设x0是f ( x )的一个极值点, 且f ( x )在x0处导数存在, 则 f ( x0 )=0
注释: 费马引理的价值在于将极值问题转化为 方程的求解问题。
19:41
初等变分原理 设 Ax b, 其中 A (aij ) Rnn为对称正定矩阵, T x ( x1 , , xn ) , b (b1 , , bn )T ; x* A1b.
在极小点附近,目标函数可以用二次函数近似,其等值面近似
椭球面。
x2 x3

x*
x1

最速下降方向反映了目 标函数的一种局部性质 。 它只是
局部目标函数值下降最快的方向。 最速下降法是线性收敛的算法。
f(x1,x2)=100x12+x22
19:41
最速下降法
f(x1,x2)=100x12+x22
19:41

r
( k )T
(k )
,停止
收敛速度?????
缺陷:收敛速度慢!
否则,进行下一次循环
例:用最速下降法求解方程组:
x
( 0)
(0 0 0)
T
2 0
0
1
0
1
0
计算
( 0)
x1 x2
3
1
3
( 0)
(1)
1
Step1
2
x3
r
( 0)
解: 易验证系数矩阵是对称正定的.
b Ax
(3 1 3)


Ax b
该性质说明:求解方程组的解等价于求上述 二次函数的最小值。
(k ) { x } 使得 迭代法构造思想:构造
H ( x( 0) ) H ( x(1) )
k
H ( x( k 1) ) H ( x( k ) )
H ( x* )
且 lim H ( x ( k ) ) H ( x* ),
由极值的必要条件得
(1)T (1) (1)T (0) (1)T (1) r Ar r Ap r r 0 r (1)T Ap(0) p(0)T Ap(0) 0
x x 0 r
(1)
(1)
0 p
思 想
共轭梯度法将求解方程组问题等价转化为一个 二次 泛函的极值问题。
一、与方程组等价的二次泛函问题 定义二次函数
T
:R R
n
H ( x) x Ax 2b x aij xi x j 2 b j x j
T
n
n
n
i 1 j 1
j 1
定理(初等变分原理) 设A =(aij )n×n为实对称正定 n 矩阵,x, b R ,则 x是二次函数
pk+1 := rk+1 + tau*pk
19:41
共轭方向和共轭方向法
若有
共轭,即
n 1 2 设 A 是 n n 的对称正定矩阵,对于 R 中的两个非零向量 p 和 p , 定义
p Ap 2 0 ,则称 p1和p 2关于A共轭。
p i Ap j 0 , i j , i , j 1 , 2 ,, k 。
r ) (x
( 0)
相关文档
最新文档