?? newton.m
字號:
%牛頓法
clear;
fun=fun1;
syms x1 x2;
x0=[0;0];%設(shè)置初點
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;%設(shè)置精度
num=0;
x_next=x+d;
while(sqrt((x_next-x)'*(x_next-x))>e)%開始用非線性最小二乘法迭代求最優(yōu)點
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結(jié)果:\n優(yōu)化精度為ε=%d\n初指點x0=[%d %d]\n最優(yōu)點x=[ %d %d ] \nf(x)=%d \n||x(k+1)-x(k)||=%d \n迭代次數(shù)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');
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -