2013-07-11 8 views
7

Ich habe zwei tabellarisierte Datenfelder, x und y, und ich kenne nicht die Funktion, die die Daten generiert hat. Ich möchte in der Lage sein, das Integral der durch die Daten erzeugten Linie an jedem Punkt entlang der X-Achse zu bewerten.Wie integriere ich zwei 1-D-Daten-Arrays in Python?

Anstatt eine stückweise Funktion zu den Daten zu interpolieren und dann zu versuchen, das, mit dem ich Probleme habe, zu integrieren, gibt es etwas, das ich verwenden kann, das einfach das Integral durch Auswertung der Arrays liefert?

Bei der Suche nach Lösungen habe ich Referenzen zu iPython und Pandas gesehen, aber ich war nicht in der Lage, die Teile dieser Pakete zu finden, die diese Aufgabe unterstützen.

Wenn es keine Möglichkeit gibt, die Arrays einfach zu integrieren, könnten Sie einen Ratschlag geben, wie Sie diese Aufgabe am besten lösen können?

Antwort

9

Scipy has some nice tools to perform numerical integration.

Zum Beispiel können Sie scipy.integrate.simps verwenden Simpson-Regel zu erfüllen, und Sie können es den Pass folgende:

scipy.integrate.simps (y, x = None, dx = 1 , Achse = -1, gerade = 'avg')

Parameter:
y: array_like Array zu integrieren.

x: array_like, optional Wenn angegeben, die Punkte, an denen y abgetastet wird.

dx: int, optional Abstand der Integrationspunkte entlang der y-Achse. Wird nur verwendet, wenn x Keine ist. Voreinstellung ist 1.

Achse: int, optional Achse, auf der integriert werden soll. Standard ist die letzte Achse.

auch: { 'avg', 'erster', 'str'}, optional

'avg': durchschnittlich zwei Ergebnisse: 1) verwenden, um die ersten N-2-Intervalle mit eine Trapezregel auf dem letzten Intervall und 2) benutze die letzten N-2 Intervalle mit einer Trapezregel auf dem ersten Intervall.

'first': Verwenden Sie Simpsons Regel für die ersten N-2-Intervalle mit eine Trapezregel auf dem letzten Intervall.

'last': Verwenden Sie Simpsons Regel für die letzten N-2-Intervalle mit einer Trapezregel für das erste Intervall.

So können Sie Ihre zwei Arrays verwenden, um numerische Integration zu tun.

5

Scipy hat eine integration Funktion, die Ihnen helfen kann.

Wenn Sie die cumulative sum of trapezoids für die Integration verwenden möchten, wäre das wahrscheinlich am besten für eine Reihe von Punkten.

Sie können dies tun:

>>> 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() 

Dies wird auch die Daten und zeigen es Ihnen grafisch an.Dies ist der Integrationsaufruf integrate.cumtrapz(y, x, initial=0), wobei x und y Ihre beiden Arrays sind.

Verwandte Themen