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

📄 ysc.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:5
   [nprob,n,m,x0]=init(NO);
   ee=1e-5;
   ee2=1e-12;
   e=100000000;
   gk=grdfcn(n,m,x0,nprob);
   dk=(-1)*gk;
   
   gk2=gk;
   dk2=dk;
   dk2(1)=dk(2);
   dk2(2)=(-1)*dk(1);
   dk2(3:n)=0;
   
   p=0.01;
   b=0.1;
   NI=0;
   a=[norm(gk)]^(-1);
   q=norm(gk);
   NGG=1; 
   NFF=1;
   %pause;
   %printf('%c','I');
   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;
       sk2=a*dk2;
       x1=x0+sk;
       x12=x0+sk2;
       f0=objfcn(n,m,x0,nprob);
       f02=f0;
       f1=objfcn(n,m,x1,nprob);
       f12=objfcn(n,m,x12,nprob);
       gk1=grdfcn(n,m,x1,nprob);
       gk12=grdfcn(n,m,x12,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<=-e*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
      
      
       j=0;
       M=0;
       %ff02=gk2'*dk2;
       while (j==0) &(M<50)
           if (f12<=f02+p*a*gk2'*dk2)&(f12>=(1-p)*a*gk2'*dk2)
               %gk12=grdfcn(n,m,x12,nprob);
               %ff12=gk12'*dk2;
               %NGG=NGG+1;
                                 
                   
           else 
             
              tt=(f02-f12)/((a-a1)*ff02);
              aa=a1+0.5*(a-a1)/(1+tt);
              a2=a;
              a=aa;
           end
          
           x12=x0+a*dk2;
           f12=objfcn(n,m,x12,nprob);
           gk12=grdfcn(n,m,x12,nprob);
            M=M+1;
           NFF=NFF+1; 
      end 
      
      
      
      
      
      f1=objfcn(n,m,x1,nprob);
      f12=objfcn(n,m,x12,nprob);
      if f1<f12
          x0=x1;
          gk11=grdfcn(n,m,x0,nprob);
          gk=grdfcn(n,m,x1,nprob);
          dk0=dk;
          yk=gk'*(gk-gk11);
          k=(gk-gk11)'*dk0;
          betak=yk/k;
          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
      else
          
          x0=x12;
          gk112=grdfcn(n,m,x0,nprob);
          gk2=grdfcn(n,m,x12,nprob);
          dk02=dk2;
          yk2=gk2'*(gk2-gk112); 
          k2=(gk2-gk112)'*dk02;
          betak2=yk2/k2;
          q=norm(gk2);
          dk2=(-1)*gk2+betak2*dk02;
          if (gk12'*dk2>ee2)
                dk12=-gk12;
                x12=x0+a*(-gk12);
                gk12=grdfcn(n,m,x12,nprob);
          end
      end
      
      
      
      
      
      
        
       
      
       
    
         
             %betak=(gk'*gk)/(yk'*dk);        % DY
      %betak=-(gk'*yk)/(dk'*gk11);     % LS
      %betak=(gk'*yk)/(yk'*dk);        % HS
  
             % HS
         
     
      NI=NI+1;
     
      
 end
   if (q<=ee)
      Totle2=NFF+NGG*5; 
       NNN=max(Totle2,NNN);
   else
        Totle2=1;
        number2=number2+1;
    end
      Ntotle2=Totle2*Ntotle2;
      diary 001.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 + -