主题:有个小程序年度调试不过,请高手帮忙!
function pp=youhua()
e=0.00000001
k=1
x=[2 0 0 0 0;2 0 0 0 0];
n = 10;
for k=1:n
xk=x(:,k);
dk=D(xk);
ak=A(xk,dk);
xk01=xk+ak*dk;
x(:,k+1)=xk01;
if abs(x(:,k+1)-x(:,k))>=e
k=k+1;
else
b = x(:,k+1)
break
end
end
%_____________________________
function ak = A(xk,dk)
syms x1 x2
f=(x1)^2+(x2)^2-(x1)*(x2)-10*(x1)-4*(x2)+60;
syms a
ak=solve(diff(subs(f,[x1,x2],xk+a*dk),'a'),a);
ak
%______________________
function [dk,x1,x2]=D(xk);
syms x1 x2;
f=(x1)^2+(x2)^2-(x1)*(x2)-10*(x1)-4*(x2)+60;
Df=[diff(f,x1);diff(f,x2)];
D2f=[diff(diff(f,x1),x1),diff(diff(f,x1),x2);diff(diff(f,x2),x1),diff(diff(f,x2),x2)];
D2fN=inv(D2f);
dk=-D2fN*Df;
dk=subs(dk,[x1,x2],xk);
dk
e=0.00000001
k=1
x=[2 0 0 0 0;2 0 0 0 0];
n = 10;
for k=1:n
xk=x(:,k);
dk=D(xk);
ak=A(xk,dk);
xk01=xk+ak*dk;
x(:,k+1)=xk01;
if abs(x(:,k+1)-x(:,k))>=e
k=k+1;
else
b = x(:,k+1)
break
end
end
%_____________________________
function ak = A(xk,dk)
syms x1 x2
f=(x1)^2+(x2)^2-(x1)*(x2)-10*(x1)-4*(x2)+60;
syms a
ak=solve(diff(subs(f,[x1,x2],xk+a*dk),'a'),a);
ak
%______________________
function [dk,x1,x2]=D(xk);
syms x1 x2;
f=(x1)^2+(x2)^2-(x1)*(x2)-10*(x1)-4*(x2)+60;
Df=[diff(f,x1);diff(f,x2)];
D2f=[diff(diff(f,x1),x1),diff(diff(f,x1),x2);diff(diff(f,x2),x1),diff(diff(f,x2),x2)];
D2fN=inv(D2f);
dk=-D2fN*Df;
dk=subs(dk,[x1,x2],xk);
dk