?? prpswpgu.m
字號:
function [Ntotle1,MMM,number1]=PRPSWP(x)
%for i=1:30
if x==1
number1=0;
MMM=0;
Ntotle1=1;
for NO=1:49
[nprob,n,m,x0]=init(NO);
ee=1e-5;
gk=grdfcn(n,m,x0,nprob);
dk=(-1)*gk;
p=0.01;
b=0.1;
NI=0;
a=[norm(gk)]^(-1);
q=norm(gk);
NGG=1;
NFF=1;
while (q>=ee)&(NI<60000)
a1=0;
a2=10;
sk=a*dk;
x1=x0+sk;
f0=objfcn(n,m,x0,nprob);
f1=objfcn(n,m,x1,nprob);
gk1=grdfcn(n,m,x1,nprob);
j=0;
M=0;
ff0=gk'*dk;
while (j==0) &(M<50)
if (f1<=f0+p*a*gk'*dk)
gk1=grdfcn(n,m,x1,nprob);
ff1=gk1'*dk;
NGG=NGG+1;
if (ff1>=b*gk'*dk)&(ff1<=-b*gk'*dk)
j=-1;
else
aa=a+(a-a1)*gk1'*dk/((gk'-gk1')*dk);
a1=a;
f0=f1;
ff0=ff1;
a=aa;
end
else
tt=(f0-f1)/((a-a1)*ff0);
aa=a1+0.5*(a-a1)/(1+tt);
a2=a;
a=aa;
end
x1=x0+a*dk;
f1=objfcn(n,m,x1,nprob);
gk1=grdfcn(n,m,x1,nprob);
M=M+1;
NFF=NFF+1;
end
gk11=grdfcn(n,m,x0,nprob);
x0=x1;
f1=objfcn(n,m,x1,nprob);
gk=grdfcn(n,m,x1,nprob);
yk=gk-gk11;
%betak=(gk'*gk)/(yk'*dk); % DY
%betak=-(gk'*yk)/(dk'*gk11); % LS
%betak=(gk'*yk)/(yk'*dk); % HS
betak=[gk'*yk]/[norm(gk11)^2]; % PRP
dk0=dk;
NI=NI+1;
q=norm(gk);
dk=(-1)*gk+betak*dk0;
end
if (q<=ee)
Totle1=NFF+NGG*5;
MMM=max(Totle1,MMM);
else
Totle1=1;
number1=number1+1;
end
Ntotle1=Totle1*Ntotle1;
diary 000001.m
sprintf('%d %d %d %d %d/%d/%d %d',nprob,n,m,f1,NI,NFF,NGG,Totle1)
diary off
end
else
Ntotle1=0;
MMM=0;
number1=0;
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -