我希望以下代码评估sin(t)
import sympy as sy
t = sy.Symbol('t', real=True)
expr = sy.sympify('sin(t)')
dexpr = sy.diff(expr, t)
print dexpr
但实际上它会打印0
。如果我按t = sy.Symbol('t')
更改第一行,则效果很好。看起来同情心认为有2种不同的t
。
问题:如何说,我的字符串表达式取决于真正有价值的参数t
,以及如何正确地理解这个字符串?
答案 0 :(得分:0)
如果您将 t 声明为实数变量,它将被视为与符号(' t')不同的变量(没有假设)
尝试这种方式:
In [1]: treal = Symbol('t', real=True)
In [2]: t = Symbol('t')
In [3]: expr = sympify('sin(t)')
In [4]: expr.diff(treal)
Out[4]: 0
In [5]: expr.diff(t)
Out[5]: cos(t)
In [6]: treal == t
Out[6]: False
In [7]: expr_real = expr.subs(t, treal)
In [8]: expr_real.diff(treal)
Out[8]: cos(t)
在输入[6]中,您可能会看到两个变量被认为是不同的,即使两个变量都打印为 t 。如果用实际变量区分你的同义表达式(输入[4]),你的表达式将被视为常量,因为两个 t 不能识别为同一个变量。
在输入[7]中,我用 treal 替换了 t ,因此在输入[8]中我能够正确地导出表达式。
修改强>
要导入的快速表单是在 sympify 中指定字符串变量和局部变量之间的映射:
In [1]: t = Symbol('t', real=True)
In [2]: expr = sympify('sin(t)', locals={'t': t})
In [3]: expr
Out[3]: sin(t)
In [4]: expr.diff(t)
Out[4]: cos(t)
这样, t 将被设置为输入[1]中定义的变量。