首页 用MATLAB实现最速下降法,牛顿法和共轭梯度法求解实例

用MATLAB实现最速下降法,牛顿法和共轭梯度法求解实例

举报
开通vip

用MATLAB实现最速下降法,牛顿法和共轭梯度法求解实例 实验的题目和要求 1、 所属课程名称: 最优化方法 2、 实验日期: 2010年5月10日~2010年5月15日 3、 实验目的 掌握最速下降法,牛顿法和共轭梯度法的算法思想,并能上机编程实现相应的算法。 二、实验要求 用MATLAB实现最速下降法,牛顿法和共轭梯度法求解实例。 四、实验原理 最速下降法是以负梯度方向最为下降方向的极小化算法,相邻两次的搜索方向是互相直交的。牛顿法是利用目标函数 在迭代点 处的Taylor展开式作为模型函数,并利用这个二次...

用MATLAB实现最速下降法,牛顿法和共轭梯度法求解实例
实验的题目和要求 1、 所属课程名称: 最优化方法 2、 实验日期: 2010年5月10日~2010年5月15日 3、 实验目的 掌握最速下降法,牛顿法和共轭梯度法的算法思想,并能上机编程实现相应的算法。 二、实验要求 用MATLAB实现最速下降法,牛顿法和共轭梯度法求解实例。 四、实验原理 最速下降法是以负梯度方向最为下降方向的极小化算法,相邻两次的搜索方向是互相直交的。牛顿法是利用目标函数 在迭代点 处的Taylor展开式作为模型函数,并利用这个二次模型函数的极小点序列去逼近目标函数的极小点。共轭梯度法它的每一个搜索方向是互相共轭的,而这些搜索方向 仅仅是负梯度方向 与上一次接待的搜索方向 的组合。 五.运行及结果如下: 最速下降法: 题目:f=(x-2)^2+(y-4)^2 M文件: function [R,n]=steel(x0,y0,eps) syms x; syms y; f=(x-2)^2+(y-4)^2; v=[x,y]; j=jacobian(f,v); T=[subs(j(1),x,x0),subs(j(2),y,y0)]; temp=sqrt((T(1))^2+(T(2))^2); x1=x0;y1=y0; n=0; syms kk; while (temp>eps) d=-T; f1=x1+kk*d(1);f2=y1+kk*d(2); fT=[subs(j(1),x,f1),subs(j(2),y,f2)]; fun=sqrt((fT(1))^2+(fT(2))^2); Mini=Gold(fun,0,1,0.00001); x0=x1+Mini*d(1);y0=y1+Mini*d(2); T=[subs(j(1),x,x0),subs(j(2),y,y0)]; temp=sqrt((T(1))^2+(T(2))^2); x1=x0;y1=y0; n=n+1; end R=[x0,y0] 调用黄金分割法: M文件: function Mini=Gold(f,a0,b0,eps) syms x;format long; syms kk; u=a0+0.382*(b0-a0); v=a0+0.618*(b0-a0); k=0; a=a0;b=b0; array(k+1,1)=a;array(k+1,2)=b; while((b-a)/(b0-a0)>=eps) Fu=subs(f,kk,u); Fv=subs(f,kk,v); if(Fu<=Fv) b=v; v=u; u=a+0.382*(b-a); k=k+1; elseif(Fu>Fv) a=u; u=v; v=a+0.618*(b-a); k=k+1; end array(k+1,1)=a;array(k+1,2)=b; end Mini=(a+b)/2; 输入: [R,n]=steel(0,1,0.0001) R = 1.99999413667642 3.99999120501463 R = 1.99999413667642 3.99999120501463 n = 1 牛顿法: 题目:f=(x-2)^2+(y-4)^2 M文件: syms x1 x2; f=(x1-2)^2+(x2-4)^2; v=[x1,x2]; df=jacobian(f,v); df=df.'; G=jacobian(df,v); epson=1e-12;x0=[0,0]';g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});G1=subs(G,{x1,x2},{x0(1,1),x0(2,1)});k=0;mul_count=0;sum_count=0; mul_count=mul_count+12;sum_count=sum_count+6; while(norm(g1)>epson) p=-G1\g1; x0=x0+p; g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)}); G1=subs(G,{x1,x2},{x0(1,1),x0(2,1)}); k=k+1; mul_count=mul_count+16;sum_count=sum_count+11; end; k x0 mul_count sum_count 结果::k = 1 x0 = 2 4 mul_count = 28 sum_count = 17 共轭梯度法: 题目:f=(x-2)^2+(y-4)^2 M文件: function f=conjugate_grad_2d(x0,t) x=x0; syms xi yi a f=(xi-2)^2+(yi-4)^2; fx=diff(f,xi); fy=diff(f,yi); fx=subs(fx,{xi,yi},x0); fy=subs(fy,{xi,yi},x0); fi=[fx,fy]; count=0; while double(sqrt(fx^2+fy^2))>t s=-fi; if count<=0 s=-fi; else s=s1; end x=x+a*s; f=subs(f,{xi,yi},x); f1=diff(f); f1=solve(f1); if f1~=0 ai=double(f1); else break x,f=subs(f,{xi,yi},x),count end x=subs(x,a,ai); f=xi-xi^2+2*xi*yi+yi^2; fxi=diff(f,xi); fyi=diff(f,yi); fxi=subs(fxi,{xi,yi},x); fyi=subs(fyi,{xi,yi},x); fii=[fxi,fyi]; d=(fxi^2+fyi^2)/(fx^2+fy^2); s1=-fii+d*s; count=count+1; fx=fxi; fy=fyi; end x,f=subs(f,{xi,yi},x),count 输入:conjugate_grad_2d([0,0],0.0001) 结果: x = 0.24998825499785 -0.24999998741273 f = 0.12499999986176 count = 10 ans = 0.12499999986176 6、 结论如下: 最速下降法越接近极小值,步长越小,前进越慢。牛顿法要求二阶导数,计算量很大。共轭梯度法是介于最速下降和牛顿法之间的算法,克服了最速下降法的收敛速度慢的缺点,又避免了牛顿法的大计算量。 _1234567891.unknown _1234567893.unknown _1234567894.unknown _1234567892.unknown _1234567890.unknown
本文档为【用MATLAB实现最速下降法,牛顿法和共轭梯度法求解实例】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_031476
暂无简介~
格式:doc
大小:45KB
软件:Word
页数:5
分类:
上传时间:2012-04-28
浏览量:196