【发布时间】:2013-11-30 22:20:22
【问题描述】:
我有一个程序涉及多次计算定积分,并且一直在努力寻找一种方法来快速完成。我需要求解的积分形式如下:
我必须为许多不同的 r 值求解这个积分,这会影响积分的极限和被积函数(通过函数 g)。正因为如此,我还没有找到一种方法来矢量化问题,而必须依赖循环。这大大减慢了问题的速度,因为我需要在每个循环中进行函数调用。下面是一种使用循环的方法(使用组成的数据和函数):
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% 以内。任何帮助将不胜感激!
【问题讨论】:
-
你试过 scipy 吗?他们提供各种集成技术docs.scipy.org/doc/scipy/reference/tutorial/integrate.html
-
我有,但是那些方法也太慢了
标签: python numpy numerical-methods