newton.m
来自「此源码包是我本学期最优化理论课程的大作业」· M 代码 · 共 33 行
M
33 行
%牛顿法
clear;
fun=fun1;
syms x1 x2;
x0=[0;0];%设置初点
x=x0;
Dfx=[diff(fun,x1);diff(fun,x2)];
dfx=subs(Dfx,[x1 x2],x);
DDfx=[diff(Dfx(1),x1) diff(Dfx(1),x2);diff(Dfx(2),x1) diff(Dfx(2),x2)];
ddfx=subs(DDfx,[x1 x2],x);
fx=subs(fun,[x1 x2],x);
d=-inv(ddfx)*dfx;
e=1e-6;%设置精度
num=0;
x_next=x+d;
while(sqrt((x_next-x)'*(x_next-x))>e)%开始用非线性最小二乘法迭代求最优点
x=x_next;
dfx=subs(Dfx,[x1 x2],x);
ddfx=subs(DDfx,[x1 x2],x);
fx=subs(fun,[x1 x2],x);
d=-inv(ddfx)*dfx;
x_next=x+d;
num=num+1;
end
x=x_next;
fprintf('\n牛顿法\n结果:\n优化精度为ε=%d\n初指点x0=[%d %d]\n最优点x=[ %d %d ] \nf(x)=%d \n||x(k+1)-x(k)||=%d \n迭代次数k=%d\n',e,x0(1),x0(2),x(1),x(2),fx,sqrt((x_next-x)'*(x_next-x)),num);
[x,y]=meshgrid(-3:0.1:3,-3:0.1:3);
z=(x.^2-y+1).^2+(x-cos(3.1415926/2*y)).^2;
meshc(x,y,z);
xlabel('x1');
ylabel('x2');
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?