我有一个程序需要多次计算定积分,并且一直在努力寻找一种快速完成计算的方法。我需要求解的积分具有以下形式:
我必须针对 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 毫秒,这对于我当前的需求来说太慢了。我不太关心让积分变得 super 精确;如果解决方案的近似值与真实值的误差在 1% 以内,我会很高兴。任何帮助将不胜感激!
最佳答案
如果您有很多这样的事情要做,并且 f 比您的示例更复杂,那么您可以通过记住 f 和可能的 g 来获得一些好处。
What is memoization and how can I use it in Python?
基本上,在任何可以的地方,缓存计算并用内存换取 CPU。
关于python - Python 中的快速数值积分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20306297/