Verwenden Sie die interp1d-Methode ** von ** scipy.interpolate, um eine kubische Spline-Interpolation durchzuführen.
Beispiel: Betrachten Sie $ y = 1 / (1 + x ^ 2) $. Abtasten und interpolieren Sie den 11-Punkte-Datensatz $ (x_i, y_i) $. Diese Funktion funktioniert nicht mit Lagrange-Interpolation (siehe Qiita-Artikel).
from scipy.interpolate import interp1d
import numpy as np
import matplotlib.pyplot as plt
x =np.linspace(-5,5,num=11)
y = 1.0/(1.0+x**2)
f_line = interp1d(x, y)
f_CS = interp1d(x, y, kind='cubic') #3. Spline-Interpolation ausführen!
#for plot
xnew =np.linspace(-5,5,num=51)
plt.plot(x, y, 'o', xnew, f_CS(xnew), '-')
plt.legend(['Raw data','Lagrange', 'Cubic spline'], loc='best')
plt.xlim([-6, 6])
plt.ylim([0, 1.4])
plt.show()
11 Datenpunkte werden blau abgetastet. Die orange Linie wird Spline interpoliert.
Wie in der folgenden Abbildung gezeigt, interpoliert die Lagrange-Interpolation diese Funktion nicht gut.
11 Datenpunkte werden blau abgetastet. Die orange Linie ist die Spline-Interpolation und die grüne Linie ist die Lagrange-Interpolation, die in der Nähe beider Enden unnatürliche Vibrationen verursacht.
Recommended Posts