小编SMA*_*A.D的帖子

如何减少二维连接域上的集成时间

我需要在简单连接(并且大部分时间是凸的)的域上计算许多 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)

python performance integral scipy numerical-methods

3
推荐指数
1
解决办法
239
查看次数

标签 统计

integral ×1

numerical-methods ×1

performance ×1

python ×1

scipy ×1