matlab编程实现求解最优解.doc_第1页
matlab编程实现求解最优解.doc_第2页
matlab编程实现求解最优解.doc_第3页
matlab编程实现求解最优解.doc_第4页
全文预览已结束

下载本文档

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

文档简介

现代设计方法课程关于黄金分割法和二次插值法的Matlab语言实现 在现代设计方法的第二章优化设计方法中有关一维搜索的最优化方法的一节里,我们学习了黄金非分割法和二次插值法。它们都是建立在搜索区间的优先确定基础上实现的。 为了便于方便执行和比较,我将两种方法都写进了一个程序之内,以选择的方式实现执行其中一个。下面以现代设计方法课后习题为例。见课本70页,第27题。原题如下:求函数f(x)=3*x2+6*x+4的最优点,已知单谷区间为-3,4,一维搜索精度为0.4。1、 先建立函数f(x),f(x)=3*x2+6*x+4。函数文件保存为:lee.m 源代码为:function y=lee(x) y=3*x2+6*x+4;2、程序主代码如下,该函数文件保存为:ll.mclear;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 %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=1while B-AT %一维搜索法使精度符合要求C=A+0.382*(B-A);D=A+0.618*(B-A); %黄金分割法选点if lee(C)=lee(D); %缩小区间 A=C;else B=D;endendelse while B-AT %二次插值法是精度符合要求C=(A+B)/2; W=1,A,A2;1,B,B2;1,C,C2; w=lee(A);lee(B);lee(C); x=Ww; %求线性方程组解,求拟合曲线 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*A2=lee(A)|a0+a1*B+a2*B2=lee(B). |a0+a1*C+a2*C2=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; endelse if C=xp; A=xp; else B=xp; endend endendX=(A+B)/2;Y=lee(X);disp(极小值点为,num2str(X),极值为,num2str(Y);%输出结果 3、由于我编的程序,其搜索区间是自定的。不需要它提供的范围,只需要给出初始点,步长,搜索精度并确定方法即可。因此假设初始值为-5,步长为0.01,已知搜索精度为0.4。执行过程中遇到方法选择时二次插值法输入0,一维搜索法输入1,输入其它无效。运行结果:(1)先用二次插值法,则输入0(2) 再次用黄金分割法(即“一维搜索法”),此时输入14. 感想(1) 黄金分割法比二维插值法来得简单,运算快捷,至少是在在针对以议案二次函数的时候。我执行二维插值法程序时,当步长取0.01或0.1时5分钟内没有算出来,特别是一开始步长取0.01时,等了30分钟没结果,而CPU占用率却达到了50%左右,有时会跳到近100%附近。真受不了啊!应该是程序还有问题。黄金分割法在步长为0.01时之行也很快,不超过1s.截图如下:(2) 黄金分割法从结果来看也比二维插值法精确些。(3) 调整搜索精度比较 当搜索精度分别为:0.4 0.1 0.01 0.001二维插值法结果:极小值点为-1.1016极值为1.0309 极小值点为-1.0137极值为1.0006 极小值点为-1.0027极值为1 极小值点为-1.0004极值为1黄金分割法结果:极小值点为-0.9286极值为1.0153 极小值点为-1.0342极值为1.0035 极小值点为-1.0802极值为1.0193 极小值点为-1.0001极值为1通过上述比较可知,就收敛性而言,二维插值法比换进分割法好,准确性也更好。(4) 还有就是主程序以函数调用的形式执行后,总会提示错误。如图:真不知是哪儿错了?望老师指正。如果在命令窗口直接运行的话,又是完全正确的。没有提示错误。5. 小结这个程序是在很早以前就编好了,就是一直没等您说收。如图为证: 这是我用matlab试编的程序,用以实现现代设计方法中的进退法求搜索区间、黄

温馨提示

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

评论

0/150

提交评论