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

📄 armijo.m

📁 用MATLAB编写的基于拟牛顿算法的最优分类器程序
💻 M
字号:
%用armijo方法求步长
function lamda=armijo(A,Y,w,r,m,n,kk,G,d);
%G为梯度
%d为搜索方向
D=diag(Y);
e=ones(m,1);
DA=D*A;
De=D*e;
V=e-(DA*w)+(De*r);
switch kk
    case 1
    for i=1:n
     if (V(i)<=-0.01)
        V(i)=0;
     elseif V(i)<0.01&V(i)>-0.01
        V(i)=V(i)^2*25+V(i)*0.5+0.0025;
      end
    end
    case 2
    for i=1:n
     if V(i)<=-0.01
        V(i) = 0;
    elseif V(i)<0.01&V(i)>-0.01
        V(i)=(100*V(i)+1)^3*(100*V(i)-3)*(-1/1600);
     end
    end
    case 3
    for i=1:n
     if V(i)<=-0.01
        V(i) = 0;
    elseif V(i)<0.01&V(i)>-0.01
        V(i)=(100*V(i)+1)^3*(10000*V(i)^3-300*V(i)^2+V(i)+0.05)*(1/32);
     end
    end
end
f1=0.5*(V'*V+w'*w+r^2);
t=1;
w2=w+t*d(1:n);
r2=r+t*d(n+1);        
V=e-(DA*w2)+(De*r2);
switch kk
    case 1
    for i=1:n
     if (V(i)<=-0.01)
        V(i)=0;
     elseif V(i)<0.01&V(i)>-0.01
        V(i)=V(i)^2*25+V(i)*0.5+0.0025;
      end
    end
    case 2
    for i=1:n
     if V(i)<=-0.01
        V(i) = 0;
    elseif V(i)<0.01&V(i)>-0.01
        V(i)=(100*V(i)+1)^3*(100*V(i)-3)*(-1/1600);
     end
    end
    case 3
    for i=1:n
     if V(i)<=-0.01
        V(i) = 0;
    elseif V(i)<0.01&V(i)>-0.01
        V(i)=(100*V(i)+1)^3*(10000*V(i)^3-300*V(i)^2+V(i)+0.05)*(1/32);
     end
    end
end
f2=0.5*(V'*V+w2'*w2+r2^2);
ff=f1-f2;
while(ff<-0.25*t*G'*d &t>10^-12)
t=t*0.5;
w2=w+t*d(1:n);
r2=r+t*d(n+1);
V=e-(DA*w2)+(De*r2);
switch kk
    case 1
    for i=1:n
     if (V(i)<=-0.01)
        V(i)=0;
     elseif V(i)<0.01&V(i)>-0.01
        V(i)=V(i)^2*25+V(i)*0.5+0.0025;
      end
    end
    case 2
    for i=1:n
     if V(i)<=-0.01
        V(i) = 0;
    elseif V(i)<0.01&V(i)>-0.01
        V(i)=(100*V(i)+1)^3*(100*V(i)-3)*(-1/1600);
     end
    end
    case 3
    for i=1:n
     if V(i)<=-0.01
        V(i) = 0;
    elseif V(i)<0.01&V(i)>-0.01
        V(i)=(100*V(i)+1)^3*(10000*V(i)^3-300*V(i)^2+V(i)+0.05)*(1/32);
     end
    end
end
f2=0.5*(V'*V+w2'*w2+r2^2);
ff=f1-f2;
end
lamda=t;

⌨️ 快捷键说明

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