📄 permain.m
字号:
%permain program
eta=0.5;tau=0.5;epsilonk=20;muk=epsilonk;MB=1.0e+10;teminate=1.0e-6;
numer=[1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,18,19,20,21,22,23,24,25,26,28,29,30,31,32,33,34];
%for i=1:30
%tk(i)=0;tfnum(i)=0;tn(i)=0;tfile(i)='';
fprintf('Problem\t\t\tDim.\t\t\tIter.\t\t\t\tfnum\t\t\tgnum\t\t\tepsilon1\n');
nprob=5;
for select=1:2
epsilon1=epsilonk;
if select==2
epsilonk=0;epsilon1=epsilonk;muk=epsilonk;
end
[n,m,xk,filename]=initf(nprob);
xk=.1*xk;
bk=eye(n);
k=0;
fk=objfcn(n,m,xk,nprob);
fnum=1;
gk=grdfcn(n,m,xk,nprob);
gnum=1;
delta=norm(gk,2);
while k<1000
if delta<=teminate
break;
else
dk=-(bk+muk*eye(n))\gk;
gk1=gk;fk1=fk;gkdk=gk'*dk;
%pause
if gk'*dk>=-1.0e-14
dk=-gk;
end
%alphak=wolfe1(n,m,xk,dk,fk,gk,nprob)
%pause
[alphak,fk,gk,wfnum,wgnum]=wolfe2(n,m,xk,dk,fk1,gk1,nprob);
%pause
fnum=fnum+wfnum;%;fk=fk2;gk=gk2
gnum=gnum+wgnum;
xk1=xk;xk=xk1+alphak*dk;
fk=objfcn(n,m,xk,nprob);
gk=grdfcn(n,m,xk,nprob);%gnum=gnum+1
tem=norm(gk,2);
if norm(gk,2)<=teminate
k=k+1;
break;
end
%%%%%%%%%%%%%%%%% Bk update
sk=xk-xk1;bks2=sk'*bk*sk;update=1.0e-8; yk=gk-gk1;
yksk=yk'*sk;
%pause
if yksk>0
bks1=bk*sk*sk'*bk;
yks=yk*yk'/yksk;bk1=bk;
bk=bk1-bk1*sk*sk'*bk1/(sk'*bk1*sk)+yk*yk'/(yk'*sk);
% pause
end
%%%%%%%%%%%%%%%% Bk update
if norm(gk,2)/delta<=eta
epsilonk=tau*epsilonk;muk=epsilonk;delta=norm(gk,2);
else
if norm(bk,'fro')>=max(MB,1/norm(gk,2))
muk=epsilonk*norm(bk,'fro');
end
end
end
k=k+1;
end
%tk(i)=k;tfnum(i)=fnum;tn(i)=n;tfile(i)=filename;
%end
%for i=1:31
%file=filename
fprintf('\n\t%s\t\t\t%2d\t\t\t%5d\t\t\t\t%5d\t\t\t%5d\t\t\t%3f\n',filename,n,k,fnum,gnum,epsilon1);pause
%pause;
%end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -