wolfe.m

来自「结构方程中拟合函数的迭代算法」· M 代码 · 共 34 行

M
34
字号
function [alphak]=Wolfe(X_k,dk,Fml,G,S,Lambda_Y,Lambda_X,Beta,Gamma,Phi,Psi,Theta_epsilon,Theta_delta)

         rho=0.2;deta=0.4; alpha1=0;alpha2=3; alpha=1.2;
         xk1=X_k;
         d=dk;
         fk1=Fml;
         gk1=G;
         i=0;
          while 1  
              i=i+1;
             xk2=xk1+alpha*d;
             [Lambda_Y1,Lambda_X1,Beta1,Gamma1,Phi1,Psi1,Theta_epsilon1,Theta_delta1]=X_Update(xk2,Lambda_Y,Lambda_X,Beta,Gamma,Phi,Psi,Theta_epsilon,Theta_delta);
             fk2=FunValue(S,Lambda_Y1,Lambda_X1,Beta1,Gamma1,Phi1,Psi1,Theta_epsilon1,Theta_delta1);
             gk2=G_Update(S,Lambda_Y1,Lambda_X1,Beta1,Gamma1,Phi1,Psi1,Theta_epsilon1,Theta_delta1);
         
             if fk2-fk1>rho*alpha*(gk1'*d)
                 alphap=alpha1+0.5*(alpha-alpha1)/(1+(fk1-fk2)/((alpha-alpha1)*gk1'*d));
                 alpha2=alpha;
                 alpha=alphap; 
   
             elseif gk2'*d>=deta*gk1'*d
                 alphak=alpha;
                 break;
             else
                 alphap=alpha+(alpha-alpha1)*gk2'*d/(gk1'*d-gk2'*d);
                 alpha1=alpha;
                 
                 fk1=fk2;
                 gk1=gk2;
                 alpha=alphap;
             end           
         end
         
             

⌨️ 快捷键说明

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