Python(SymPy,SciPy),从字符串创建符号lambda

时间:2011-05-03 15:47:25

标签: python lambda scipy integral

我努力学习方程式的文本输入,并将其评估为一个明确的积分。我需要一个可调用的函数传递给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

5 个答案:

答案 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)

尝试astevalnumexpr,以获得更安全的eval()和Sympy.sympify()。evalf()替代品。

答案 4 :(得分:0)

我不断遇到以下语法错误,并且无情地试图找出原因:

E="2x+1"
F=lambda x: (x, eval(E)) # to get an xy coordinate 

但是当我将E改为:

时,问题按预期发挥作用
E="2*x+1"

菜鸟错误。 :)