Sympy与subs的不正确替换

时间:2017-10-30 10:00:04

标签: python sympy evaluation

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现在是常数。 我在这里使用错误的方法吗?

1 个答案:

答案 0 :(得分:0)

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

那样派生它。
p, q, t = symbols('p, q, t')
f = -sin(p)*q    
f.subs( p, pi/2)

如果q1q1'彼此独立,这应该是替换的正确方法。