我想对函数 Integral(t**t,(t,0,x))
进行 lambdify。它有效,但我的新函数(由 lambdify
返回)不返回数字,而仅返回 sympy.integrals.integrals.Integral
类。但我不想这样,我希望它返回一个 float 。
这是我的代码:
import sympy as sp
import numpy as np
f = sp.lambdify(x,sp.integrate(t**t,(t,0,x)))
print(f(2)) #return Integral(t**t, (t, 0, 2))
#but i want 2.83387674524687
最佳答案
lambdify
不直接支持 scipy.integrate.quad
yet , 但添加适当的定义并不难。只需告诉 lambdify
如何打印 Integral
:
def integral_as_quad(expr, lims):
var, a, b = lims
return scipy.integrate.quad(lambdify(var, expr), a, b)
f = lambdify(x, Integral(t**t,(t,0,x)), modules={"Integral": integral_as_quad})
结果是
In [42]: f(2)
Out[42]: (2.8338767452468625, 2.6601787439517466e-10)
我们在这里做的是定义一个函数 integral_as_quad
,它将 SymPy Integral
转换为 scipy.integrate.quad
调用,递归地对被积函数进行 lambdify(如果您有更复杂的或符号积分限制,您也需要递归地对它们进行 lambdify)。
关于python - 使用 lambdify 将硬积分转换为 lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37379291/