![](/img/trans.png)
[英]How to use sympy.latex and sympy.sympify to produce unevaluated parameterized expression fr'\frac{{3}}{{{i}}}'?
[英]how to let sympy.sympify use predefined symbols?
很容易理解
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)
所做的那样。 那么我们该如何解决呢? 谢谢
这就是为什么在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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.