📄 wolfe2.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Wolfe Line Search
function [alphak1,fk2,gk2,wfnum,wgnum]=wolfe2(n,m,xk,dk,fk,gk,nprob)
rho1=0.8;rho2=0.9;sigma1=0.01;sigma2=0.0001;
%fk1=objfcn(n,m,xk,nprob);
%gk1=grdfcn(n,m,xk,nprob);
fk1=fk;gk1=gk;
wfnum=0;wgnum=0;
%step 0
%fk1=fk
%gk1=gk
alphak1=1;
fk2=objfcn(n,m,xk+alphak1*dk,nprob);wfnum=wfnum+1;
gk2=grdfcn(n,m,xk+alphak1*dk,nprob);wgnum=wgnum+1;
if fk2-fk1<=sigma1*alphak1*gk1'*dk
if gk2'*dk>=sigma2*gk1'*dk
break;;
end
%step 0
else
%step 1%%%%%%%%%%%%%%%%%%%%%
i=-10;
while 1
if i~=0
alphak1=rho1^i;
fk2=objfcn(n,m,xk+alphak1*dk,nprob);wfnum=wfnum+1;
end
if fk2-fk1<=sigma1*alphak1*gk1'*dk
i=i-1;
fk2=objfcn(n,m,xk+rho1^i*dk,nprob);
if fk2-fk1>sigma1*rho1^i*gk1'*dk
%alphak=alphak1
break;
end
else
i=i+1;
end
end
%alphak1=rho1^i
%step 1%%%%%%%%%%%%%%%%%%%%%%%
j=0;
while 1
alphak1=rho2^j*alphak1;
if alphak1==0
break;
end
gk2=grdfcn(n,m,xk+alphak1*dk,nprob);wgnum=wgnum+1;
if gk2'*dk>=sigma2*gk1'*dk
%alphak=alphak1;
break;
end
j=j+1;
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -