我正在寻找超级数字正交函数。它应该具有以下三个属性:
此外,它应该是:
有人知道有这样一个函数的库吗?即使是四个属性中的两个或三个也不会没有。
我正在使用Python和SciPy,所以如果它已经与Python一起使用,那就是奖励。 (但是我也可以编写胶水代码,让它在必要时调用我的被积函数。)
答案 0 :(得分:4)
我刚刚在quadpy中为1D和2D域实现了矢量化自适应积分。您需要提供的只是对您的域和要集成的功能的三角测量。它可能是矢量值。
使用
安装quadpyselect
*
from
(
select col from query1
union
select col from query2
) d
order by
case when col in (select col from query1) then 0 else 1 end,
col
并运行
pip 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.adaptive_integrate(
lambda x: [numpy.sin(x[0]), numpy.exp(x[0])],
triangles,
1.0e-10
)
print(val)
print(error_estimate)
答案 1 :(得分:1)
我使用了这个库,它做了你想要的一切,除了用C语言编写。但是它也有一个R接口,所以也许你可以用Python调用R(这是可能的)。
http://ab-initio.mit.edu/wiki/index.php/Cubature_(Multi-dimensional_integration)
或者,您可以使用ctypes调用库(它不是直接的,但它是可行的)。
答案 2 :(得分:1)
quadrature
中的scipy.integrate
函数满足您要查找的前两个要求。类似的romberg
函数使用different method。
其他功能仅满足其中一项要求:
quad
函数执行自适应求积法,但仅支持带标量参数的函数。您可以将ctypes
函数传递给它以提高性能,但正常的Python函数将非常慢。simps
函数和相关的采样方法可以传递(通常是均匀间隔的)样本的矢量,但不是自适应的。你列出的第三个要求(向量值函数的同时积分)有点深奥,并且与首先接受向量化函数的能力相冲突(函数参数必须采用矩阵!)同样,计算双积分的能力会使函数的规范显着复杂化。
在大多数情况下,quadrature
功能将成为可能。