python - Python 中的快速数值积分

标签 python numpy numerical-methods

我有一个程序需要多次计算定积分,并且一直在努力寻找一种快速完成计算的方法。我需要求解的积分具有以下形式:

\int^{b}_{a(r)}f(x)*g(x-r)dx

我必须针对 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/

相关文章:

optimization - 如何在 Julia 中独立于 Optim.jl 使用 Linesearches.jl 模块?

python - 比较 Boost.Odeint 与 Scipy.integrate.odeint?

python - django 在 render_to_response() 之后注销我

python - 数组除法——从 MATLAB 到 Python 的翻译

python - 点和值到数组的字典

javascript - 使用浏览器内 JS 以数值方式求解三 Angular 方程

python - 如何使用 pygtk 在框架中设置背景图像?

python - 使用字典键-多值对对列进行分类

python - 两只 turtle 处于同一位置,如何确定?

python - 从找到的极值中获取完整行数据