我需要在简单连接(并且大部分时间是凸的)的域上计算许多 2D 集成。我正在使用 python 函数scipy.integrate.nquad来做这个集成。但是,与矩形域上的积分相比,此操作所需的时间要长得多。有没有可能更快的实现?
这是一个例子;我首先在圆形域(使用函数内部的约束)上集成常数函数,然后在矩形域(nquad函数的默认域)上集成。
from scipy import integrate
import time
def circular(x,y,a):
if x**2 + y**2 < a**2/4:
return 1
else:
return 0
def rectangular(x,y,a):
return 1
a = 4
start = time.time()
result = integrate.nquad(circular, [[-a/2, a/2],[-a/2, a/2]], args=(a,))
now = time.time()
print(now-start)
start = time.time()
result = integrate.nquad(rectangular, [[-a/2, a/2],[-a/2, a/2]], args=(a,))
now = time.time()
print(now-start)
Run Code Online (Sandbox Code Playgroud)
矩形域只需0.00029几秒钟,而圆形域则需要2.07061几秒钟才能完成。
此外,循环积分给出以下警告:
IntegrationWarning: The maximum number of subdivisions (50) has been achieved. …Run Code Online (Sandbox Code Playgroud)