2013-07-11 14 views
7

Ho due matrici di dati tabulati, xey, e non conosco la funzione che ha generato i dati. Voglio essere in grado di valutare l'integrale della linea prodotta dai dati in qualsiasi punto lungo l'asse x.Come integrare due array di dati 1-D in Python?

Piuttosto che interpolare una funzione a tratti per i dati e quindi tentare di integrare ciò, con cui ho problemi, c'è qualcosa che posso usare che fornirà semplicemente l'integrale valutando gli array?

Durante la ricerca di soluzioni, ho visto riferimenti a iPython e Pandas, ma non sono stato in grado di trovare le parti di quei pacchetti che aiuteranno in questo compito.

Se non c'è un modo per integrare semplicemente gli array, potresti fornire qualche consiglio sul modo migliore per gestire questo compito?

risposta

9

Scipy has some nice tools to perform numerical integration.

Ad esempio, è possibile utilizzare scipy.integrate.simps per eseguire la regola di Simpson, e si può passare il seguente:

scipy.integrate.simps (y, x = Nessuno, dx = 1 , asse = -1, anche = 'medio')

Parametri:
y: array_like Array da integrare.

x: array_like, opzionale Se specificato, i punti in cui y è campionato.

dx: int, opzionale Spaziatura di punti di integrazione lungo l'asse di y. Usato solo quando x è Nessuno. L'impostazione predefinita è 1.

axis: int, opzionale Asse lungo il quale integrare. L'impostazione predefinita è l'ultimo asse.

ancora: { 'avg', 'prima', 'str'}, opzionale

'avg': media di due risultati: 1) utilizzare il primo N-2 intervalli con una regola trapezoidale sull'ultima intervallo e 2) utilizzare gli ultimi intervalli N-2 con una regola trapezoidale nel primo intervallo.

'first': utilizza la regola di Simpson per i primi intervalli N-2 con una regola trapezoidale sull'ultimo intervallo.

'last': utilizza la regola di Simpson per gli ultimi intervalli N-2 con una regola trapezoidale nel primo intervallo.

Quindi è possibile utilizzare i due array per eseguire l'integrazione numerica.

5

Scipy dispone di una funzione integration che può essere di aiuto.

Se si desidera utilizzare lo cumulative sum of trapezoids per l'integrazione, che sarebbe probabilmente il migliore per una serie di punti.

Si può fare questo:

>>> from scipy import integrate 
>>> x = np.linspace(-2, 2, num=20) 
>>> y = x 
>>> y_int = integrate.cumtrapz(y, x, initial=0) 
>>> plt.plot(x, y_int, 'ro', x, y[0] + 0.5 * x**2, 'b-') 
>>> plt.show() 

Questo sarà anche tracciare i dati e mostrare a voi graficamente.Questa è la chiamata di integrazione integrate.cumtrapz(y, x, initial=0) dove xe y sono i tuoi due array.

Problemi correlati