Zweite Ableitung in Python - scipy/numpy/pandas
Ich versuche es mit einem zweiten Ableitung in python mit zwei numpy arrays von Daten.
Zum Beispiel die arrays, die in Frage, die wie folgt Aussehen:
import numpy as np
x = np.array([ 120. , 121.5, 122. , 122.5, 123. , 123.5, 124. , 124.5,
125. , 125.5, 126. , 126.5, 127. , 127.5, 128. , 128.5,
129. , 129.5, 130. , 130.5, 131. , 131.5, 132. , 132.5,
133. , 133.5, 134. , 134.5, 135. , 135.5, 136. , 136.5,
137. , 137.5, 138. , 138.5, 139. , 139.5, 140. , 140.5,
141. , 141.5, 142. , 142.5, 143. , 143.5, 144. , 144.5,
145. , 145.5, 146. , 146.5, 147. ])
y = np.array([ 1.25750000e+01, 1.10750000e+01, 1.05750000e+01,
1.00750000e+01, 9.57500000e+00, 9.07500000e+00,
8.57500000e+00, 8.07500000e+00, 7.57500000e+00,
7.07500000e+00, 6.57500000e+00, 6.07500000e+00,
5.57500000e+00, 5.07500000e+00, 4.57500000e+00,
4.07500000e+00, 3.57500000e+00, 3.07500000e+00,
2.60500000e+00, 2.14500000e+00, 1.71000000e+00,
1.30500000e+00, 9.55000000e-01, 6.65000000e-01,
4.35000000e-01, 2.70000000e-01, 1.55000000e-01,
9.00000000e-02, 5.00000000e-02, 2.50000000e-02,
1.50000000e-02, 1.00000000e-02, 1.00000000e-02,
1.00000000e-02, 1.00000000e-02, 1.00000000e-02,
1.00000000e-02, 1.00000000e-02, 5.00000000e-03,
5.00000000e-03, 5.00000000e-03, 5.00000000e-03,
5.00000000e-03, 5.00000000e-03, 5.00000000e-03,
5.00000000e-03, 5.00000000e-03, 5.00000000e-03,
5.00000000e-03, 5.00000000e-03, 5.00000000e-03,
5.00000000e-03, 5.00000000e-03])
Ich derzeit dann haben f(x) = y
, und ich will d^2 y /dx^2
.
Numerisch, ich weiß, ich kann entweder interpolieren Sie die Funktion und nehmen die Ableitung analytisch oder verwenden Sie höhere Ordnung-finite-Differenzen. Ich denke, dass es genug Daten, um entweder, wenn die eine oder der andere als schneller, genauer, etc.
Ich habe mir bei np.interp()
und scipy.interpolate
ohne Erfolg, denn dies gibt mir eine Einbauküche (lineare oder kubische) spline, aber nicht wissen, wie man die Ableitung an diesem Punkt.
Jede Beratung wird sehr geschätzt.
- Haben Sie einen Blick auf np.diff?
- Meine Sorge ist, dass meine Daten, die Punkte sind nicht gleichmäßig verteilt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie interpolieren Sie Ihre Daten mit Hilfe von scipy s 1-D Splines Funktionen. Die berechnete spline hat eine bequeme
derivative
Methode zur Berechnung der Ableitungen.Für die Daten von deinem Beispiel mit
UnivariateSpline
gibt die folgende fitDie Passform scheint ziemlich gut, zumindest optisch. Möchten Sie vielleicht zu Experimentieren mit der verwendeten Parameter
UnivariateSpline
.Die zweite Ableitung der spline-fit können Sie einfach erhalten, wie
Das Ergebnis wirkt etwas unnatürlich (in Fall werden Ihre Daten korrespondiert mit einem physikalischen Prozess). Sie können entweder ändern möchten, die spline-fit-Parameter, Verbesserung der Daten (z.B., bieten mehr Proben, führen weniger laut Messungen), oder entscheiden Sie sich für eine analytische Funktion für die Modellierung Ihrer Daten und führen Sie eine Kurvenanpassung (z.B. mit sicpy ist
curve_fit
)y_spl.integral(x[0],x[-1])
ist über 80, die, natürlich, ist kein Gültiger Wert für ein pdf.Durch finite-Differenzen -, die erste Ableitung von y für jeden Mittelwert von x über dein array ist gegeben durch :
Und die entsprechenden Werte von x sind :
Für die zweite Bestellung, das gleiche tun Prozess wieder :