MATLAB共轭梯度发.doc_第1页
MATLAB共轭梯度发.doc_第2页
MATLAB共轭梯度发.doc_第3页
MATLAB共轭梯度发.doc_第4页
MATLAB共轭梯度发.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

最优化方法 学 院: 专业班级: 学生姓名: 学 号: 共轭梯度法一 实验目的:(1).熟悉使用共轭梯度法求解无约束非线性规划问题的原理;(2).在掌握原理的基础上熟练运用此方法解决问题;(3).学会利用计算机语言编写程序来辅助解决数学问题;(4).解决问题的同时分析问题,力求达到理论与实践的相统一;(5).编写规范的实验报告.二 实验原理:共轭梯度法为求解线性方程组而提出。后来,人们把这种方法用于求解无约束最优化问题,使之成为一种重要的最优化方法。共轭梯度法的基本思想是把共轭性与最速下降方法相结合,利用已知点处的梯度构造一组共轭方向,并沿这组方向进行搜索,求出目标函数的极小点。根据共轭方向的基本性质,这种方法具有二次终止性。在各种优化算法中,共轭梯度法是非常重要的一种。其优点是所需存储量小,具有步收敛性,稳定性高,而且不需要任何外来参数。共轭方向无约束最优化方法的核心问题是选择搜索方向.在本次实验中,我们运用基于共轭方向的一种算法共轭梯度法三算法流程图:给定初始点(0,0,0),k=1,最大迭代次数n确定搜索方向进退法确定搜索区间分割法确定最优步长四实验结果:(1).实验函数f=(3*x1-cos(x2*x3)-1/2)2+(x12-81*(x2+0.1)+sin(x3)+1.06)2+(exp(-x1*x2)+20*x3+1/3*(10*3.14159-3)2;(2).源程序:syms x1 x2 x3 r;f=(3*x1-cos(x2*x3)-1/2)2+(x12-81*(x2+0.1)+sin(x3)+1.06)2+(exp(-x1*x2)+20*x3+1/3*(10*3.14159-3)2;x=x1,x2,x3;df=jacobian(f,x);df=df.;error=0.000001;x0=0,0,0;g1=subs(df,x,x0);k=0;while(norm(g1)error) if k=0 d=-g1; else bta=g1*g1/(g0*g0); d=-g1+bta*d0; end y=subs(f,x,x0+r*d); result=jintuifa(y,r); result2=gold(y,r,result); step=result2; x0=x0+step*d; g0=g1;g1=subs(df,x,x0); d0=d;k=k+1;end;kx0 min=subs(f,x1 x2 x3,x0)(3).实验结果k = 26x0 = 0.4996 -0.0900 -0.5259min = 1.1496e-018(4).结果分析:由FR法得到的最优解为(0.4996, -0.0900, -0.5259),迭代的次数为32,由于精度的降低(= ),实际证明对结果也有一定的影响。在本次实验中取得的最优值为1.1496e-018,而前面牛顿法迭代6次算出的最优值为8.0119e-031,效果要好了很多。所以说,收敛速度相对比较慢,应该是它的一个缺点。五 实验心得:在本次试验中,主要用到的是负梯度方向的求解,还有最优步长的求解(导数求解),以及MATLAB中功能的强大,但是同时自己的操作有不是令自己很满意,在过程中屡次找不到错误所在,最后才发现都是一些细节问题,让我懂得以后在学习中要更加严谨和认真。我觉得语言这东西,平时就得多敲敲代码,多练练,自己差错进行修改,会有一定的提高的!最优化之牛顿法一 实验目的(1).熟悉使用牛顿法求解无约束非线性规划问题的原理;(2).在掌握原理思想的基础上熟练运用此方法解决问题;(3).学会利用计算机语言MATLAB编写程序来辅助解决数学问题;(4).解决问题的同时分析问题,力求达到理论与实践的相统一;(5).完成编写规范的实验报告.二 实验原理算法思想牛顿法是通过x(k)和在这一点的目标函数的梯度和HESSE矩阵的逆来得到后续点x(k+1),在适当的条件下,这个序列x(k)将收敛。 同样,在实验中我们取初始点(0,0,0),当,停止寻优,其中= 。牛顿法是求解非线性方程的常用数值算法,不仅有几何直观性,而且还有二阶收敛性。三 算法流程图给定初始点(0,0,0),k=1,最大迭代次数n通过x(k)续点x(k+1)停止寻优= 四 实验结果(1).实验函数f=(3*x1-cos(x2*x3)-1/2)2+(x12-81*(x2+0.1)+sin(x3)+1.06)2+(exp(-x1*x2)+20*x3+1/3*(10*3.14159-3)2;(2).源程序syms x1 x2 x3;f=(3*x1-cos(x2*x3)-1/2)2+(x12-81*(x2+0.1)+sin(x3)+1.06)2+(exp(-x1*x2)+20*x3+1/3*(10*3.14159-3)2;x=x1 x2 x3;x0=0 0 0;error=1e-6;t=1;m=0;while (norm(t)error) a=subs(diff(f,x1),x,x0);b=subs(diff(f,x2),x,x0);c=subs(diff(f,x3),x,x0); df=a;b;c; d=subs(diff(f,x1,2),x,x0);h=subs(diff(f,x2,2),x,x0); l=subs(diff(f,x3,2),x,x0);e=subs(diff(diff(f,x1),x2),x,x0); f1=subs(diff(diff(f,x1),x3),x,x0);g=subs(diff(diff(f,x2),x1),x,x0); i=subs(diff(diff(f,x2),x3),x,x0);j=subs(diff(diff(f,x3),x1),x,x0); k=subs(diff(diff(f,x3),x2),x,x0); df2=d e f1;g h i;j k l;%矩阵 df=double(df);df2=double(df2); if(det(df2)=0) break; else xx=x0-inv(df2)*df; end t=xx-x0;x0=xx;m=m+1;endmx0 min=subs(f,x1 x2 x3,x0)(3).实验结果x0 = 0.4996 -0.0900 -0.5259min = 8.0119e-031(4).结果分析:由牛顿法求得的最优解为(0.4996,-0.0900,-0.5259),并且迭代次数为6,显然牛顿法的收敛速度很快,最优值为8.0119e-031。但是牛顿法由于要求HESSE矩阵的逆,而计算中并不能保证HESSE矩阵总是可逆的,所以,当初始点选取一定值时,就会出现问题,比如在本次实验中取初始点为(100,100,100),就出现了问题,这也是牛顿法最主要的缺陷。同时它也不能保证每次的搜索方向为下降方向。收敛速度快,初始点要选在最优解附近。五 实验心得:通过了解知道牛顿法是经典的算法,比一般优化方法的优势之处在于它是一种具有二阶敛速的算法。在合适的条件下,计算速度很快。但牛顿最优潮流的难点是如何确定起作用的不等式约束集。用牛顿法编写完成上面的程序,让我更深的体会到了算法之间的差别思想,各有所长。同时呢,我刚开始编写因为理解的不够深刻,导致算法思想的混乱,然后通过查资料,才有了更多的理解,也知道了一般情况下什么时候用牛顿法编程。最速下降法一 实验目的对所学习的最优化方法之最速下降法进行试验实践,更深层的体会该算法的编程思想,然后熟练掌握一些相关的方法,通过运用原理去操作相关的现实问题提高自己的编程能力。对题目的要求一步一步来完成,达到题目要求的系统性。做好自己的实验报告。二 实验原理(1).算法思想最速下降法,通俗点来说,就是选取一个目标函数值下降最快的方法,以利于尽快地达到极小点。最速下降法的关键就是最速下降方向的选取,实际上我们知道负梯度方向为最速下降方向。然后我们进行一维搜索,直到满足精度要求,则停止计算。(2).算法步骤实验中,我们一律取初始点为(0,0,0),当搜索方向d满足时,停止搜索,其中= 。三 算法流程图四实验结果(1).实验函数f=(3*x1-cos(x2*x3)-1/2)2+(x12-81*(x2+0.1)+sin(x3)+1.06)2+(exp(-x1*x2)+20*x3+1/3*(10*3.14159-3)2;(2).源程序syms x1 x2 x3 r;f=(3*x1-cos(x2*x3)-1/2)2+(x12-81*(x2+0.1)+sin(x3)+1.06)2+(exp(-x1*x2)+20*x3+1/3*(10*3.14159-3)2;df=(jacobian(f,x1 x2 x3).;%对f求导x0=0 0 0;error=1e-6; %取初始点为(0,0,0);允许误差为1e-6g=subs(df,x1 x2 x3,x0.);g=double(g);k=0;while(norm(g)error) d=-g; %确定最优搜索方向 z=subs(f,x1 x2 x3,(x0+r*d).); result=jintuifa(z,r); %确定搜索区间 result2=gold(z,r,result); %黄金分割法确定最优步长 step=result2(1); x0=x0+step*d; g=subs(df,x1 x2 x3,x0(1,1),x0(2,1),x0(3,1); g=double(g); k=k+1;end;kx0 min=subs(f,x1 x2 x3,x0)(3).实验结果k = 26x0 = 0.4996 -0.0900 -0.5259min = 2.4829e-014(4).结果分析:由最速下降法求得的最优解为(0.4996,-0.0900,-0.5259),并且迭代次数为2129,最优值2.4829e-014,显然迭代的次数太多,花费的时间太多,所以效率并不高。究其原因,应该是锯齿现象的影响。也就是说,虽然从局部看,最速下降算法是函数值下降最快的方向,但从全局看,由于锯齿现象,使得向极点移

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论