2017-10-02 2 views
0

Ich versuche, ein Array von Zwischenpunkten nach der Interpolation in SciPy zu bekommen. Aber es scheint keine direkte Methode dafür zu geben. Kann jemand helfen?Zwischenpunkte von SciPy CubicSpline

Beispielcode:

from scipy.interpolate import CubicSpline 
import matplotlib.pyplot as plt 
x = np.arange(10) 
y = np.sin(x) 
cs = CubicSpline(x, y) 
xs = np.arange(-0.5, 9.6, 0.1) 
plt.figure(figsize=(6.5, 4)) 
plt.plot(x, y, 'o', label='data') 
plt.plot(xs, np.sin(xs), label='true') 
plt.plot(xs, cs(xs), label="S") 
plt.plot(xs, cs(xs, 1), label="S'") 
plt.plot(xs, cs(xs, 2), label="S''") 
plt.plot(xs, cs(xs, 3), label="S'''") 
plt.xlim(-0.5, 9.5) 
plt.legend(loc='lower left', ncol=2) 
plt.show() 
+0

Haben Sie versucht, 'cs' auf Zwischenwerten aufzurufen? Verwenden Sie zum Beispiel 'new_xs = np.arange (-0.5, 9.6, 0.05)' und plotten Sie 'plt.plot (new_xs, cs (new_xs)) ''? –

+0

Sorry, ich sehe, dass 'xs' mehr Punkte als x hat, um damit zu beginnen. Die Ableitungen können nicht viel raffinierter sein als das, was Sie haben, mit kubischer Interpolation. Was versuchst du zu machen? –

+0

Es funktioniert, danke –

Antwort

2

Als CubicSpline documentation says, das Objekt, um es zurückgibt, ist aufrufbar, mit Parametern

  • x: array_like
    Punkte die Interpolant bei auszuwerten.
  • nu: int, optional
    Reihenfolge der Ableitung zu bewerten.
  • Extrapolieren: {bool 'periodische' None}, optional

So gibt cs(5) den Wert des Keils bei in der 5, während cs(5, 2) bei 5 seine zweite Ableitung usw.