matlab最速下降法出现无法从 sym 转换为 logical,怎么解决

syms a b s;
e=0.01;
f=a^2+25*b^2;
x0=[3;2];

for i=1:20
    xd=[diff(f,a);diff(f,b)];
    x1=[x0(1)-s*xd(1);x0(2)-s*xd(2)];
    fai=(x0(1)-s*xd(1))^2+25*(x0(2)-s*xd(2))^2;
    faid=diff(fai,s);
    ss=solve(faid);
    x11=subs(x0(1)-s*x1d,s,ss);
    x12=subs(x0(2)-s*x2d,s,ss);
    xk=[x11;x12];
    e1= (xk(1)-x0(1))^2+(xk(2)-x0(2))^2;
    if e1<=e
        x=[xk(1);xk(2)];
        return;
    else
        x0=[xk(1);xk(2)];
    end
    opt_x=xk;
end

你好,需要改的地方帮你改正了,现在梯度下降法可以运行了:

syms a b s;
e=0.01;
f=a^2+25*b^2;
x0=[3;2];
xd=[diff(f,a);diff(f,b)];
for i=1:20
    xd_val = subs(xd,[a,b],[x0(1),x0(2)]);% 下降的方向
    fai=(x0(1)-s*xd(1))^2+25*(x0(2)-s*xd(2))^2;
    faid=diff(fai,s);
    ss=solve(faid,s);
    ss = subs(ss,[a,b],[x0(1),x0(2)]); % ss里面含有的a和b需要x0替换掉
    x11=subs(x0(1)-s*xd_val(1),s,ss);
    x12=subs(x0(2)-s*xd_val(2),s,ss);
    xk=[x11;x12];
    e1= (xk(1)-x0(1))^2+(xk(2)-x0(2))^2;
    if eval(e1)<=e %加eval获取真实的数
        x=[xk(1);xk(2)];
        break;%这里用break打破循环即可
    else
        x0=[xk(1);xk(2)];
    end
    opt_x=xk;
end
x
eval(x)
 

有帮助还望题主给个采纳支持一下答主哦,谢谢啦