wolf-powell算法搜索步长
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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