luk*_*iss 4 python function sympy integral lambdify
我想对功能进行羔羊化Integral(t**t,(t,0,x))。它可以工作,但是我的新函数(由返回)lambdify不返回数字,而仅返回sympy.integrals.integrals.Integral类。但是我不希望那样,我希望它返回一个浮点数。
这是我的代码:
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
Run Code Online (Sandbox Code Playgroud)
lambdify不支持scipy.integrate.quad直接还,但它不是很难添加此时,相应的定义。只需告诉您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})
Run Code Online (Sandbox Code Playgroud)
结果是
In [42]: f(2)
Out[42]: (2.8338767452468625, 2.6601787439517466e-10)
Run Code Online (Sandbox Code Playgroud)
我们在这里定义的是一个函数integral_as_quad,该函数将SymPy Integral转换为scipy.integrate.quad调用,递归地对被积数进行lambd(如果您有更复杂或符号积分的限制,您也将希望递归地对这些积数进行lambd)。