7

我正在寻找一个超级数字求积函数。它应该具有以下三个属性:

  • 自适应 - 它自动调整采样点的密度以适应被积函数。这是绝对必要的,因为我的被积函数非常不均匀且计算成本很高。
  • 向量化 - 为了提高效率,它调用样本点列表上的被积函数,而不是一次调用一个点。
  • 能够处理向量值函数 - 向量值被积函数的所有分量同时计算而无需额外成本,因此单独集成所有分量是没有意义的。

此外,它应该是:

  • 2D - 我要计算的积分是平面区域上的双积分,我希望能够为整个积分指定整体(相对)容差并让它适当地管理误差预算。

有人知道有这样功能的库吗?即使是四个属性中的两个或三个也总比没有好。

我正在使用 Python 和 SciPy,所以如果它已经可以与 Python 一起使用,那将是一个额外的好处。(但我也可以编写胶水代码让它在必要时调用我的被积函数。)

4

3 回答 3

5

我刚刚在quadpy中为 1D 和 2D 域实现了矢量化自适应正交。您需要提供的只是对您的域和要集成的功能进行三角测量。它可能是向量值的。

安装quadpy

pip3 install quadpy

并运行

import numpy
import quadpy


triangles = numpy.array(
    [[[0.0, 0.0], [1.0, 0.0]], [[1.0, 0.0], [1.0, 1.0]], [[0.0, 1.0], [0.0, 1.0]]]
)

val, error_estimate = quadpy.triangle.integrate_adaptive(
    lambda x: [numpy.sin(x[0]), numpy.exp(x[0])], triangles, 1.0e-10
)

print(val)
print(error_estimate)

这给

[ 0.45969769  1.71828183]
[  7.10494337e-12   3.68776277e-11]
于 2016-11-07T21:05:58.963 回答
1

我使用了这个库,它可以做你想做的一切,除了它是用 C 编写的。但它也有一个 R 接口,所以也许你可以从 Python 调用 R(这是可能的)。

http://ab-initio.mit.edu/wiki/index.php/Cubature_(多维整合)

或者,您可以使用 ctypes 调用库(这不是直接的,但它是可行的)。

于 2013-12-06T17:42:23.793 回答
1

中的quadrature功能scipy.integrate满足您正在寻找的前两个要求。类似的romberg功能使用不同的方法

其他功能仅满足其中一项要求:

  • 类似名称的quad函数进行自适应求积,但仅支持带有标量参数的函数。你可以给它传递一个ctypes函数来提高性能,但是普通的 Python 函数会很慢。
  • simps函数和相关的采样方法可以传递一个(通常是均匀间隔的)样本向量,但不是自适应的。

您列出的第三个要求(向量值函数的同时积分)有点深奥,并且与首先接受向量化函数的能力相冲突(函数参数必须采用矩阵!)同样,能够计算二重积分会使函数的说明显着复杂化。

在大多数情况下,该quadrature功能将是要走的路。

于 2016-04-26T02:17:05.813 回答