我有一个程序需要多次计算定积分,一直在寻找快速解决方法。我需要求解的积分形式如下:
我需要为许多不同的r值解决这个积分问题,这会影响到积分上限和积分被积函数(通过函数g)。因此,我没有找到一种向量化的方法,而必须依赖循环。这显著地减慢了问题的解决速度,因为我需要在每个循环中进行函数调用。以下是使用循环解决该问题的一种方法(使用虚构数据和函数):
![\int^{b}_{a(r)}f(x)*g(x-r)dx](https://istack.dev59.com/4wfGW.webp)
import numpy as np
f = lambda x: x**2
g = lambda x: np.log(x)
b=1000
r = np.arange(10,500,10)
a = 1.1*r+r**-1
def loop1(r,a):
integration_range=[np.linspace(a[i],b,1000) for i in range(len(a))]
out=np.zeros(len(r))
i=0
while i<len(r):
out[i]=np.trapz(f(integration_range[i])*a_pdf(integration_range[i]-r[i]),integration_range[i])
i=i+1
return out
这需要大约17.7毫秒,这对于我的当前需求来说太慢了。我不太关心积分的精度非常高;只要能给出与真实值相差不超过1%的近似解,我就会很满意。非常感谢您的帮助!