作业帮 > 综合 > 作业

MATLAB 程序老是报错,

来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/04/24 15:43:14
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
MATLAB 程序老是报错,
存在的问题:
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、上面两个错误改完后,程序可以运行,但结果不对,那属于你的算法问题,自己再好好查查吧.