其他分享
首页 > 其他分享> > 使用lambdify将hard integral转换为lambda函数

使用lambdify将hard integral转换为lambda函数

作者:互联网

我想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

解决方法:

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调用,递归lambdifying整数(如果你有更复杂或符号的集成限制,你会想要递归lambdify那些好).

标签:integral,python,function,sympy,lambdify
来源: https://codeday.me/bug/20190829/1758222.html