单变量函数一维寻优搜索方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
源代码:
1. GUI模块
screen=get(0,'Screensize');
w=screen(3);h=screen(4);
figure('color',[1,1,1],'position',[0.2*h,0.2*h,0.5*w,0.3*h],'Name','单变量函数','NumberTitle','off','MenuBar','none');
hcount=uimenu(gcf,'label','&count');
hmenu1=uimenu(hcount,'label','全局搜索','Callback','six');
hmenu2=uimenu(hcount,'label','二分法','Callback','five');
hmenu3=uimenu(hcount,'label','黄金分割','Callback','golden'); hmenu4=uimenu(hcount,'label','FABONONACI','Callback','four');
hplot=uimenu(gcf,'label','&plot');
hmenu1=uimenu(hplot,'label','误差');
hmenu1=uimenu(hplot,'label','时间');
uimenu(gcf,'label','&quit','call','close(gcf)');
2. 黄金分割函数模块
tic;
a=0;b=1;e=1e-10;
a1=b-0.618*(b-a);
a2=a+0.618*(b-a);
while b-a>e
y1=8*a1^3-2*a1^2-7*a1+3;
y2=8*a2^3-2*a2^2-7*a2+3;
if y1>y2
a=a1;
a1=a2;
y1=y2;
a2=a+0.618*(b-a);
plot(a2,y1,'bh')
axis([0.6 0.65 -0.25 0.18]);
title('黄金分割法');
else
b=a2;
a2=a1;
y2=y1;
a1=b-0.618*(b-a);
plot(a1,y2,'bh')
axis([0.6 0.65 -0.25 0.18]);
title('黄金分割法');
end
end
xmin=(a+b)/2
ymin=8*xmin^3-2*xmin^2-7*xmin+3 t=toc;
disp('t=');
disp(t);
per=(xmin-0.6298)/0.6298
3.fabonnaci法模块
tic;
f0=1;f1=1;
f=f0+f1;
n=2;a=0;b=1;
while 1/f>1e-10
f0=f1;f1=f;f=f0+f1;
n=n+1;
end
fun=inline('8*x^3-2*x^2-7*x+3','x'); for k=1:n-2
t1=b+f1/f*(a-b);t2=a+f1/f*(b-a);
if fun(t1) b=t2; else a=t1; end f=f1;f1=f0;f0=f-f1; end if fun(t1) t=t1,y=fun(t1) else t=t2,y=fun(t2) end plot(t,y,'r*') axis([0.6 0.65 -0.25 0.18]); title('fabonnaci法'); t=toc; disp('用时t='); disp(t); per=(t-0.6298)/0.6298 4.二分法 tic; a=0;b=1;e=1e-10; x0=(a+b)/2; fun=inline('8*x^3-2*x^2-7*x+3','x'); f=[8,-2,-7,3]; y=polyval(polyder(f),x0); while b-a>e if y>0 b=x0; x0=(a+b)/2; y=polyval(polyder(f),x0); elseif y<0 a=x0; x0=(a+b)/2; y=polyval(polyder(f),x0); else x0=(a+b)/2 end end x0 y=fun(x0) plot(x0,y,'g*') axis([0.6 0.65 -0.25 0.18]); title('二分法'); t=toc; disp('t='); disp(t); per=(x0-0.6298)/0.6298 5.全局搜索法模块 tic; h=0.000001; x=0:h:1; f=8*x.^3-2*x.^2-7*x+3; [y,i]=min(f); x=x(i),y plot(x,y,'b*') axis([0.6 0.65 -0.25 0.18]); title('全局搜索法'); t=toc per=(x-0.6298)/0.6298