回 帖 发 新 帖 刷新版面

主题:有个小程序年度调试不过,请高手帮忙!

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

回复列表 (共2个回复)

沙发

原因很简单,就是你的子函数的函数名字不合法,不能用单个字母为函数名,试着将函数名改为AAA和DDD就可以了,运行结果如下:

e =

  1.0000e-008


k =

     1


dk =

     6
     4

 
ak =
 
1
 
 

dk =

     0
     0

 
ak =
 
a
 
 

b =

     8
     6

板凳

我试试,谢谢你!

我来回复

您尚未登录,请登录后再回复。点此登录或注册