资源描述
牛顿法:
function Newton()
X0=[1,1,1,1]';
k=0;
f0=fun(X0);
g0=grad(X0);
while(1)
H=hesse(X0);
P=inv(H)*g0;
X=X0-P;
F=fun(X);
G=grad(X);
if(norm(G)<0.000001)
X
F
k
break;
else
X0=X;
f0=F;
g0=G;
k=k+1;
end
end
end
function f=fun(x)
x1=x(1,1); x2=x(2,1); x3=x(3,1); x4=x(4,1);
f=(x1+10*x2)^2+5*(x3-x4)^2+(x2-2*x3)^4+10*(x1-x4)^4;
end
function g=grad(x)
x1=x(1,1); x2=x(2,1); x3=x(3,1); x4=x(4,1);
g =[ 2*x1+20*x2+40*(x1-x4)^3;
20*x1+200*x2+4*(x2-2*x3)^3;
10*x3-10*x4-8*(x2-2*x3)^3;
-10*x3+10*x4-40*(x1-x4)^3];
end
function h=hesse(x)
x1=x(1,1); x2=x(2,1); x3=x(3,1); x4=x(4,1);
h = [ 2+120*(x1-x4)^2,20,0,-120*(x1-x4)^2;
20,200+12*(x2-2*x3)^2,-24*(x2-2*x3)^2,0;
0,-24*(x2-2*x3)^2,10+48*(x2-2*x3)^2,-10;
-120*(x1-x4)^2,0,-10,10+120*(x1-x4)^2];
end
运行结果如下:
梯度下降法:
function min=grads()
syms x1 x2 x3 x4 p
f=(x1+10*x2)^2+5*(x3-x4)^2+(x2-2*x3)^4+10*(x1-x4)^4;
e=0.05;
k=0;
x=[-0.5 , -2.5 , 0.5 , -1.5];
df=[diff(f,x1) diff(f,x2) diff(f,x3) diff(f,x4)];
dk=-subs(df,[x1,x2,x3,x4],x);
while (norm(dk))>= e & (k<=100)
f=(x1+10*x2)^2+5*(x3-x4)^2+(x2-2*x3)^4+10*(x1-x4)^4;
df=[diff(f,x1) diff(f,x2) diff(f,x3) diff(f,x4)];
dk=-subs(df,[x1,x2,x3,x4],x);
dk=subs(dk);
x=yiwei(x,dk) ;
k=k+1;
end
f=subs(f,[x1,x2,x3,x4],x);
disp('×îСµãÊÇ')
disp(x)
disp('×îСֵÊÇ')
disp(f)
return
function m=yiwei(x,dk)
e=0.01;
syms x1 x2 x3 x4
f=(x1+10*x2)^2+5*(x3-x4)^2+(x2-2*x3)^4+10*(x1-x4)^4;
a=x;
b=x+dk;
while norm(b-a)>e
q1=a+0.328*(b-a);
q2=a+0.618*(b-a);
f1=subs(f,[x1,x2,x3,x4],q1);
f2=subs(f,[x1,x2,x3,x4],q2);
if f1>f2
a=q1;
else
b=q2;
end
f=(x1+10*x2)^2+5*(x3-x4)^2+(x2-2*x3)^4+10*(x1-x4)^4;
end
m=(a+b)/2;
运行结果如下:
展开阅读全文