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

3 投票
5 回答
3709 浏览
提问于 2025-04-16 16:54

我一直在努力处理一个方程的文本输入,并将其计算为定积分。我需要一个可以调用的函数,以便传递给 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 个回答

2

sympify 可能正是你需要的工具。它可以把一个字符串表达式转换成一个 sympy 对象。

举个例子:

import sympy as sp
f=sp.sympify('x**2+sin(y)')

你还可以使用 autowrap 来把一个 sympy 对象转换成一个可以调用的函数。

2

你需要使用eval来执行eq这个代码,而不是把它当成一个字符串来处理。

eq = "x**2"
func = lambda x: eval(eq)
func(2)

# outputs:
# 4
5

不太确定,但也许你在寻找这个

eq = "x**2"
func = eval("lambda x: " + eq)

注意,如果eq来自不可信的来源(比如用户输入),使用eval()是很危险的。

撰写回答