Sympy 用 subs 替换不正确

Sympy incorrect substitution with subs

q1 = Function('q1')(t)
f=cos(q1).diff(t)
f.subs(q1,pi/2)

我有一个 function f = -sin(q1)*q1',我想在 q1=pi/2 时评估它。我希望得到一个答案:-(q1)' 但我得到的是:-0。 因此,不仅参数 q1 被替换,而且它的时间导数也变为零,因为 q1 现在是一个常数。 我在这里使用错误的方法吗?

在给定的示例中,Sympy 的替换给出了正确的答案,因为我们试图替换 q1(t) = pi/2,一个常量函数。所以它的导数必然是0。只有当 q1q1' 彼此独立时,答案 -Derivative(q1(t),t) 才是正确的,就像在变分法中一样。在这种情况下,最好使用两个不同的变量——一个用于 q1,另一个用于 q1'。所以,如果我们已经知道函数 f 最好直接定义它而不是像

那样尝试推导它
p, q, t = symbols('p, q, t')
f = -sin(p)*q    
f.subs( p, pi/2)

如果q1q1'相互独立,这应该是正确的替换方式。