我对进行二维数值积分感兴趣。现在我正在使用scipy.integrate.dblquad但它非常慢。请参阅下面的代码。我的需要是用完全不同的参数评估这个积分 100 次。因此我想让处理尽可能快速和高效。代码是:
import numpy as np
from scipy import integrate
from scipy.special import erf
from scipy.special import j0
import time
q = np.linspace(0.03, 1.0, 1000)
start = time.time()
def f(q, z, t):
return t * 0.5 * (erf((t - z) / 3) - 1) * j0(q * t) * (1 / (np.sqrt(2 * np.pi) * 2)) * np.exp(
-0.5 * ((z - 40) / 2) ** 2)
y = np.empty([len(q)])
for n in range(len(q)):
y[n] = integrate.dblquad(lambda …Run Code Online (Sandbox Code Playgroud) 我有一个想要集成的函数:
def f(z, t, q):
return t * 0.5 * (erf((t - z) / 3) - 1) * j0(q * t) * np.exp(-0.5 * ((z - 40) / 2) ** 2)
Run Code Online (Sandbox Code Playgroud)
我以这个函数为例来理解和展示不同集成方法之间的区别。根据通过该平台上的各种答案以及文档中获得的早期知识,我尝试了不同的方法来提高该功能的集成速度。我将在这里简要解释和比较它们:
1. 仅使用 python 和 scipy.quad:(需要 202.76 秒)
import numpy as np
from scipy import integrate
from scipy.special import erf
from scipy.special import j0
import time
q = np.linspace(0.03, 1.0, 1000)
start = time.time()
def f(q, z, t):
return t * 0.5 * (erf((t - z) / 3) …Run Code Online (Sandbox Code Playgroud)