function [alpha, funcN, exitflag]=lines(funct, rho, l, u, alpha_0, f, gd, x, d, varargin)
alpha = alpha_0;
funcN = 0;
i = 0; imax = 30;
while i <= imax
fn = feval(funct, x + alpha*d, varargin{:});
i = i + 1;
funcN = funcN +1;
if fn < f + alpha*rho*gd
exitflag = 0;
return;
else
alphan = -gd*alpha^2*0.5/(fn-f-alpha*gd);
alphan = max(l*alpha, alphan);
alpha = min(u*alpha, alphan);
end
end
exitflag = 0;
if i>= imax & fn >= f
exitflag = -1;
end
end
说明:
(1)参数推荐值:rho=0.01, l=0.15, u=0.85
(2)该程序被共轭梯度法调用
(3)imax=30这是一个允许线搜索子迭代的最大次数
(4)varargin是胞型数组,允许空或任意多输入变量。(在约束优化问题可发挥可调输入变量的好作用)