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

📄 wolfe.asv

📁 这次上传的绝对是好东西
💻 ASV
字号:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  Wolfe-Powell Line Search
function [alphak,fk,gk,wfnum,wgnum]=wolfe(n,m,xk,dk,fk,gk,nprob)
         rho1=0.9;rho2=0.5;sigma1=0.01;sigma2=0.001;
         %fk1=objfcn(n,m,xk,nprob);
         %gk1=grdfcn(n,m,xk,nprob);
         fk1=fk;gk1=gk;
         wfnum=0;wgnum=0;
         %step 0
         %fk1=fk
         %gk1=gk
         alphak1=1;
         fk2=objfcn(n,m,xk+alphak1*dk,nprob);wfnum=wfnum+1;
         gk2=grdfcn(n,m,xk+alphak1*dk,nprob);wgnum=wgnum+1;
             if fk2-fk1<=sigma1*alphak1*gk1'*dk
                 if gk2'*dk>=sigma2*gk1'*dk
                     alphak=alphak1
                 end
                 %step 0
             else
                 %step 1%%%%%%%%%%%%%%%%%%%%%
                 i=0;
                 while 1
                     if i~=0
                         alphak1=rho1^i;
                         fk2=objfcn(n,m,xk+alphak1*dk,nprob);wfnum=wfnum+1;
                     end
                     if fk2-fk1<=sigma1*alphak1*gk1'*dk
                         i=i-1;
                         fk2=objfcn(n,m,xk+rho1^i*dk,nprob);
                         if fk2-fk1>sigma1*rho1^i*gk1'*dk
                             break;
                         end
                     else
                         i=i+1;
                     end
                 end  
                 %alphak1=rho1^i
                 %step 1%%%%%%%%%%%%%%%%%%%%%%%
                 while 1
                     gk2=grdfcn(n,m,xk+alphak1*dk,nprob);wgnum=wgnum+1;
                     if gk2'*dk>=sigma2*gk1'*dk
                         alphak=alphak1;
                         break;
                     else
                         betak1=rho1^(-1)*alphak1;
                         j=0;
                         while 1 
                             alphak=alphak1+rho2^j*(betak1-alphak1);
                             fk2=objfcn(n,m,xk+alphak*dk,nprob);wfnum=wfnum+1;
                             if fk2-fk1>sigma1*alphak*gk1'*dk;
                                 j=j+1;
                             else
                                 break;
                             end
                         end
                     end
                 end
             end

⌨️ 快捷键说明

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