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

📄 mbfgs.m

📁 一个用拟牛顿算法求解优化问题的程序
💻 M
字号:
function [Ntotle2,NNN,number2]=MBFGS(y)
%for i=1:30
y=1;
if y==1
number2=0;
NNN=0;
Ntotle2=1;
for NO=1:50
   [nprob,n,m,x0]=init(NO);
ee=1e-6;
ee1=1e-12;
e=1e-14;
gk=grdfcn(n,m,x0,nprob);
dk=(-1)*gk;
Hk=eye(n,n);
p=0.1;
b=0.9;
NI=0;
Sd=0;
NF=1;
NG=1;
t=0.5;
while (norm(gk)>ee)&(NI<1000)
    a=1;
    a1=0;
    a2=100000;
     if (gk'*dk>-e)
       dk=-gk;
       Sd=Sd+1;
     end
    sk=a*dk;
    x1=x0+sk;
    f0=objfcn(n,m,x0,nprob);
    f1=objfcn(n,m,x1,nprob);
    gk11=grdfcn(n,m,x1,nprob);
    j=0;
     while (j==0)&(NG+NF<5000)     %&(norm(x1-x0)>ee1)
         if f1<=f0+p*gk'*dk
           % if gk11'*dk>=b*gk'*dk
                NG=NG+1;
            %    j=-1;
            % else 
             %   a1=a;
             a=1;
              %  a=(a1+a2)/2;
              %  end
        else 
            %a2=a;
           % a=(a1+a2)/2; 
           a=0.1*(gk11'*dk)/(dk'*Hk*dk);
        end
        sk=a*dk;
        x1=x0+sk;
        f1=objfcn(n,m,x1,nprob);
        gk11=grdfcn(n,m,x1,nprob);
        NF=NF+1;
     end
    yk=gk11-gk;
    sk=x1-x0;
    Qk=5;
    %yk1=2*(f0-f1+gk11'*sk)/(norm(sk)^2)*sk;
    yk1=(yk+(2*(f0-f1)+(gk11+gk)'*sk)/(norm(sk)^2)*sk);
     vk=((yk1'*Hk*yk1)^0.5)*(sk/(sk'*yk1)-((Hk*yk1)/(yk1'*Hk*yk1)));
    %yk1=max(yk,yk1);
    Hk=Hk-(Hk*sk*sk'*Hk)/(sk'*Hk*sk)+(yk1*yk1')/(yk1'*sk);%MBFGS
   %if norm(gk11)<1
   %    tt=3;
   % else
   %    tt=0.01;
   %  end
   % if ((sk'*yk1)/(sk'*sk))>=ee*(norm(gk11))^tt
    %Hk=Hk+(sk'*sk)/(yk1'*sk)-(Hk*yk1*yk1'*Hk)/(yk1'*Hk*yk1)+Qk*vk*vk';
    %else
   % Hk=Hk;
    %end
   
  x0=x1;
    W=inv(Hk);
    gk=gk11;
    dk=(-1)*W*gk;
    NI=NI+1;
end
n;
m;
NI;
NF;
NG;
Sd;
q=norm(gk11);
   if (q<=ee)
      Totle2=NF+NG*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',nprob,n,m,NI,NF,NG,Ntotle2)          
      diary off
end
else
    Ntotle2=0;
    NNN=0;
    number2=0;
end

⌨️ 快捷键说明

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