我努力学习方程式的文本输入,并将其评估为一个明确的积分。我需要一个可调用的函数传递给scipy.integrate
。
eq = "x**2"
func = lambda x: eq
func(2)
# outputs:
# x**2
# but if I:
func = lambda x: x**2
func(2)
# outputs:
# 4
答案 0 :(得分:5)
不确定,但也许你在寻找
eq = "x**2"
func = eval("lambda x: " + eq)
请注意,如果eval()
来自不受信任的来源(例如用户输入),则使用eq
会很危险。
答案 1 :(得分:2)
您需要使用eval作为代码运行eq,而不是将其视为字符串。
eq = "x**2"
func = lambda x: eval(eq)
func(2)
# outputs:
# 4
答案 2 :(得分:2)
sympify可能正是您要找的。它将字符串表达式转换为sympy对象。
例如:
import sympy as sp
f=sp.sympify('x**2+sin(y)')
您可以使用autowrap将sympy对象转换为可调用函数。
答案 3 :(得分:1)
答案 4 :(得分:0)
我不断遇到以下语法错误,并且无情地试图找出原因:
E="2x+1"
F=lambda x: (x, eval(E)) # to get an xy coordinate
但是当我将E改为:
时,问题按预期发挥作用E="2*x+1"
菜鸟错误。 :)