Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python(SymPy,SciPy),从字符串创建符号lambda_Python_Lambda_Scipy_Integral - Fatal编程技术网

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

Python(SymPy,SciPy),从字符串创建符号lambda,python,lambda,scipy,integral,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 不确定,但也许你在找 eq = "x**2" func = eval("lambda x: " + eq) 请注意,如果eq来自不受信任的

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

不确定,但也许你在找

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

请注意,如果
eq
来自不受信任的来源(例如用户输入),则使用
eval()
是危险的。

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

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

# outputs:
# 4
可能就是你要找的。它将字符串表达式转换为sympy对象

例如:

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

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

尝试或寻找eval()和symphy.sympify().evalf()的更安全的替代方法。

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

E="2x+1"
F=lambda x: (x, eval(E)) # to get an xy coordinate 
但当我将E改为:

E="2*x+1"

新手错误。:)

您的第二个代码段根本不使用
sympy
。来自sympy import Symbol的行
;x=符号('x')
无效。哈哈。哇,接得好,我从来没有意识到。我觉得很傻。谢谢尽管如此,我的问题仍然存在。仅供参考:虽然这不是您希望传递给scipy.integrate的内容,但从字符串中获取sympy表达式的方法是使用
sympify
:本文介绍了如何使用
eval
安全地处理用户输入:您可以将x和y声明为符号,而不是自动换行,例如
x,y=sympy.symbols('xy')
,然后使用
subs
调用
evalf
,并传入参数,例如
f.evalf(subs={x:1.23,y:4.56})
返回0.524488748060870