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

📄 nonmonotone0.m

📁 最优化学习的Matlab程序:包括最速下降法,黄金分割法,曲线拟合等.
💻 M
字号:
function nonmonotone0
%参考文献:L. Grippo, F. Lampariello, and S. Lucidi,
%A Nonmonotone Line Search Technique for Newton's Method , 
%SIAM J.%Numer. Anal., 23 (1986), pp. 707–716.
%牛顿法,固定步长=1

%By:Ji Lin
%Email: linji@live.com
%Blog: http://linji526.spaces.live.com
%Date: 2007,2008/08/18

syms x1 x2 x3 x4 real
x=[x1,x2,x3,x4]';
fx=100*(x1^2-x2)^2+(x1-1)^2+(x3-1)^2+90*(x3^2-x4)^2+10.1*((x2-1)^2+(x4-1)^2)+19.8*(x2-1)*(x4-1);
gx=[diff(fx,x1),diff(fx,x2),diff(fx,x3),diff(fx,x4)]';
Hx=[diff(gx,x1),diff(gx,x2),diff(gx,x3),diff(gx,x4)];
xk(:,1)=[-3,1,-3,1]';
e=10^(-38);
gk(:,1)=subs(gx,{x1,x2,x3,x4},{xk(1,1),xk(2,1),xk(3,1),xk(4,1)});
Hk=subs(Hx,{x1,x2,x3,x4},{xk(1,1),xk(2,1),xk(3,1),xk(4,1)});
k=1;
while norm(gk(:,k))>=e&&k<=1000%控制死循环
    xk(:,k+1)=xk(:,k)-Hk^(-1)*gk(:,k);
    k=k+1;
    gk(:,k)=subs(gx,{x1,x2,x3,x4},{xk(1,k),xk(2,k),xk(3,k),xk(4,k)});
    Hk=subs(Hx,{x1,x2,x3,x4},{xk(1,k),xk(2,k),xk(3,k),xk(4,k)});
end
%不收敛

%牛顿法,取步长=sign(gk(:,k)'*Hk^(-1)*gk(:,k))
syms x1 x2 x3 x4 real
x=[x1,x2,x3,x4]';
fx=100*(x1^2-x2)^2+(x1-1)^2+(x3-1)^2+90*(x3^2-x4)^2+10.1*((x2-1)^2+(x4-1)^2)+19.8*(x2-1)*(x4-1);
gx=[diff(fx,x1),diff(fx,x2),diff(fx,x3),diff(fx,x4)]';
Hx=[diff(gx,x1),diff(gx,x2),diff(gx,x3),diff(gx,x4)];
xk(:,1)=[-3,1,-3,1]';
e=10^(-38);
gk(:,1)=subs(gx,{x1,x2,x3,x4},{xk(1,1),xk(2,1),xk(3,1),xk(4,1)});
Hk=subs(Hx,{x1,x2,x3,x4},{xk(1,1),xk(2,1),xk(3,1),xk(4,1)});
ak(1)=sign(gk(:,1)'*Hk^(-1)*gk(:,1));
k=1;
while norm(gk(:,k))>=e    
    xk(:,k+1)=xk(:,k)-ak(k)*Hk^(-1)*gk(:,k);
    k=k+1;
    
    gk(:,k)=subs(gx,{x1,x2,x3,x4},{xk(1,k),xk(2,k),xk(3,k),xk(4,k)});
    Hk=subs(Hx,{x1,x2,x3,x4},{xk(1,k),xk(2,k),xk(3,k),xk(4,k)});
    ak(k)=sign(gk(:,k)'*Hk^(-1)*gk(:,k));
end

⌨️ 快捷键说明

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