您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 最优化马昌凤第二章作业
最优化方法及其Matlab程序设计习题作业暨实验报告学院:数学与信息科学学院班级:12级信计一班姓名:李明学号:1201214049第二章线搜索技术一、上机问题与求解过程1、用0.618法求解.1)(min2xxxf初始区间]1,1[,区间精度为0.解:当初始时不限制近似迭代函数值得大小,编写程序运行结果为:从结果可以看出迭代次数为9次,极小点为5016.0,极小点的函数值为2500.1。根据人工手算,极小值点应该为500.0,所以在设计程序的时候添加函数值误差范围,并取范围为10101。编写的设计函数程序并调试改正如下:function[s,fs,k,G,FX,E]=gold(f,a,b,H,F)%输入:%f:目标函数,a:搜索区间左侧端点;b:搜索区间右侧端点;%H:搜索区间允许范围;F:搜索区间函数值允许范围;%输出:%s:近似极小值点:fa:近似极小点数值;k:迭代次数:%FX:近似迭代函数值;E=[h,fh],h为近似区间误差,fh为函数值误差t=(sqrt(5)-1)/2;h=b-a;p=a+(1-t)*h;q=a+t*h;fa=feval(f,a);fb=feval(f,b);fp=feval(f,p);fq=feval(f,q);k=1;G(k,:)=[a,p,q,b];%初始时错误语句:G(1,:)=[a,p,q,b];%初始调试的时候没有注意到后面需要开辟k行空间FX(k,:)=[fa,fp,fq,fb];while(abs(fa-fb)F)((b-a)H)if(fpfq)b=q;fb=fq;q=p;fq=fp;h=b-a;p=a+(1-t)*h;fp=feval(f,p);%初始时错误语句:b=q;fb=fq;h=b-a;q=a+t*h;fq=feval(f,q);%初始调试的时候对0.618方法没有充分理解所以出现错误elsea=p;fa=fp;p=q;fp=fq;h=b-a;q=a+t*h;fq=feval(f,q);%初始时错误语句:a=p;fa=fp;h=b-a;p=a+(1-t)*h;fp=feval(f,p);%初始调试的时候对0.618方法没有充分理解所以出现错误endk=k+1;G(k,:)=[a,p,q,b];%初始时错误语句:G(1,:)=[a,p,q,b];%初始调试的时候没有注意到前面已经开辟k行空间极小点(s)迭代次数搜索区间误差函数值误差0.501690.04260.0006FX(k,:)=[fa,fp,fq,fb];endif(fpfq)s=p;fs=fp;elses=q;fs=fq;endh=b-a;fh=abs(fb-fa);%选取试探点最小的数值为近似点,并且计算出以上为搜索区间的的最后误差以及函数值误差E=[h,fh];在命令窗口内输入如下命令:[s,fs,k,G,FX,E]=gold(inline('s^2-s-1'),-1,1,0.05,1e-10)回车之后得到如下数据结果:附:在窗口中输出的结果如下[s,fs,k,G,FX,E]=gold(inline('s^2-s-1'),-1,1,0.05,1e-10)s=0.5000fs=-1.2500k=24G=-1.0000-0.23610.23611.0000-0.23610.23610.52791.00000.23610.52790.70821.00000.23610.41640.52790.70820.41640.52790.59670.70820.41640.48530.52790.59670.41640.45900.48530.52790.45900.48530.50160.52790.48530.50160.51160.52790.48530.49530.50160.51160.49530.50160.50540.51160.49530.49920.50160.50540.49530.49770.49920.50160.49770.49920.50010.50160.49920.50010.50060.50160.49920.49970.50010.50060.49970.50010.50030.50060.49970.50000.50010.50030.49970.49990.50000.5001极小点极小点数值迭代次数搜索区间误差函数值误差0.500-1.250024410321.00000.00.49990.50000.50000.50010.50000.50000.50000.50010.50000.50000.50000.50000.50000.50000.50000.50000.50000.50000.50000.5000FX=1.0000-0.7082-1.1803-1.0000-0.7082-1.1803-1.2492-1.0000-1.1803-1.2492-1.2067-1.0000-1.1803-1.2430-1.2492-1.2067-1.2430-1.2492-1.2406-1.2067-1.2430-1.2498-1.2492-1.2406-1.2430-1.2483-1.2498-1.2492-1.2483-1.2498-1.2500-1.2492-1.2498-1.2500-1.2499-1.2492-1.2498-1.2500-1.2500-1.2499-1.2500-1.2500-1.2500-1.2499-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500-1.2500E=1.0e-04*0.31210.00002、用0.618法求解.12)(min3xxxf的近似最优解,初始搜索区间为]3,0[,区间精度为1.解:当初始时不限制近似迭代函数值得大小,编写程序运行结果为:从结果可以看出迭代次数为8次,极小点为8115.0,极小点的函极小点(s)迭代次数搜索区间误差函数值误差0.811580.10030.0040数值为0886.0。由第一题目可以发现当增加函数值限制时,最小近似值的误差会减小,所以在设计程序的时候添加函数值误差范围,并取范围为10101。具体源程序与上一题相同,在此处不做详细列出。在命令窗口内输入如下命令:[s,fs,k,G,FX,E]=gold(inline('s^3-2*s+1'),0,3,0.15,1e-10)回车之后得到如下数据结果:附:在窗口中输出的结果如下[s,fs,k,G,FX,E]=gold(inline('s^3-2*s+1'),0,3,0.15,1e-10)s=0.8165fs=-0.0887k=26G=01.14591.85413.000000.70821.14591.854100.43770.70821.14590.43770.70820.87541.14590.70820.87540.97871.14590.70820.81150.87540.97870.70820.77210.81150.87540.77210.81150.83590.87540.77210.79650.81150.83590.79650.81150.82080.83590.81150.82080.82660.83590.81150.81730.82080.82660.81150.81510.81730.82080.81510.81730.81860.82080.81510.81640.81730.81860.81510.81590.81640.81730.81590.81640.81680.81730.81590.81620.81640.81680.81620.81640.81660.81680.81640.81640.81650.81660.81640.81650.81650.81660.81640.81650.81650.81650.81650.81650.81650.81650.81650.81650.81650.8165极小点极小点数值迭代次数搜索区间误差函数值误差0.8165-0.0887264101778.00000.00.81650.81650.81650.8165FX=1.00000.21293.665622.00001.0000-0.06120.21293.66561.00000.2085-0.06120.21290.2085-0.0612-0.08000.2129-0.0612-0.0800-0.01990.2129-0.0612-0.0886-0.0800-0.0199-0.0612-0.0839-0.0886-0.0800-0.0839-0.0886-0.0877-0.0800-0.0839-0.0877-0.0886-0.0877-0.0877-0.0886-0.0886-0.0877-0.0886-0.0886-0.0884-0.0877-0.0886-0.0887-0.0886-0.0884-0.0886-0.0887-0.0887-0.0886-0.0887-0.0887-0.0887-0.0886-0.0887-0.0887-0.0887-0.0887-0.0887-0.0887-0.0887-0.0887-0.0887-0.0887-0.0887-0.0887-0.0887-0.0887-0.0887-0.0887-0.0887-0.0887-0.0887-0.0887-0.0887-0.0887-0.0887-0.0887E=1.0e-04*0.17880.00003、用抛物线法求26)(2xxxf的近似极小点,给定初始点10x,初始步长.1.00h解:运用书上的算法框架,进行自我编写程序,并输出近似极小点值与近似极小点函数值,程序调制修改后如下:function[s,fs,k,G,E]=paowu1(f,s0,h0,H,F)%输入:%f:目标函数;s0:初始迭代点;h0:初始选择步长;%H:搜索区间容许误差值;F:函数值容许误差值;%输出:%s:近似极小数值点;fs:近似极小点函数值;k:迭代次数;%G:k行4列矩阵;E[hb,fc,m]分别为最终步长、搜索函数值误差、搜索区间误差s1=s0+h0;s2=s0+2*h0;h=h0;fs0=feval(f,s0);fs1=feval(f,s1);fs2=feval(f,s2);k=1;G(k,:)=[s0,s1,s2];if((fs1fs0)&&(fs1fs2)),fprintf('itiserror,pleasechangeanotheranableh0');elsefprintf('itisOK,pleasegoon');end%调试错误分析:调试时候将书中的数据进行带入,改变函数输入步长,发现不同步长的%结果不一样,并且误差较大。后来发现在一开始的时候,步长较短不能保证%三个插值函数点中间低两边高,所以在进行测验时,特此编写此判断控制语句。%如果正确,则可运用此结果;反之,则改变原来输入数值。if(abs(s2-s0)H),sb=s1;fsb=fs1;hb=h0;k=1;G(k,:)=[s0,s1,s2];else%调试错误分析:在进行第二次调试的时候,发现没有考虑当初始的时候,搜索区间初始值%小于给定搜索区间数值,即
本文标题:最优化马昌凤第二章作业
链接地址:https://www.777doc.com/doc-2316961 .html