Usando scipy para realizar una integración discreta de la muestra.

Estoy tratando de trasladar de labview a python.

En labview hay una función “Integral x (t) VI” que toma un conjunto de muestras como entrada, realiza una integración discreta de las muestras y devuelve una lista de valores (las áreas bajo la curva) de acuerdo con la regla de los Simpsons.

Intenté encontrar una función equivalente en scipy, por ejemplo, scipy.integrate.simps, pero esas funciones devuelven la integral sumda a través del conjunto de muestras, como un flotador.

¿Cómo obtengo la lista de valores integrados en lugar de la sum de los valores integrados?

¿Estoy solo mirando el problema al revés?

Creo que puedes estar usando scipy.integrate.simps un poco incorrectamente. El área devuelta por scipy.integrate.simps es el área total debajo de y (el primer parámetro pasado). El segundo parámetro es opcional, y son valores de muestra para el eje x (los valores x reales para cada uno de los valores y). es decir:

 >>> import numpy as np >>> import scipy >>> a=np.array([1,1,1,1,1]) >>> scipy.integrate.simps(a) 4.0 >>> scipy.integrate.simps(a,np.array([0,10,20,30,40])) 40.0 

Creo que quieres devolver las áreas bajo la misma curva entre diferentes límites? Para hacer eso, debes pasar la parte de la curva que deseas, así:

 >>> a=np.array([0,1,1,1,1,10,10,10,10,0]) >>> scipy.integrate.simps(a) 44.916666666666671 >>> scipy.integrate.simps(a[:5]) 3.6666666666666665 >>> scipy.integrate.simps(a[5:]) 36.666666666666664 

Solo hay un método en SciPy que realiza una integración acumulativa que es scipy.integrate.cumtrapz() que hace lo que usted desea siempre que no necesite usar específicamente la regla de Simpson u otro método. Para eso, puede, como se sugiere, escribir el bucle por su cuenta.