【问题标题】:Fast Numerical Integration in PythonPython 中的快速数值积分
【发布时间】: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% 以内。任何帮助将不胜感激!

【问题讨论】:

标签: python numpy numerical-methods


【解决方案1】:

如果你有很多这些事情要做,并且 f 比你的例子更复杂,你可以从记忆 f 和可能的 g 中获得一些好处。

What is memoization and how can I use it in Python?

基本上,您可以在任何地方缓存计算并用内存换取 CPU。

【讨论】:

    猜你喜欢
    • 2020-11-01
    • 2022-10-05
    • 2012-02-13
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 2014-07-19
    • 2021-02-11
    • 2012-08-12
    相关资源
    最近更新 更多