2.5 共轭梯度法
- 格式:ppt
- 大小:2.10 MB
- 文档页数:42
共轭梯度法公式
共轭梯度法是一种用于求解线性方程组的迭代算法。
其主要思想是通过利用前一次迭代的信息来加速当前迭代的速度,从而减少迭代次数和计算量。
共轭梯度法公式包括以下几个步骤:
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.最速下降方向函数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)的极小点。
共轭梯度法详细解读
嘿,朋友们!今天咱就来好好唠唠共轭梯度法。
你想想啊,咱平常解决问题就像走迷宫似的,有时候会在里面转来转去找不到出路,而共轭梯度法呀,就像是在迷宫里给咱指了一条明路!比如说你想找一条最快从山这头到那头的路,共轭梯度法就能帮上大忙啦!
它可不是随随便便就出现的哦,那可是数学家们绞尽脑汁研究出来的宝贝呢!就好比一个超级英雄,专门来打救我们这些在复杂问题里苦苦挣扎的人。
在实际应用里,它可厉害着呢!比如说在工程计算中,要设计一个最完美的结构,共轭梯度法就能迅速算出最优解。
哇塞,这不就相当于有个超厉害的军师在帮咱出谋划策嘛!
你再想想,我们日常生活中很多事情都可以类比成用共轭梯度法来解决问题呀。
比如说你要规划一次旅行,怎么安排路线最合理,不就是在找那个最优的旅行路径嘛,这时候共轭梯度法的思路就能派上用场啦!它就像一个隐藏在幕后的高手,默默地为我们排忧解难。
而且哦,一旦你掌握了它,那种感觉就像是你突然掌握了一种绝世武功,能在各种难题面前游刃有余。
这可太酷了吧!
哎呀呀,共轭梯度法真的是太神奇、太有用啦!大家可一定要好好去了
解它、运用它呀,你绝对会被它的魅力折服的!相信我,没错的!。
共轭梯度法及其基本性质预备知识定义1设吐竺是对称正定矩阵。
称回凹是A-共轭的,是指況如=0, Pl Ap^ > o p p^Apy >0性质1设有怡久…化⑶s )l 是彼此共轭的即维向量,即则鬥心諾一定是线性无关的[证明]若有一组数1% ■…心討满足则对一切P=°」旳一定有是线性无关的.性质2 设向量国"弧…厨諾是线性无关的向量组,则可通过它们的线性组合得出一组向量 冋丿“…护討,而|円貯,…申詞是两两共轭的.[证明]我们用构造法来证实上面的结论.T_注意到腕弘由此得出:Cfj = O.j即所有的区1=0 .因此,%珂十…+ %P 純^ = Pi + ・・・ +=应住;^Pi r容易验证:列…&胡符合性质2的要求.性质3设1%几…护』是两两A —共轭的,怜已必 是任意指定的向量,那么 从囲出发,逐次沿方向 应1「…化|搜索求际/加-能旬的极小值,所得序列k"i ,满足:[证明]由下山算法可知,从 二出发,沿2方向搜索,获得从而取 Pl 二 El +%弘Jt-iZ =心+乞碍耳,id性质4设 兀乃;匚几-』是两两A 共轭的,则从任意指定的注門出发,依次 沿弘山「'"MI 搜索,所得序列kJz 满足:(1)(2) 或,其中曰是方程组(5.1.1)的解.[证明](1)是性质3的直接推论,显然成立.(2)由于是两两A 共轭的,故血“,…申”11是线性无关的.所 以对于向量卜一咄可用…申』线性表出,即存在一组数Rof ■经J 使,得出F] P\由于于是,再由得出M-l木=心+乞爲P于是 ---------- 旦 ---- ,与得出 也旦一样地,我们可以陆续得出:对比区]和的表达式可知,I©二兀证明完毕性质4是性质3的直接推论.但它给出了一种求(5 . 1. 1)的算法,这种 算法称之为共轭方向法•结合性质2,我们可以得到如下的性质5.性质5设 陽卧…是丽上的一组线性无关的向量,则从任意指定的S2:计算显然:根据性质4可知,不论采用什么方法,只要能够构造 个两两A 共轭的向量作为搜索方向,从任一初始向量出发,依次沿两两A 共轭的方向进行搜索, 经門 步迭代后,便可得到正定方程组匡可的解.nM-l -T A久一1如一,得出 心二 U+ 计算 出发,按以下迭代产生的序列®二环+%肌.-------------------------------------------------- ?,得出应二咼+冏輕I;如此进行下去,直到第n 步:(521 )共轭梯度法算法步骤如下:[预置步]任意 如三兰I ,计算并令取:肚込J 指定算法终 止常数置肛=D |,讲入主步;[主步](1)如果%终止算法,输出丈列;否则下行;上rL^Apj, r(3) 计算:(4) 置出弓丘可,转入(1)定理5 .2.1由共轭梯度法得到的向量组丄和二具有如下性质:[证明]用归纳法•当时,因为(2)计算:Po 二巾” h 二円二G+A J F U---------------------------------------------------------------------------------------------------------------------------------------------------- ?卩詁=耐广1 = M (% - %期0)=币6 —Cfp;山刊=5= 01 +几巩)孑禺=X占心-因此定理的结论成立.现在假设定理的结论对冋成立,我们来证明其对曰也成立.利用等式n】二G 一及归纳假设,有P訂如二於%- %云旳\二0 OWi三上1.又由于故定理的结论(1)对比+ 1|成立.利用归纳假定有如毗•・・・/』=零诚% TvPtK而由(1)所证知,二与上述子空间正交,从而有定理的结论(2)对 __ 也成立.利用等式p如二厂屏1+久刃|和二疗.丐母)并利用归纳法假定和(2)所证之结论,就有=丄咕仮一加)+屁分如「心CU…上-1成立;而由円的定义得这样,定理的结论(3)对U也成立.由归纳法假定知进而再注意到(2)和(3)所证的结论表明,向量组hf 宀j和”"戸“1'"险1 都是线性无关的,因此定理的结论(4)对匸U同样成立.定理证毕定理521表明,向量「「引和|弘,W「珂|分别是Krylov子空间空如匕也的正交基和共轭正交基.由此可见,共轭梯度法最多明步便可得到方程组的解二.因此,理论上来讲,共轭梯度法是直接法.定理5.2.2 用共轭梯度法计算得到的近似解U满足义的Krylov子空间.证明注意到:”⑶斗疋也=広一忌)。