主要参考书目:
迭代的基本公式是
该方法主要用于确定初始搜索区间。
function [a,b] = JinTui(f,xk0,d,th)
%进退法求搜索区间
%输入:
% f:目标函数的句柄
% xk0:初始值
% d:搜索方向
% th:初始步长
%输出:
% [a b]得到的搜索区间
%——开始
t=th;
x1=xk0;y1=feval(f,x1);
x2=x1+t.*d;y2=feval(f,x2);
while y1==y2
t=1.1*t;
x2=x1+t.*d;
y2=feval(f,x2);
end
if y2<y1
t=2*t;
x3=x2+t.*d;
y3=feval(f,x3);
elseif y2>y1
t=-t;
%交换x1,x2
x3=x1;y3=y1;
x1=x2;y1=y2;
x2=x3;y2=y3;
x3=x2+t.*d;
y3=feval(f,x3);
end
while 1
while y2==y3
t=1.1*t;
x3=x2+t.*d;
y3=feval(f,x3);
end
if y3>y2
break;
else
x1=x2;y1=y2;
x2=x3;y2=y3;
t=2*t;
x3=x2+t.*d;
y3=feval(f,x3);
end
end
a=min(x1,x3);
b=max(x1,x3);
end