wolf-powell算法搜索步长

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

%利用wolf-powell线性搜索步长

function alpha1=wolfpowell(f,x,x0,d)

g=jacobian(f,x); %求函数f的梯度

sigma1=0.25; %给定常数1

sigma2=0.7; %给定常数2

beta1=5; %步长初始值

theta1=0.5; %步长变化比例1

theta2=0.7; %步长变化比例2

%求步长alpha1

if

subs(f,x,x0+d)<=subs(f,x,x0)+sigma1*subs(g,x,x0)*d'&&subs(g,x,x0+d)*d'>=sigm a2*subs(g,x,x0)*d'

alpha1=1;

%满足第一个条件的最大步长

else

alpha1=beta1;

while subs(f,x,x0+alpha1*d)>subs(f,x,x0)+sigma1*alpha1*subs(g,x,x0)*d'

alpha1=theta1*alpha1;

end

while

subs(f,x,x0+alpha1/theta1*d)<=subs(f,x,x0)+sigma1*alpha1/theta1*subs(g,x,x0)*d' alpha1=alpha1/theta1;

end

end

%使步长满足第二个条件

while subs(g,x,x0+alpha1*d)*d'

beta2=alpha1/theta1;

alpha2=alpha1+theta2*(beta2-alpha1);

i=1;

while subs(f,x,x0+alpha2*d)>subs(f,x,x0)+sigma1*alpha2*subs(g,x,x0)*d'

i=i+1;

alpha2=alpha1+theta2^i*(beta2-alpha1); end

alpha1=alpha2;

end

相关文档
最新文档