[已解决] 给参数赋值时,用x1,x2就可以赋值成功,用x(1)时无法带入所赋值

[复制链接]
懵懵懂不懂 发表于 2022-5-18 12:21:02
我想要下面的代码,能够得出结果的。因为有很多需要赋值的数,所以想要使用for循环去赋值,但是用x(i)=i来赋值,结果是带变量的,赋的值并没有进入结果里面。求大佬帮忙修改一下或者给一下解决思路
代码如下:错误的代码:
x=sym('x',[1 5])
for i=1:5
    f(i)=x(i)^2+1
    df(i)=diff(f(i),x(i))
end
for i=1:5
    x(i)=i
end

b=subs(df)
结果
x =
[ 1, 2, 3, 4, 5]
b =
[ 2*x1, 2*x2, 2*x3, 2*x4, 2*x5]

正确的代码:
x=sym('x',[1 5])
for i=1:5
    f(i)=x(i)^2+1
    df(i)=diff(f(i),x(i))
end

x1=1;x2=2;x3=3;x4=4;x5=5;
b=subs(df)
结果
b =
[ 2, 4, 6, 8, 10]

最佳答案


TouAkira 发表于 2022-5-18 13:11:27
新手常见错误之刻舟求剑。请不要把其他计算机语言的默认规则代入MATLAB

直接 b = subs( df, [ x ], [ 1 : 5 ] ) 就行了,不要搞 x(i)=i 的循环。

去看《 MATLAB变量不会自动更新(超链接,自己点进去看) 》,你这就是典型的“某变量(x)被重新赋值,从符号向量变成了符号数值向量,但这改变不了此前已经使用该变量(x)赋值的其他变量的类型或内容
回复此楼

2 条回复


TouAkira 发表于 2022-5-18 13:11:27
新手常见错误之刻舟求剑。请不要把其他计算机语言的默认规则代入MATLAB

直接 b = subs( df, [ x ], [ 1 : 5 ] ) 就行了,不要搞 x(i)=i 的循环。

去看《 MATLAB变量不会自动更新(超链接,自己点进去看) 》,你这就是典型的“某变量(x)被重新赋值,从符号向量变成了符号数值向量,但这改变不了此前已经使用该变量(x)赋值的其他变量的类型或内容
回复此楼

懵懵懂不懂 发表于 2022-5-18 13:22:20
TouAkira 发表于 2022-5-18 13:11
新手常见错误之刻舟求剑。请不要把其他计算机语言的默认规则代入MATLAB。

直接 b = subs( df, [ x ], [ 1  ...

谢谢版主,明白了!我再去看看这个问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表