繁体   English   中英

如何让 sympy.sympify 使用预定义的符号?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM