我正在尝试将从 math.js (例如
2*x^2+5x-1
)获得的字符串转换为可运行的 python 函数,如下所示:
def f(x):
return 2*(x**2)+5*x-1
我已经尝试过
sympify
模块中的 sympy
:
from sympy import sympify, symbols
x = symbols("x")
expression = "x**2 + 3*x-1"
print(sympify(expression).subs(x, 2))
但是,这种方法无法处理某些操作,例如
^
,并且仅返回结果。此外,我尝试使用 eval()
功能,遇到类似的问题。
您可以将数学表达式字符串转换为
SymPy
表达式,将 ^
运算符替换为 **
(Python 的求幂运算符),然后使用 f(x)
创建 Python 函数 lambdify
。
从 sympy 导入 sympify、符号、lambdify
x = symbols("x")
expression_str = "2*x^2 + 5*x - 1"
expression_sym = sympify(expression_str.replace("^", "**"))
f = lambdify(x, expression_sym, 'numpy')
print(f(2)) # Evaluate the function at x = 2
输出:
17