我和here有同样的问题。
在Matlab中,函数的导数可以象征性地表示为
>> syms t
>> syms x(t)
>> diff(x,t)
ans(t) =
D(x)(t)
但是,如果我知道衍生物,我怎么能在表达式中替换。
>> subs(ans,D(x)(t),3)
Error: ()-indexing must appear last in an index expression.
答案 0 :(得分:5)
让我们通过一个例子:
syms t x(t) y
f = x^2+y
dfdt = diff(f,t) % returns 2*D(x)(t)*x(t)
dxdt = diff(x,t) % returns D(x)(t)
subs(dfdt,dxdt,3)
返回6*x(t)
。关键是D(x)(t)
只是衍生物相对于时间的印刷表示,而不是实际值。您需要将其分配给实际变量。在您的示例中,您需要执行@rayeng建议的操作,但如果您为输出分配名称,它会更加灵活和清晰。
x
和dxdt
都是symfun
调用"抽象"的帮助和文档。或"任意"符号功能,即没有定义的功能。这些行为与sym
类型的常规符号变量略有不同。在命令窗口中键入class(x)
或whos
以查看变量类型。
答案 1 :(得分:2)
MATLAB解释您正在进行嵌套索引调用。它认为您正在执行D(x)
,然后无论结果是什么,您都使用t
索引到数组中。您应该做的是在diff(x,t)
的第二个参数内嵌入subs
调用,然后进行替换。因此:
subs(ans, diff(x,t), 3);