matlab编程实现求解最优解.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
matlab编程实现求解最优解

《现代设计方法》课程 关于黄金分割法和二次插值法的Matlab语言实现 在《现代设计方法》的第二章优化设计方法中有关一维搜索的最优化方法的一节里,我们学习了黄金非分割法和二次插值法。它们都是建立在搜索区间的优先确定基础上实现的。 为了便于方便执行和比较,我将两种方法都写进了一个程序之内,以选择的方式实现执行其中一个。下面以《现代设计方法》课后习题为例。见课本70页,第2—7题。原题如下: 求函数f(x)=3*x^2+6*x+4的最优点,已知单谷区间为[-3,4],一维搜索精度为0.4。 先建立函数f(x),f(x)=3*x^2+6*x+4。函数文件保存为:lee.m 源代码为:function y=lee(x) y=3*x^2+6*x+4; 2、程序主代码如下,该函数文件保存为:ll.m clear; a=input(请输入初始点); b=input(请输入初始步长); Y1=lee(a);Y2=lee(a+b); if Y1Y2 %Y1Y2的情况 k=2; Y3=lee(a+2*b); while Y2=Y3 %直到满足“大,小,大”为止 k=k+1; Y3=lee(a+k*b); end A=a+b;B=a+k*b; elseif Y1Y2 %Y1Y2的情况 k=1;Y3=lee(a-k*b); while Y1=Y3 %直到满足“大,小,大”为止 k=k+1; Y3=lee(a-k*b); end A=a-k*b;B=a; else A=a;B=a+b; %Y1=Y2的情况 end disp([初始搜索区间为,num2str([A,B])])%输出符合的区间 xuanze=input(二次插值法输入0,黄金分割法输入1);%选择搜索方式 T=input(选定一维搜索精度); if xuanze==1 while B-AT %一维搜索法使精度符合要求 C=A+0.382*(B-A);D=A+0.618*(B-A); %黄金分割法选点 if lee(C)=lee(D); %缩小区间 A=C; else B=D; end end else while B-AT %二次插值法是精度符合要求 C=(A+B)/2; W=[1,A,A^2;1,B,B^2;1,C,C^2]; w=[lee(A);lee(B);lee(C)]; x=W\w; %求线性方程组解,求拟合曲线 xx=perms(x); for n=1:(factorial(3)); %使解得值与a0,a1,a2一一对应 t=1+(n-1)*3; a0=xx(t);a1=xx(t+1);a2=xx(t+2); if a0+a1*A+a2*A^2~=lee(A)||a0+a1*B+a2*B^2~=lee(B)... ||a0+a1*C+a2*C^2~=lee(C); continue end break end xp=-a1/(2*a2); %拟合直线的最低点 if lee(C)=lee(xp); %缩小区间 if C=xp; %xp与C大小不定,导致缩小方式不同 B=C; else A=C; end else if C=xp; A=xp; else B=xp; end end end end X=(A+B)/2;Y=lee(X); disp([极小值点为,num2str(X),极值为,num2str(Y)]);%输出结果 3、由于我编的程序,其搜索区间是自定的。不需要它提供的范围,只需要给出初始点,步长,搜索精度并确定方法即可。因此假设初始值为-5,步长为0.01,已知搜索精度为0.4。执行过程中遇到方法选择时二次插值法输入0,一维搜索法输

文档评论(0)

185****7617 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档