MATLAB 程序老是报错,

学习 时间:2026-04-07 18:20:35 阅读:975
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>epsal=(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;endX1,k

最佳回答

安详的蜗牛

愤怒的冰棍

2026-04-07 18:20:35

存在的问题: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、上面两个错误改完后,程序可以运行,但结果不对,那属于你的算法问题,自己再好好查查吧。

最新回答共有2条回答

  • 俊秀的红牛
    回复
    2026-04-07 18:20:35

    存在的问题: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、上面两个错误改完后,程序可以运行,但结果不对,那属于你的算法问题,自己再好好查查吧。

上一篇 康熙第八子的嫡福晋是谁?

下一篇 植物也可以吃动物吗?