更快地计算python中的双积分(例如MatLab的积分2)

时间:2018-09-15 22:07:29

标签: python matlab scipy numerical-integration

我需要执行2D集成(一维具有无限边界)。在MatLab中,我已经完成了积分2:

int_x = integral2(fun, 0, inf, 0, a, 'abstol', 0, 'reltol', 1e-6);

在Python中,我尝试了scipy的dblquad:

int_x = scipy.integrate.dblquad(fun, 0, numpy.inf, lambda x: 0, lambda x: a, epsabs=0, epsrel=1e-6)

,并且还尝试使用嵌套的单个四边形。不幸的是,这两个scipy选项所花费的时间都是MatLab的80倍左右。

我的问题是:Python内是否有不同的2D积分实现方式可能更快(我尝试过“ quadpy”却没有太大好处)?或者,我可以编译MatLab的积分函数并从python调用它,而无需MatLab运行时(甚至是洁净的)吗?

提前谢谢! 布拉德


更新:

结果是我没有发布公式的图像的“声誉”,因此请耐心等待以下格式:fun(N,t)= P(N)N ^ 2 S(N,t) ,其中P(N)是对数正态分布,S(N,t)相当复杂,但最简单的形式是指数,最复杂的形式是超几何函数(截断序列)。 N从0到无穷大积分,t从0到pi积分。

2 个答案:

答案 0 :(得分:0)

首先,简介。如果个人资料告诉您fun是对它的评估,那么最好的选择是numba.jit,或用Cython重写它。

答案 1 :(得分:0)

我曾经创建quadpy是因为scipy正交函数对我来说太慢了。如果您可以将被积分数转换为相应的形式之一(例如,具有权重函数exp(-x)exp(-x^2)的2D平面),则应该看一下。