一维线性搜索——进退法matlab实现(含代码)
在采用线性搜索算法可分为两个阶段:第一个阶段确定包含最优解的初始搜索区间;第二个阶段采用某种算法对初始搜索区间进行缩小,直到达到精度为止。而进退法就给出了一种确定初始搜索区间的算法。下面是对进退法的具体描述和matlab实现。
1、算法思想
2、matlab实现
function [section]=JT(fx,x0,h0,t)
%%%输入目标函数fx,初始点x0,初始步长h0和加倍系数t;
%%%采用进退法确定搜索区间[a,b];
%%%输出搜索区间。
f=inline(fx);
k=0; %%计数器,同时也做指示器:如果第1次目标函数就没有下降,将作为反向搜索的指示标记;
h=h0;
a=x0;
judge=1; %%循环判断器;
while judge==1 %%ture,继续循环
x1=x0+h;
k=k+1;
if f(x1)<f(x0) %%判断搜索方向,保证是下降方向;
h=t*h; %%加大步长,一般情况下选择加倍系数为2;
a=x0; %%最值区间的一端;
x0=x1; %%更新初始点;
else
if k==1 %%判断初始方向是否错误;
h=-h; %%方向错误,选择反方向;
else
judge=0; %%error,不满足循环条件,将跳出循环。
end
end
end
m=min(a,x1);
n=max(a,x1);
section=sprintf('[%.4f,%.4f]',m,n); %%格式化输出区间