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