⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lgy.m

📁 无约束优化中的共轭梯度算法程序
💻 M
字号:
function []=fun3(x)
%for i=1:30
nprob=1;
[n,m,x0]=initf(nprob)
kk=length(x0)
ee=1e-5;
ee2=1e-10;
gk=grdfcn(n,m,x0,nprob);
dk=(-1)*gk;
%lambda=0.001;
p=0.01;
b=0.1;
K=0;
N=0;
k1=1;
k2=1;
a=[norm(gk)]^(-1);
q=norm(gk);
while (q>=ee)&(K+N<60000)
   if N==0 
      a=a;
   else
      a=a*(gk11'*dk0)/(gk1'*dk); 
   end
  %a=0.5;
    a1=0;
    a2=100;
    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;
   % k1=k1+2;
   % k2=k2+1;
   % lambda1=norm(gk)^5;
   % lambda=min(lambda1,0.01);
   lambda=0.01
    while (j==0)&(M<50)
       %  pp=0.5*lambda*a^2*norm(dk)^4;
       k1=k1+1;
   %    if (f1<=f0+p*a*gk'*dk)
           if (f1<=f0+p*a*gk'*dk-0.5*lambda*norm(a*dk)^2)
     %    if (f1<=f0+p*a*gk'*dk-0.5*lambda*a^2*norm(dk)^4)
          gk1=grdfcn(n,m,x1,nprob);
          k2=k2+1;
          ff1=gk1'*dk;
   %       if (ff1>=b*gk'*dk)
   %  if (ff1>=b*gk'*dk)&(ff1<=-b*gk'*dk)    
             if (ff1>=b*gk'*dk-lambda*sk'*dk)&(ff1<=-b*gk'*dk-lambda*sk'*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);
        K=K+1;
        M=M+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;
    %I=eye(n,n);
    %Hk=(I-(sk*yk')/(sk'*yk))*Hk*(I-(yk*sk')/(sk'*yk))+(sk*sk')/(sk'*yk);
    %W=inv(Hk);
    %dk=(-1)*(I-(yk*sk'+sk*yk')/(yk'*sk)+(1+(yk'*yk)/(yk'*sk))*(sk*sk')/(yk'*sk))*W*gk;
    u=0.01;
%    v=0.01;
%o1=0.6;
%o2=0.11;
%o3=0.1;
%o4=1.86;
      betak=[gk'*yk]/[norm(gk11)^2]
   %  betak1=[o2*norm(gk)^2]/[gk'*dk-o2*gk11'*dk];
   %  betak2=[o3*norm(gk)^2]/[o4*abs(gk'*dk)-o3*gk11'*dk];
   %  betak=(1-o1)*betak1+o1*betak2;
   %betak=[u*norm(gk)^2]/[qq*abs(gk'*dk)-v*gk11'*dk];
   % betak=max(0,betak);
dk0=dk;
N=N+1;
q=norm(gk1)
dk=(-1)*gk+betak*dk0;
 if (gk1'*dk>-ee2)
       dk1=-gk1;
       x1=x0+a*(-gk1);
       gk1=grdfcn(n,m,x1,nprob);
 end
    
end
n;
m;
NI=N;
NF=N+k1;
NG=N+k2;
NTotal=NF+5*NG
K
f1
q
x1;
sprintf(' %d/%d/%d/%d',NI,NF,NG,NTotal)
        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -