3

我一直在努力获取方程式的文本输入并将其评估为定积分。我需要一个可调用函数来传递给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
4

5 回答 5

5

Not sure, but maybe you are looking for

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

Note that using eval() is dangerous if eq is from an untrusted source (e.g. user input).

于 2011-05-03T15:58:15.510 回答
2

sympify可能是您正在寻找的。它将字符串表达式转换为 sympy 对象。

例如:

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

您可以使用autowrap将 sympy 对象转换为可调用函数。

于 2011-08-12T19:55:20.507 回答
2

您需要使用 eval 将 eq 作为代码运行,而不是将其视为字符串。

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

# outputs:
# 4
于 2011-05-03T15:59:26.670 回答
1

尝试astevalnumexpr以获得 eval() 和 Sympy.sympify().evalf() 的可能更安全的替代方案。

于 2013-08-07T04:26:34.843 回答
0

我不断收到以下语法错误,并且一直试图找出原因:

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

但是当我将 E 更改为:

E="2*x+1"

菜鸟失误。:)

于 2017-07-16T12:28:17.067 回答