📄 gj_newton.m
字号:
%适用改进Newton法求解
% min{4*x1^2+x2^2-x1^2*x2}
%取初始点x0=(0,4)',迭代三次。
clc;
clear;
syms x1 x2 times a b w;
fx=4*x1^2+x2^2-x1^2*x2;
fab=subs(fx,{x1,x2},{a,b});
g=[diff(fx,x1);diff(fx,x2)];
G=[diff(g(1),x1) diff(g(1),x2);diff(g(2),x1) diff(g(2),x2)];
x1=0;x2=4;
for times=1:3
values=eig(eval(G));
if values(1)>0 & values(2)>0
d=-eval(G)\eval(g);
elseif det(eval(G))~=0 & eval(g)'* inv(eval(G))*eval(g)<0
d=eval(G)\eval(g);
else
d=-eval(g);
end
if d==[0;0]
times=times-1;
break;
end
f=subs(fab,{a,b},{x1+w*d(1),x2+w*d(2)});
t=diff(f);
alfa=eval(solve(t));
x1=x1+alfa*d(1);
x2=x2+alfa*d(2);
end
min=[x1;x2];
fprintf('经过%d次改进牛顿迭代,求得极小点为(%f,%f),极小值为%f',times,min(1),min(2),eval(fx));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -