IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

User

[Actualité] Interpolation de Lagrange ou par pondération des mesures

Noter ce billet
par , 21/07/2022 à 21h58 (7896 Affichages)
I. Introduction

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

Nom : interpolation linéaire.png
Affichages : 2211
Taille : 2,4 Ko

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

Nom : tableaux_poids2.png
Affichages : 2161
Taille : 30,0 Ko

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

Nom : Interpolation_polynomial.png
Affichages : 2178
Taille : 2,0 Ko

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

Nom : tableaux_poids3.png
Affichages : 2175
Taille : 64,2 Ko

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 :

Nom : formule_lagrange.png
Affichages : 2168
Taille : 6,0 Ko

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.

Nom : graphique.png
Affichages : 2157
Taille : 10,4 Ko

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

Nom : tableau_valeurs.png
Affichages : 2162
Taille : 18,4 Ko


IV-B. Tableau des poids des mesures

Nom : tableaux_poids.png
Affichages : 2154
Taille : 20,9 Ko

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 - Visualiser dans une fenêtre à part
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 = [ ['x' 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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
{
   "matrice_poids":[['x', 0.5, 0.75],
      		    [0.5, 'x', 1.5],
                    [0.25, -0.5, 'x']],
   "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

Envoyer le billet « Interpolation de Lagrange ou par pondération des mesures » dans le blog Viadeo Envoyer le billet « Interpolation de Lagrange ou par pondération des mesures » dans le blog Twitter Envoyer le billet « Interpolation de Lagrange ou par pondération des mesures » dans le blog Google Envoyer le billet « Interpolation de Lagrange ou par pondération des mesures » dans le blog Facebook Envoyer le billet « Interpolation de Lagrange ou par pondération des mesures » dans le blog Digg Envoyer le billet « Interpolation de Lagrange ou par pondération des mesures » dans le blog Delicious Envoyer le billet « Interpolation de Lagrange ou par pondération des mesures » dans le blog MySpace Envoyer le billet « Interpolation de Lagrange ou par pondération des mesures » dans le blog Yahoo

Commentaires