MATLAB 程序老是报错,求大神帮忙!!!!!!

function CGG(x0,y0,eps)
syms x ;
syms y;k=0;
X=[x, y];
X0=[x0,y0];
Q=[1 1;1 2];
f=inline('x^2+2*y^2+2*x*y','x','y');%f=1/2*X*Q*X';
fx=diff(f,x);
fy=diff(f,y);
G0=[subs(fx,{x,y},X0),subs(fx,{x,y},X0)];% j=jacobian(f,X);
% G0=subs(j,X,X0);
d0=-G0;
t0=(G0*G0')/(d0*Q*d0');
X1=X0+t0*d0;
G1=[subs(fx,{x,y},X1),subs(fx,{x,y},X1)];
%G1=subs(j,X,X1);
temps=sqrt(G1(1)^2+G1(2)^2);
while temps>eps
al=(G1*Q*d0')/(d0*Q*d0');
dk=-G1+al*d0;
k=k+1;
tk=(G1*G1')/(dk*Q*dk');
X1=X1+tk*dk;
G1=[subs(fx,{x,y},X1),subs(fx,{x,y},X1)];% G1=subs(j,X,X1);
temps=sqrt(G1(1)^2+G1(2)^2);
d0=-G1;
end
X1,k

存在的问题:

1、下面这行把括号误写为中文的了,也就是

    al=G1*Q*d0'/(d0*Q*d0');

应改为

    al=(G1*Q*d0')/(d0*Q*d0');

 

2、需要求导数不能用inline函数,而是应该用符号表达式,即

    f=inline('x^2+2*y^2+2*x*y','x','y');%f=1/2*X*Q*X';
应改为

    f=x^2+2*y^2+2*x*y;

 

3、上面两个错误改完后,程序可以运行,但结果不对,那属于你的算法问题,自己再好好查查吧。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-17
建议把出错的那一行的变量都输出来看一下,看一下哪个变量出问题了
第2个回答  2014-03-17
什么错啊,可以描述一下,或者截屏吗追问

相似回答