中科大《优化设计》课程大作业之一维搜索优化设计实验报告.doc
中科大优化设计课程大作业之一维搜索优化设计实验报告优化设计实验报告力学系型号:联想y470CPU:i52450M内存:2GB系统:win7-64位如下是三个目标函数(包括自定义函数)以及初值和精度选取:1、min f(x)=xx*xx4*xxx-6*x*x16x+4 初值=3; 精度=0。0000012、min f(x)=x*x+exp(-x) 初值=100; 精度=0.0000013、min f(x)=(x-1)*(x-1)+1初值= 3; 精度=0。000001如下是各个方法运算结果:1.黄金分割法函数时间次数极值点极值10.007099334.0-156。020。006005380。351810.8271830。000718311.01.02。平分法函数时间次数极值点极值10.13946104。0156。021.520886260。351730.8271831。319126211。01。03.成功失败法函数时间次数极值点极值10。015909124。0-156.020.002930390.351730.8271830。001100421。01.04.牛顿法函数时间次数极值点极值10.52764344。0156。020.63695730。351730。8271830。15020401。01.05。三点二次插值法函数时间次数极值点极值10.01416434。0-156。020.010109200。351730。8271830。00133901。01。0简要总结:通过上面的5个表格可以综合看出,牛顿法是这几个方法中最有效的方法。同时,根据编程来看,牛顿法的算法简单,所以程序相对其他几种简洁,故牛顿法可作为常用方法使用。在程序的运行方面,分别设置了可变的函数选择、起始点、方法选择、精度这四个输入,故可以在命令窗口运行主程序main,再根据提示分别输入这四个参数的所需值,就可以得到运行结果.程序如下:1、 主程序clear;global k;k=0;disp(1。f(x)=xx*xx-4*xxx6x*x-16*x+4);disp('2.f(x)=x*x+exp(x)');disp('3.f(x)=(x-1)(x-1)+1');while 1 no=input('请输入上面所想选择函数的编号(1、2、3):'); if no=1|no=2|no=3 break; end disp('此次输入无效.');end disp(' ');x0=input(请输入初始值:);disp( ');disp('1。黄金分割法);disp(2。平分法);disp('3。成功失败法);disp('4.牛顿法);disp(5。三点二次插值法');disp(6.三次插值法');while 1 m1=input(请输入上面所想选择方法的编号(1、2、3、4、5、6):'); if m1=1m1=2|m1=3m1=4|m1=5|m1=6 break; end disp('此次输入无效.');end disp(' );while 1e=input('请输入精度(建议0。001或0.000001):'); if e0 break; end disp('此次输入无效.');end disp(' );disp(');x,y=fmin(no,x0,m1,e);fprintf('迭代次数为: %8.0fn', k);fprintf('所求极值的横坐标x为: %16.5fn', x);fprintf(所求极值的纵坐标y为: %16。5fn, y);2、 调用函数function x,y=fmin(no,x0,m1,e)amin,amax,c=range1(no,x0);if m1=1 tic;x,y=gold(no,amin,amax,e);toc;elseif m1=2 tic;x,y=pingfen(no,amin,amax,e);toc;elseif m1=3 tic;x,y=chenggong(no,amin,e);toc;elseif m1=4 tic;x,y=newton(no,amax,e);toc;elseif m1=5 tic;x,y=chazhi(no,amin,amax,c,e);toc;elseif m1=6 tic;x,y=sanci(no,amin,amax,e);toc;endend3、三点二次插值function x,y=chazhi(no,amin,amax,c0,e)UNTITLED10 此处显示有关此函数的摘要 此处显示详细说明global k;a1=amin;y1=f_1(no,a1);a2=c0;y2=f_1(no,a2);a3=amax;y3=f_1(no,a3);while 1 c1=(y3-y1)/(a3-a1); c2=((y2y1)/(a2a1)-c1)/(a2-a3); a4=(a1+a3c1/c2)/2; y4=f_1(no,a4); if abs(y4-y2)/y4)<e break; end if a4a2 if y4>y2 a3=a4;y3=y4; else a1=a2;y1=y2; a2=a4;y2=y4; end else if y4y2 a1=a4;y1=y4; else a3=a2;y3=y2; a2=a4;y2=y4; end end k=k+1;endif y4y2 x=a2;y=y2;else x=a4;y=y4;endend4、 成功法function x,y=chenggong(no,amin,e)UNTITLED8 此处显示有关此函数的摘要% 此处显示详细说明global k;x0=amin;h=1;while 1 x1=x0+h; f0=f_1(no,x0); f1=f_1(no,x1); if f1<f0 x0=x1; h=2*h; else if abs(h)e break; else h=-1/4*h; end end k=k+1;endx=(x0+x1)/2;y=f_1(no,x);end5、 黄金分割法function x,y=gold(no,amin,amax,e)%UNTITLED6 此处显示有关此函数的摘要 此处显示详细说明global k;a1=amax-0.618(amaxamin);y1=f_1(no,a1);a2=amin+0。618*(amaxamin);y2=f_1(no,a2);while abs(amaxamin)>=e if y1>=y2 amin=a1; a1=a2; y1=y2; a2=amin+0.618*(amaxamin); y2=f_1(no,a2); else amax=a2; a2=a1; y2=y1; a1=amax0。618(amax-amin); y1=f_1(no,a1); end k=k+1;endx=(amax+amin)/2;y=f_1(no,x);end6、 牛顿法function xx,yy=newton(no,amax,e)UNTITLED9 此处显示有关此函数的摘要% 此处显示详细说明global k;syms x;if no=1 f=xx*xx4x*xx6*xx-16x+4;elseif no=2 f=x*x+exp(x);elseif no=3 f=(x-1)*(x1)+1;endx0=amax;while(1) x0 = x0-double(subs(diff(f,x),x0)/subs(diff(diff(f,x),x),x0); if abs(double(subs(diff(f,x),x0)))e break; end k=k+1;endxx=x0;yy=f_1(no,xx);end7、 平分法function x,y=pingfen(no,amin,amax,e)%UNTITLED7 此处显示有关此函数的摘要% 此处显示详细说明global k;c=(amin+amax)/2;c1=f_2(no,c);while abs(c1)=e if c10 amax=c; else amin=c; end c=(amin+amax)/2; c1=f_2(no,c); if amaxamin<e break; endk=k+1;endx=(amin+amax)/2;y=f_1(no,x);end8、 三次插值法(附加方法,可不用)function x,y=sanci(no,amin,amax,e)%UNTITLED11 此处显示有关此函数的摘要% 此处显示详细说明global k;a=amin;fa=f_1(no,a);ffa=f_2(no,a);b=amax;fb=f_1(no,b);ffb=f_2(no,b);while 1 A=(b-a)*(ffb+ffa)+2*(fa+fb))/((b-a)(b-a)*(ba)); B=(3(fb-fa)-(ba)*(ffb+2ffa))/(ba)(ba)); C=ffa; d=aC/(B+sqrt(B*B3AC)); ffd=f_2(no,d); ffd=double(ffd); if abs(ffd)e break; end if ffd0 a=d; else b=d; end k=k+1;endx=d;y=y_1(no,x);end9、 确认区间函数function amin,amax,c = range1(no,x0)%UNTITLED5 此处显示有关此函数的摘要 此处显示详细说明h=1;a1=x0;y1=f_1(no,a1);a2=a1+h;y2=f_1(no,a2);if y2y1 h=-h; a3=a1;y3=y1; a1=a2; a2=a3;y2=y3;enda3=a2+h;y3=f_1(no,a3);while y3y2 h=h*2; a1=a2; a2=a3;y2=y3; a3=a2+h;y3=f_1(no,a3);endamin=min(a1,a3);amax=max(a1,a3);c=a2;end10、 所给题目的函数1function y=f_1(no,x)if no=1 y=xx*x*x-4*xx*x-6xx-16x+4;elseif no=2 y=x*x+exp(-x);elseif no=3 y=(x-1)*(x1)+1;endend11、 所给题目的函数2function y=f_2(no,x0)UNTITLED 此处显示有关此函数的摘要 此处显示详细说明syms x;if no=1 y1=xx*x*x-4xx*x6xx16*x+4; y2=diff(y1); y=subs(y2,x,x0);elseif no=2 y1=x*x+exp(-x); y2=diff(y1); y=subs(y2,x,x0);elseif no=3 y1=(x1)(x-1)+1; y2=diff(y1); y=subs(y2,x,x0);end