我想对函数进行羔羊化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
lambdify
不支持scipy.integrate.quad
直接地yet https://github.com/sympy/sympy/issues/4471,但添加适当的定义并不困难。一个人只需要告诉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
,它翻译了 SymPyIntegral
into a scipy.integrate.quad
调用,递归地对被积函数进行羔羊化(如果您有更复杂或符号积分限制,您也需要对这些进行递归地羔羊化)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)