一维搜索

%% 一维搜索方法
clc;
clear all;
close all;
x = -2:0.01:2;
y = 3*x.^2 - 4.*x + 2;
plot(x,y,'r-.','linewidth',2);
hold on
%% 初始化
x0 = 0;%初始值;
k = 1;%初始步长;
LL = 0.002;%终止条件
amin = -1;
bmax = 1;
lamda = 0.382;
x1 = amin + lamda *(bmax-amin);
x2 = amin +(1- lamda )*( bmax-amin);
fx1 = fun_f(x1);
fx2 = fun_f(x2);
p1 =plot([x1,x1],[0,fx1],'linewidth',2);
% hold on
p2 = plot([x2,x2],[0,fx2],'linewidth',2);
c = [];
%% 搜索开始
while bmax-amin > LL
if fx1 > fx2
amin = x1;
% bmax = bmax;
x1 = x2;
fx1 = fx2;
x2 = amin + (1-lamda) *(bmax-amin);
fx2 = fun_f(x2);
else
% amin = amin;
bmax = x1;
x2 = x1;
fx2 = fx1;
x1 = amin + lamda*(bmax-amin);
fx1 = fun_f(x1);
end
set(p1,'xdata',[x1,x1],'ydata',[0,fx1],'linewidth',2);
% hold on
set(p2,'xdata',[x2,x2],'ydata',[0,fx2],'linewidth',2);
k = k +1;
c = [c;[amin,bmax,x1,x2,fx1,fx2]];
drawnow
pause(0.5)
end

 

posted on 2014-10-23 23:16  Kermit.Li  阅读(147)  评论(0编辑  收藏  举报

导航