« Python pour le calcul scientifique/Interpolation, extrapolation et lissage » : différence entre les versions

Contenu supprimé Contenu ajouté
→‎Interpolation à une dimension : explication, sous-sections
Ligne 10 :
* on détermine le ''x''<sub>p''j''</sub> le plus proche de ''x'' et l'on prend ''y'' = ''y''<sub>p''j''</sub> ;
* on trace un segment de droite entre (''x''<sub>p''i''</sub>, ''y''<sub>p''i''</sub>) et (''x''<sub>p''i'' + 1</sub>, ''y''<sub>p''i'' + 1</sub>), le point (''x'', ''y'') est situé sur ce segment de droite ; c'est la méthode d'interpolation linéaire ;
* on utilise le polynôme de degré ''n'' – 1 passant pour tous les points, le point (''x'', ''y'') est situé sur ce polynôme. ;
* on utilise des splines (cerces), des polynômes par partie, en général de degré 2 ou 3, dont les dérivées sont raccordées.
En dehors de l'intervalle [''x''<sub>p&thinsp;0</sub> ; ''x''<sub>p&thinsp;''n'' – 1</sub>], on peut extrapoler les valeurs de la manière suivante :
* pas d'extrapolation, la fonction retourne des valeurs NaN ;
* extrapolation par une valeur constante, soit la valeur la plus proche (''x''<sub>p&thinsp;0</sub> à gauche, ''x''<sub>p&thinsp;''n'' – 1</sub> à droite), soit une valeur fixée arbitrairement (éventuellement 0) ;
* soit en prolongeant la fonction avec la loi sur le segment [''x''<sub>p&thinsp;0</sub> ; ''x''<sub>p&thinsp;1</sub>] à gauche, [''x''<sub>p&thinsp;''n'' – 2</sub> ; ''x''<sub>p&thinsp;''n'' – 1</sub>] à droite ;
* soit en considérant que la fonction est périodique de période ''x''<sub>p&thinsp;''n'' – 1</sub> – ''x''<sub>p&thinsp;0</sub>.
 
=== La fonction <code>numpy.interp()</code> ===
Ligne 21 ⟶ 27 :
* <code>xp</code> et <code>yp</code> sont des séquences (vecteurs, listes, n-uplets) de réels, la liste des points décrivant la fonction ;
* <code>x</code> est la séquence de valeurs auxquelles on s'intéresse.
Par défaut, l'extrapolation se fait par des valeurs nulles. On peut indiquer que la fonction a une période avec l'argument <code>period</code>. Par exemple :
<source lang="python">
import numpy as np
import matplotlib.pyplot as plt
 
# **********************
# * numpy.interp() *
# * avec option period *
# **********************
 
xp = np.linspace(0, 2*np.pi, 5) # Cinq points
yp = np.sin(xp)
 
x = np.linspace(-2*np.pi, 4*np.pi, 25)
 
y = np.interp(x, xp, yp, period=2*np.pi) # interpolation linéaire
 
plt.plot(x, y, "y-")
plt.plot(xp, yp, "r+")
</source>
 
=== Le module <code>scipy.interpolate</code> ===