数值实验一.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
最优化数值实验报告一 实验目的: 1,掌握对无约束最优化问题的各种解法,主要有最速下降法,牛顿法,共轭梯度法,变尺度法(DFP和BFGS法),非线性最小二乘法。 2,用MATLAB变成求解问题,并对各种方法的计算过程和结果进行分析。 实验原理:(略) 实验内容: (结合了《最优化练习题017》中的第2题进行分析。) 求解下面的方程组 问题分析: 对于上述问题,可以用两大类的方法求解。其一是将上述方程组转化为无约束的最小二乘问题,并非别用最速下降法,牛顿法,共轭梯度法,变尺度法,非线性最小二乘法求解。其二是将上述方程组转化为有约束的问题,并用惩罚函数法和广义乘子法进行求解。下面我们将上述问题转化为无约束的问题进行求解。 将上述问题转化为最小二乘问题即是对上述问题进行转化,而变成平方和的形式,我们可以将原问题转为求的无约束优化问题,其中如下, 下面我们借助MATLAB用不同的优化方法进行分析求解。 另外,在下面的的搜索算法中,当需要做一维搜索时,都是用进退法和黄金分割法来实现的,其中进退法确定一个单峰区间,而黄金分割法则进行精确的一维搜索。(分别对应程序中的jintuifa.m和gold.m,具体程序见附录)。值得指出的是,为了保证能够使黄金分割法正常工作,进退法中步长选取显得很是重要,因为黄金分割法主要是针对单峰区间来进行搜索的。步长选择的太大,难以确定单峰区间;步长选择的太小,计算量就比较大,迭代的较慢。下面实验中选择的步长为0.0125。 1,最速下降法 最速下降法,通俗点来说,就是选取一个目标函数值下降最快的方法,以利于尽快地达到极小点。最速下降法的关键就是最速下降方向的选取,实际上我们知道负梯度方向为最速下降方向。然后我们进行一维搜索,直到满足精度要求,则停止计算。 实验中,我们一律取初始点为(0,0,0),当搜索方向d满足时,停止搜索,其中= 。 程序: syms x1 x2 x3 r; f=(3*x1-cos(x2*x3)-1/2)^2+(x1^2-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-6 g=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; k x0 min=subs(f,[x1 x2 x3],x0) 结果: 由最速下降法求得的最优解为(0.4996,-0.0900,-0.5259),并且迭代次数为2129,最优值2.4829e-014,显然迭代的次数太多,花费的时间太多,所以效率并不高。 究其原因,应该是锯齿现象的影响。也就是说,虽然从局部看,最速下降算法是函数值下降最快的方向,但从全局看,由于锯齿现象,使得向极点移动的过程中要总弯路,因此收敛速度变慢。 2,牛顿法 牛顿法是通过x(k)和在这一点的目标函数的梯度和HESSE矩阵的逆来得到后续点x(k+1),在适当的条件下,这个序列x(k)将收敛。 同样,在实验中我们取初始点(0,0,0),当,停止寻优,其中= 。 程序: syms x1 x2 x3; f=(3*x1-cos(x2*x3)-1/2)^2+(x1^2-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

文档评论(0)

kaiss + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档