实验一
实验项目编号 实验学时 实验地点 E04203401 2 ********* 实验项目名称 实验日期 指导老师 精确线搜索方法 2013.10.28 成绩 杨扬 一、实验目的、要求 目的:掌握线性搜索中精确线搜索的基本思想,熟悉其中的无导数方法黄金分割法及利用导数信息的逐次插值逼近算法,加强编程能力和编程技巧,能够上机求解单变量函数的最优化问题,同时为解决后面的多变量函数最优化做好基础。 要求:针对给定的实验题目,根据所学的黄金分割算法和逐次插值逼近算法,能够熟练地使用某种语言上机编程,给出实验结果,注意上机编程的正确性。 二、实验原理 算法详见教材中算法3.2.1,算法3.3.1等。需要写算法 三、实验内容: tt(t)ee1、用0.618法极小化,区间为[-1,1]。 2、用二次插值法求(t)1tet2的近似最优解,初始搜索区间为[0,1]。 3、分别用0.618法、三点二次插值法求f(x)sin(x)6tan(1x)e30x在区间[0,1]上的极大值。 四、实验过程原始记录(数据、图表、计算等) 三点二次插值法: 主程序: function[k,j,min]= f1(h,a,b,c,e) k=1; A=feval(h,a); B=feval(h,b); C=feval(h,c); while(k<=100) d=((b^2-c^2)*A+(c^2-a^2)*B+(a^2-b^2)*C)/(2*((b-c)*A+(c-a)*B+(a-b)*C)); D=feval(h,d); if d>b if D<=B A=B;a=b;b=d;B=D; else
c=d;C=D; end if abs(c-a)<=e j=d; min=D; return; end else if D<=B c=b;b=d;C=B;B=D; else a=d;A=D; end if abs(c-a)<=e j=d; min=D; return; end end k=k+1; end 目标函数1 function y= h(t) y=-sin(t)^6*tan(1-t)*exp(30*t); 目标函数2 function y= h(x) y=1-t*exp(-t^2) 0.618法: 主程序: function[min,x]=f(fun,a,b,e) a(1)=a; b(1)=b; k=1; r(1)=a(1)+0.382*(b(1)-a(1));%最初试探点 u(1)=a(1)+0.618*(b(1)-a(1)); while((b(k)-a(k))>e) h(k)=feval(fun,r(k));%计算函数在r(n)处的值 g(k)=feval(fun,u(k));%计算函数在u(n)处的值 if h(k)>g(k) a(k+1)=r(k);b(k+1)=b(k);r(k+1)=u(k);u(k+1)=a(k+1)+0.618*(b(k+1)-a(k+1)); else
a(k+1)=a(k);b(k+1)=u(k);u(k+1)=r(k);r(k+1)=a(k+1)+0.382*(b(k+1)-a(k+1)); end k=k+1; end x=(b(k)+a(k))/2; min=feval(fun,x);%函数的极值 目标函数1: function y= fun(t) y=-sin(t)^6*tan(1-t)*exp(30*t); 目标函数2: y=exp(-t)+exp(t); 五、实验结果及分析 三点二次插值法: Max y=sin(x)^6*tan(1-x)*exp(30*x); [k,j,min]= f1('h',0,0.4,1,0.001) k =44 j =0.9707 min =4.1086e+010 Min y=1-t*exp(-t^2); [k,j,min]= f1('h',0,0.5,1,0.001) k = 13 j =0.7071 min = 0.5711 0.617法: Max y=-sin(x)^6*tan(1-x)*exp(30*x); [k,min,x]=f('fun',0,1,0.001) k =16 max= 4.1086e+010 x = 0.9707 Min y=exp(-t)+exp(t); [k,min,x]=f('fun',-1,1,0.01) k =13 min =2.0000 x =-4.6968e-005
分析:根据精确线搜索的换进分割法和逐次插值逼近法编写的matlab程序,比较发现,精度e越小(即接近于0),越接近目标值,迭代次数越大;当精度e一定时,最优值和迭代次数不再变化,结果说明了三点二次插值法和0.618法的有效性,同时也表明了我们编写的程序的正确性
因篇幅问题不能全部显示,请点此查看更多更全内容