Soit une série de n+1 points (xi,yi) avec i compris entre 0 et n, on cherche à obtenir le polynôme d'interpolation de Lagrange L(x) qui passe par ces points.
L'objectif est en fait d'essayer de mieux comprendre l'interpolation de Lagrange en se basant sur la notion de pondération des mesures et sur son intuition. Pour cela, on aura besoin d'évaluer le poids de chacune des mesures yi les uns par rapport aux autres. Ceci va nous permettre ensuite d'attribuer un coefficient de pondération à chacune des mesures yi de telle sorte que la somme des coefficients soit égale à 1.
Ces coefficients représentent en fait les valeurs en x des polynômes de Lagrange notés li(x).
Note importante : par la suite on notera wi,j(x) le poids en x d'une mesure yi par rapport à celui d'une autre mesure yj, avec wi,j(x) + wj,i(x) = 1.
Pour simplifier si wi,j(x) vaut 75% , alors wj,i(x) est égal à 25%.
Il s'agit donc du poids d'une mesure relativement à celui d'une autre mesure.
II. Interpolation linéaire
Soit 2 points de coordonnées (x0, y0) et (x1, y1) situés dans le plan, et le point de coordonnées (x,y) positionné sur la droite reliant les 2 autres points.
Dans cette configuration, on souhaite déterminer y en fonction de x, y0 et y1.
On veut en fait aboutir à une expression de la forme :
y = c0(x) × y0 + c1(x) × y1
Pour cela, on peut déjà remarquer sur le graphique précédent que :
(y - y0)/(x - x0) = (y1 - y0)/(x1 - x0)
On isole ensuite y à gauche du signe égal, et on regroupe progressivement les termes en y0 et y1 à droite :
(y - y0) = (y1 - y0) x ((x - x0)/(x1 - x0))
y = y0 + (y1 - y0) × ((x - x0)/(x1 - x0))
y = (1 - ((x - x0)/(x1 - x0))) × y0 + ((x - x0)/(x1 - x0)) × y1
Pour finalement obtenir l'expression de y :
y = ((x - x1)/(x0 - x1)) × y0 + ((x - x0)/(x1 - x0)) × y1
On reconnait la formule de Lagrange :
L(x) = l0(x) × y0 + l1(x) × y1
Avec ses coefficients l0(x) et l1(x) tels que :
l0(x) + l1(x) = 1
On voit donc que ces coefficients de pondération l0(x) et l1(x) sont complémentaires à 1. Quand l'un augmente l'autre diminue et inversement.
En considérant maintenant wi,j(x) le poids en x de yi par rapport à celui de yj, et en posant :
w0,1(x) = l0(x)
et :
w1,0(x) = l1(x)
On obtient ainsi l'expression :
L(x) = w0,1(x) × y0 + w1,0(x) × y1
avec :
w0,1(x) = 1 - w1,0(x) = 1 - (x - x0)/(x1 - x0) = (x - x1) / (x0 - x1)
Note importante : On constate aisément sur le graphique précédent que plus x est proche de x0, et plus y l'est de y0, inversement quand x tend vers x1, alors y tend vers y1.
On sent donc bien intuitivement que plus x est proche de x0 et plus y0 a de l'importance par rapport à y1, et inversement plus il est proche de x1 et moins y0 a d'importance par rapport à y1.
On voit en particulier que si x=x0 :
w0,1(x0) = (x0 - x1) / (x0 - x1) = 1
Et inversement si x=x1 :
w0,1(x1) = 0
II-A. Tableau des poids des mesures pour x=x0 et x=x1
Dans le cas général, comme le poids en x de yi par rapport à celui de yj vaut :
wi,j(x) = (x - xj) / (xi - xj)
On a donc pour x=xi :
wi,j(xi) = (xi - xj) / (xi - xj) = 1
et comme :
wi,j(xi) + wj,i(xi) = 1
On en déduit aussi que :
wj,i(xi) = 0
Par la suite on va également utiliser ces formules dans le cas où x n'est pas compris entre xi et xj, et dans cette configuration on obtiendra des poids négatifs.
III. Interpolation parabolique
Soit une série de 3 points (x0,y0), (x1,y1) et (x2,y2), on souhaite déterminer l'expression des polynômes de Lagrange L(x0), L(x1), et L(x2) en fonction des différents poids des mesures exprimés les uns par rapport aux autres, pour un polynôme d'interpolation de la forme :
L(x) = l0(x) × y0 + l1(x) × y1 + l2(x) × y2
Note importante : on sent bien intuitivement qu'en xi, le poids de yi est maximal par rapport au poids des 2 autres mesures.
En utilisant en particulier la propriété wi,j(xi) = 1, et le fait que le poids en xi de yi par rapport à la somme des poids des 2 autres mesures est égal à 1, on obtient les tableaux des poids des mesures pour x=x0, x=x1 et x=x2.
III-A. Tableau des poids des mesures pour x=x0, x=x1 et x=x2
On constate sur les 3 tableaux que pour ces 3 points x=x0, x=x1 et x=x2, l'expression du polynôme L(x) est de la forme :
L(x) = w0,1(x) × w0,2(x) x y0 + w1,0(x) × w1,2(x) × y1 + w2,0(x) × w2,1(x) x y2
En utilisant le même raisonnement, on voit que l'on peut facilement généraliser ce résultat pour n+1 mesures :
Le coefficient li(x) peut représenter en fait le poids en x de yi relativement au poids total de l'ensemble des autres mesures.
IV. Application numérique
Prenons comme exemple une série de 3 points (1, 0.5), (2, 2) et (3, 4.5), avec donc x0=1, x1=2 et x2=3.
On souhaite déterminer les poids respectifs en x = 1.5 de y0, y1 et y2. Ceci nous permettra ensuite d'évaluer y.
Pour cela, nous allons commencer par calculer les poids wi,j(x) à l'aide de la formule vue précédemment :
wi,j(x) = (x - xj) / (xi - xj)
IV-A. Calcul des poids des mesures
IV-B. Tableau des poids des mesures
L'expression générale de L(x) pour x=1.5 est donc de la forme :
L(1.5) = 0.375 x y0 + 0.75 x y1 - 0.125 x y2
Puis en remplaçant y0, y1 et y2 par leur valeur on obtient donc :
L(1.5) = 0.375 x 0.5 + 0.75 x 2 - 0.125 x 4.5
L(1.5) = 1.125
V. Implémentation en Python
La fonction interpolation_lagrange prend en arguments :
- xm : liste des valeurs xi ;
- ym : la liste des mesures yi ;
- x : la valeur en abscisse.
Elle renvoie la matrice des poids, les coefficients li(x) et la valeur du polynôme de Lagrange en x.
Code Python : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | def interpolation_lagrange(xm, ym, x): Lx=0 # initialise la variable résultat # initialise la matrice des poids wx = [ ['_' for i in range(len(ym))] for j in range(len(xm))] li = [1] * len(ym) # initialise à 1 les éléments de la liste contenant les valeurs des polynômes li(x) for i in range(len(ym)): # parcours des indices de y for j in range(len(xm)): # parcours des indices de x if i != j: # si i est différent de j wx[i][j]=(x -xm[j])/(xm[i]-xm[j]) # poids en x de yi par rapport à yj li[i]=li[i]*wx[i][j] # multiplication de la valeur du polynôme li(x) par le poids Lx = Lx + li[i]*ym[i] # on ajoute à Lx le produit entre li(x) et yi return {'matrice_poids':wx, 'li(x)': li, 'L(x)':Lx} # on retourne la matrice des poids, les coefficients li(x) et la valeur du polynôme de Lagrange en x |
Test de la fonction :
Code Python : | Sélectionner tout |
1 2 | resultat = interpolation_lagrange([1,2,3], [0.5, 2, 4.5], 1.5) # appel de la fonction print(resultat) # affichage du résultat |
Résultat obtenu :
Code Python : | Sélectionner tout |
1 2 3 4 5 6 7 | { "matrice_poids":[['_', 0.5, 0.75], [0.5, '_', 1.5], [0.25, -0.5, '_']], "li(x)":[0.375, 0.75, -0.125], "L(x)":1.125 } |
VI. Conclusion
Après avoir défini le poids en x d'une mesure yi par rapport à celui d'une autre mesure yj, nous avons pu obtenir à l'aide de tableaux et de notre intuition l'expression générale de L(x) pour une série de 3 mesures.
Ceci nous a permis ensuite de généraliser l'interpolation de Lagrange pour une série de n+1 points, enfin nous avons pu l'implémenter en Python.
Sources :
https://fr.wikipedia.org/wiki/Interp...n_lagrangienne
https://en.wikipedia.org/wiki/Linear_interpolation