很容易理解
from sympy import *
x = symbols('x', real=True)
y = sin(x)
dy = y.diff(x)
ddy = y.diff(x, 2)
print(y.subs(x, pi/2), dy.subs(x, pi/2), ddy.subs(x, pi/2), )
将输出1 0 -1
例如,现在是否y的表达式不是预定义的,而是需要用户输入的
y = input('please input expression about x: ')
y = sympify(y)
dy = y.diff(x)
ddy = y.diff(x, 2)
但是如果用户再次输入sin(x)
,
print(y.subs(x, pi/2), dy.subs(x, pi/2), ddy.subs(x, pi/2), )
说
sin(x) 0 0
和
print(y.subs('x', pi/2), dy.subs('x', pi/2), ddy.subs('x', pi/2), )
说
1 0 0
因此sympify不像x
那样将sympy.sin(x)
视为符号。那么我们该如何解决呢?谢谢
答案 0 :(得分:1)
这就是为什么在sympify
中有一个参数locals
的原因:
y = sympify(y, locals={'x': x})
如果您的x
没有假设real=True
,则没有必要。如果符号具有相同的属性(名称和假设),则认为它们相同。从字符串sin(x)
获得的符号不假设它是真实的。所以
名称与您的x
匹配,但假设不匹配。
另一种方法是不将用户限制为变量名x
;只需使用他们使用的任何符号即可。
y = sympify(y)
x = next(iter(y.free_symbols)) # get the first (and hopefully only) symbol in the formula
dy = y.diff(x)
# and so on