Utilisez la méthode interp1d ** de ** scipy.interpolate pour effectuer une interpolation spline cubique.
Exemple: considérons $ y = 1 / (1 + x ^ 2) $. Échantillonnez et interpolez le jeu de données à 11 points $ (x_i, y_i) $. Cette fonction ne fonctionne pas avec l'interpolation de Lagrange (voir article Qiita).
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') #Exécutez la 3e interpolation spline!
#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 points de données échantillonnés en bleu. La ligne orange est interpolée par spline.
Comme le montre la figure ci-dessous, l'interpolation de Lagrange n'interpole pas bien cette fonction.
11 points de données échantillonnés en bleu. La ligne orange est l'interpolation spline et la ligne verte est l'interpolation lagrange, qui provoque des vibrations artificielles près des deux extrémités.
Recommended Posts