« Python pour le calcul scientifique/Interpolation, extrapolation et lissage » : différence entre les versions
Contenu supprimé Contenu ajouté
→Interpolation à une dimension : explication, sous-sections |
→Interpolation à une dimension : exemple |
||
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 0</sub> ; ''x''<sub>p ''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 0</sub> à gauche, ''x''<sub>p ''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 0</sub> ; ''x''<sub>p 1</sub>] à gauche, [''x''<sub>p ''n'' – 2</sub> ; ''x''<sub>p ''n'' – 1</sub>] à droite ;
* soit en considérant que la fonction est périodique de période ''x''<sub>p ''n'' – 1</sub> – ''x''<sub>p 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> ===
|