Rapide Intégration Numérique en Python

J'ai un programme qui implique le calcul d'une intégrale définie de nombreuses reprises, et ont eu du mal à trouver un moyen de le faire rapidement. Les intégrales j'ai besoin pour résoudre sont de la forme suivante:

Rapide Intégration Numérique en Python

Je dois résoudre cette intégrale pour différentes valeurs de r, ce qui affecte à la fois les limites de l'intégration et de l'intégrande (la fonction g). De ce fait, je n'ai pas trouvé un moyen de vectoriser le problème et doit plutôt s'appuyer sur les boucles. Cela ralentit considérablement le problème, parce que j'ai besoin de faire des appels de fonction dans chaque boucle. Ci-dessous est une façon de le faire à l'aide de boucles (en utilisant des données et des fonctions):

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  

Cela prend environ 17.7 ms, qui est trop lent pour mes besoins actuels. Je ne m'inquiète pas trop sur la intégrales être super précis; je serais heureux avec une solution qui a donné des approximations à moins de 1% de la valeur réelle. Toute aide serait grandement appréciée!

InformationsquelleAutor shadowprice | 2013-11-30