簡體   English   中英

Python中的快速數值積分

[英]Fast Numerical Integration in Python

我有一個程序涉及多次計算一個定積分,並一直在努力尋找一種方法來快速完成。 我需要解決的積分有以下形式:

\\ 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毫秒,這對我目前的需求來說太慢了。 我不太關心積分是否超精確; 我很滿意一個解決方案,它給出的近似值在真實值的1%以內。 任何幫助將不勝感激!

如果你有很多這樣做,而f比你的例子更復雜,你可以通過記憶f和g來獲得一些好處。

什么是memoization以及如何在Python中使用它?

基本上,無論你在哪里,都可以為cpu緩存計算和交易內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM