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

📄 gu.m

📁 无约束优化中的共轭梯度算法程序
💻 M
字号:
function [Ntotle2,NNN,number2]=gu(y)
%for i=1:30
y=2;
if y==2
  number2=0;
  NNN=0;
  Ntotle2=1;
  for NO=1:54
       [nprob,n,m,x0]=init(NO);
       ee=1e-5;
       ee2=1e-12;
       e=100000000;
       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)
             if NI==0 
                 a=a;
             else
                  a=a*(gk11'*dk0)/(gk1'*dk); 
             end
             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*min(a*gk'*dk,-a^2*norm(dk)^2-a*gk'*dk))
                         gk1=grdfcn(n,m,x1,nprob);
                         ff1=gk1'*dk;
                         NGG=NGG+1;
                         if (ff1>=b*gk'*dk)&(ff1<=b*max(-gk'*dk,a*norm(dk)^2))                
                                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);
             dk0=dk;
        
             yk=gk'*(gk-gk11); 
             k=(gk-gk11)'*dk0;
             ik=gk'*gk11;
             t=gk'*gk;
     
            % u=min(yk/k,1/norm(gk));
       
      
  

     
             %betak=(gk'*gk)/(yk'*dk);        % DY
             %betak=-(gk'*yk)/(dk'*gk11);     % LS
             %betak=(gk'*yk)/(yk'*dk);        % HS
              betak=(gk'*yk)/gk11'*gk11
             %betak=max(0,u);    % PRP
     
             NI=NI+1;
             q=norm(gk);
             dk=(-1)*gk+betak*dk0;
             if (gk1'*dk>ee2)
                 dk1=-gk1;
                 x1=x0+a*(-gk1);
                 gk1=grdfcn(n,m,x1,nprob);
              end
       end
       if (q<=ee)
           Totle2=NFF+NGG*5; 
           NNN=max(Totle2,NNN);
       else
           Totle2=1;
           number2=number2+1;
       end
       Ntotle2=Totle2*Ntotle2;
       diary 000001.m
       sprintf('%d   %d   %d %d    %d/%d/%d   %d  %d',nprob,n,m,f1,NI,NFF,NGG,Totle2,number2)          
       diary off
  end
else
      Ntotle2=0;
      NNN=0;
      number2=0;
end

⌨️ 快捷键说明

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