gpt4 book ai didi

python - Python 中的快速数值积分

转载 作者:行者123 更新时间:2023-12-02 13:07:29 25 4
gpt4 key购买 nike

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

\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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com