单变量函数一维寻优搜索方法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档