Polynômes de Lagrange

Objectifs d'apprentissage

À la fin de cette leçon, vous serez en mesure de :

  • Construire les polynômes de base de Lagrange πi(x)\pi_i(x)
  • Appliquer la formule de Lagrange pour l'interpolation linéaire et quadratique
  • Calculer un polynôme d'interpolation pour des données tabulées
  • Estimer l'erreur d'interpolation à l'aide de la formule d'erreur

Prérequis

  • Introduction à l'interpolation et collocation
  • Manipulation de produits et de sommes

L'idée de Lagrange

Motivation

Dans la leçon précédente, nous avons vu que construire le polynôme de collocation nécessite de résoudre un système d'équations linéaires. Joseph-Louis Lagrange a proposé une méthode plus élégante : construire directement le polynôme comme une combinaison linéaire de polynômes de base spéciaux.

Principe

On cherche à écrire le polynôme d'interpolation sous la forme :

Pn(x)=f0π0(x)+f1π1(x)++fnπn(x)=i=0nfiπi(x)P_n(x) = f_0 \cdot \pi_0(x) + f_1 \cdot \pi_1(x) + \cdots + f_n \cdot \pi_n(x) = \sum_{i=0}^{n} f_i \cdot \pi_i(x)

où les πi(x)\pi_i(x) sont des polynômes de base à déterminer.


Cas linéaire (n = 1)

Construction des polynômes de base

Pour deux points (x0,f0)(x_0, f_0) et (x1,f1)(x_1, f_1), on cherche :

P1(x)=f0π0(x)+f1π1(x)P_1(x) = f_0 \cdot \pi_0(x) + f_1 \cdot \pi_1(x)

Les polynômes π0(x)\pi_0(x) et π1(x)\pi_1(x) doivent satisfaire :

  • π0(x0)=1\pi_0(x_0) = 1 et π0(x1)=0\pi_0(x_1) = 0
  • π1(x0)=0\pi_1(x_0) = 0 et π1(x1)=1\pi_1(x_1) = 1

Ainsi, en x=x0x = x_0 : P1(x0)=f01+f10=f0P_1(x_0) = f_0 \cdot 1 + f_1 \cdot 0 = f_0 \quad \checkmark

Et en x=x1x = x_1 : P1(x1)=f00+f11=f1P_1(x_1) = f_0 \cdot 0 + f_1 \cdot 1 = f_1 \quad \checkmark

Formules explicites

π0(x)=xx1x0x1\pi_0(x) = \frac{x - x_1}{x_0 - x_1}
π1(x)=xx0x1x0\pi_1(x) = \frac{x - x_0}{x_1 - x_0}

Vérification :

  • π0(x0)=x0x1x0x1=1\pi_0(x_0) = \frac{x_0 - x_1}{x_0 - x_1} = 1 \quad \checkmark
  • π0(x1)=x1x1x0x1=0\pi_0(x_1) = \frac{x_1 - x_1}{x_0 - x_1} = 0 \quad \checkmark

Exemple numérique

Soit les points (1.0,2.0)(1.0, 2.0) et (4.0,0.5)(4.0, 0.5).

π0(x)=x414=x43=x43\pi_0(x) = \frac{x - 4}{1 - 4} = \frac{x - 4}{-3} = -\frac{x - 4}{3}
π1(x)=x141=x13\pi_1(x) = \frac{x - 1}{4 - 1} = \frac{x - 1}{3}

Le polynôme d'interpolation est :

P1(x)=2.0(x43)+0.5x13P_1(x) = 2.0 \cdot \left(-\frac{x - 4}{3}\right) + 0.5 \cdot \frac{x - 1}{3}
P1(x)=2(x4)+0.5(x1)3=2x+8+0.5x0.53=1.5x+7.53P_1(x) = \frac{-2(x - 4) + 0.5(x - 1)}{3} = \frac{-2x + 8 + 0.5x - 0.5}{3} = \frac{-1.5x + 7.5}{3}
P1(x)=0.5x+2.5P_1(x) = -0.5x + 2.5

Cas quadratique (n = 2)

Construction des polynômes de base

Pour trois points (x0,f0),(x1,f1),(x2,f2)(x_0, f_0), (x_1, f_1), (x_2, f_2), les polynômes de base sont :

π0(x)=(xx1)(xx2)(x0x1)(x0x2)\pi_0(x) = \frac{(x - x_1)(x - x_2)}{(x_0 - x_1)(x_0 - x_2)}
π1(x)=(xx0)(xx2)(x1x0)(x1x2)\pi_1(x) = \frac{(x - x_0)(x - x_2)}{(x_1 - x_0)(x_1 - x_2)}
π2(x)=(xx0)(xx1)(x2x0)(x2x1)\pi_2(x) = \frac{(x - x_0)(x - x_1)}{(x_2 - x_0)(x_2 - x_1)}

Chaque πi(x)\pi_i(x) vaut 1 en xix_i et 0 aux autres points.


Formule générale de Lagrange

Énoncé

Pour n+1n+1 points (x0,f0),(x1,f1),,(xn,fn)(x_0, f_0), (x_1, f_1), \ldots, (x_n, f_n), le polynôme de Lagrange est :

Pn(x)=i=0nfiπi(x)P_n(x) = \sum_{i=0}^{n} f_i \cdot \pi_i(x)

où les polynômes de base de Lagrange sont :

πi(x)=j=0,jinxxjxixj\pi_i(x) = \prod_{j=0, j \neq i}^{n} \frac{x - x_j}{x_i - x_j}

Lecture de la formule

La notation j=0,jin\prod_{j=0, j \neq i}^{n} signifie « le produit pour tous les indices jj de 0 à nn, sauf j=ij = i ». Autrement dit, pour construire πi(x)\pi_i(x), on multiplie tous les facteurs xxjxixj\frac{x - x_j}{x_i - x_j} en omettant celui où j=ij = i (qui donnerait xxixixi=00\frac{x - x_i}{x_i - x_i} = \frac{0}{0}, indéfini).

Exemple concret : Pour n=2n = 2 (3 points), le polynôme π1(x)\pi_1(x) s'écrit :

π1(x)=xx0x1x0xx2x1x2\pi_1(x) = \frac{x - x_0}{x_1 - x_0} \cdot \frac{x - x_2}{x_1 - x_2}

On a omis le terme j=1j = 1 dans le produit.

💡

Propriétés des polynômes de base

Les polynômes de base πi(x)\pi_i(x) possèdent trois propriétés fondamentales :

  1. Degré : Chaque πi(x)\pi_i(x) est un polynôme de degré nn (car c'est un produit de nn facteurs linéaires)

  2. Propriété de Kronecker : πi(xj)=δij\pi_i(x_j) = \delta_{ij}, où δij\delta_{ij} est le symbole de Kronecker :

    • δij=1\delta_{ij} = 1 si i=ji = j
    • δij=0\delta_{ij} = 0 si iji \neq j

    Intuitivement : πi\pi_i « s'allume » uniquement au point xix_i.

  3. Partition de l'unité : i=0nπi(x)=1\sum_{i=0}^{n} \pi_i(x) = 1 pour tout xx. Cette propriété garantit que si tous les fif_i sont égaux à une constante cc, alors Pn(x)=cP_n(x) = c.


Exemple complet : interpolation de F(x)

Considérons la table de valeurs suivante :

xF(x)
01
11
22
35

Interpolation linéaire (2 points)

Utilisons les points (1,1)(1, 1) et (2,2)(2, 2) pour estimer F(1.7)F(1.7).

P1(x)=1x212+2x121=(x2)+2(x1)P_1(x) = 1 \cdot \frac{x - 2}{1 - 2} + 2 \cdot \frac{x - 1}{2 - 1} = -(x - 2) + 2(x - 1)
P1(x)=x+2+2x2=xP_1(x) = -x + 2 + 2x - 2 = x

Donc P1(1.7)=1.7P_1(1.7) = 1.7.

Interpolation quadratique (3 points)

Utilisons les points (0,1),(1,1),(2,2)(0, 1), (1, 1), (2, 2).

π0(x)=(x1)(x2)(01)(02)=(x1)(x2)2\pi_0(x) = \frac{(x-1)(x-2)}{(0-1)(0-2)} = \frac{(x-1)(x-2)}{2}
π1(x)=(x0)(x2)(10)(12)=x(x2)1=x(x2)\pi_1(x) = \frac{(x-0)(x-2)}{(1-0)(1-2)} = \frac{x(x-2)}{-1} = -x(x-2)
π2(x)=(x0)(x1)(20)(21)=x(x1)2\pi_2(x) = \frac{(x-0)(x-1)}{(2-0)(2-1)} = \frac{x(x-1)}{2}

Le polynôme est :

P2(x)=1(x1)(x2)2+1(x(x2))+2x(x1)2P_2(x) = 1 \cdot \frac{(x-1)(x-2)}{2} + 1 \cdot (-x(x-2)) + 2 \cdot \frac{x(x-1)}{2}

Après simplification :

P2(x)=12(x2x+2)P_2(x) = \frac{1}{2}(x^2 - x + 2)

Donc P2(1.7)=12(1.721.7+2)=12(2.891.7+2)=3.192=1.595P_2(1.7) = \frac{1}{2}(1.7^2 - 1.7 + 2) = \frac{1}{2}(2.89 - 1.7 + 2) = \frac{3.19}{2} = 1.595.

Interpolation cubique (4 points)

En utilisant les 4 points (0,1),(1,1),(2,2),(3,5)(0, 1), (1, 1), (2, 2), (3, 5), on obtient après calcul :

P3(x)=16(x3x+6)P_3(x) = \frac{1}{6}(x^3 - x + 6)

Vérification que P3P_3 passe bien par les 4 points :

  • P3(0)=16(00+6)=1P_3(0) = \frac{1}{6}(0 - 0 + 6) = 1 \quad \checkmark
  • P3(1)=16(11+6)=1P_3(1) = \frac{1}{6}(1 - 1 + 6) = 1 \quad \checkmark
  • P3(2)=16(82+6)=2P_3(2) = \frac{1}{6}(8 - 2 + 6) = 2 \quad \checkmark
  • P3(3)=16(273+6)=5P_3(3) = \frac{1}{6}(27 - 3 + 6) = 5 \quad \checkmark

Donc P3(1.7)=16(1.731.7+6)=16(4.9131.7+6)=9.21361.536P_3(1.7) = \frac{1}{6}(1.7^3 - 1.7 + 6) = \frac{1}{6}(4.913 - 1.7 + 6) = \frac{9.213}{6} \approx 1.536

⚠️

Observation importante

Les estimations diffèrent selon le degré du polynôme utilisé. Plus on ajoute de points, plus le polynôme peut osciller. Ce phénomène sera étudié dans la leçon sur l'instabilité.


Formule d'erreur d'interpolation

Théorème

Soit ff une fonction (n+1)(n+1) fois continûment dérivable sur l'intervalle [a,b][a, b] contenant les points x0,x1,,xnx_0, x_1, \ldots, x_n. L'erreur d'interpolation en un point xx est :

En(x)=f(x)Pn(x)=f(n+1)(ξ)(n+1)!i=0n(xxi)E_n(x) = f(x) - P_n(x) = \frac{f^{(n+1)}(\xi)}{(n+1)!} \prod_{i=0}^{n}(x - x_i)

ξ\xi est un point (inconnu) dans l'intervalle contenant xx et tous les xix_i.

Interprétation

L'erreur dépend de deux facteurs :

  1. La dérivée (n+1)(n+1)-ième de ff : Plus ff est « lisse » (dérivées petites), plus l'erreur est faible. Une fonction très oscillante aura des dérivées d'ordre élevé grandes, donc une erreur potentiellement importante.

  2. Le produit (xxi)\prod(x - x_i) : Ce terme s'annule exactement aux points d'interpolation (l'erreur y est nulle par construction) et croît en s'éloignant de ces points.

⚠️

Remarque importante

Le point ξ\xi dans la formule d'erreur dépend de xx : on devrait écrire ξ=ξ(x)\xi = \xi(x). Ce point n'est généralement pas connu explicitement, ce qui limite l'utilisation directe de la formule.

Remarques sur le comportement de l'erreur

1. Cas d'une fonction polynomiale

Si f(x)f(x) est elle-même un polynôme de degré n\leq n, alors f(n+1)(x)=0f^{(n+1)}(x) = 0 pour tout xx. Dans ce cas, l'erreur est exactement nulle : le polynôme d'interpolation coïncide avec ff.

2. Danger de l'extrapolation

Lorsqu'on évalue le polynôme en un point xex_e extérieur à l'intervalle [x0,xn][x_0, x_n], le produit i=0n(xexi)\prod_{i=0}^{n}(x_e - x_i) devient grand car tous les facteurs ont le même signe :

xe[x0,xn]i=0n(xexi) est grandx_e \notin [x_0, x_n] \quad \Rightarrow \quad \left|\prod_{i=0}^{n}(x_e - x_i)\right| \text{ est grand}

C'est pourquoi l'extrapolation (estimer en dehors des données) est généralement peu fiable.

3. Erreur nulle aux points de collocation

Par construction, En(xi)=f(xi)Pn(xi)=0E_n(x_i) = f(x_i) - P_n(x_i) = 0 pour tout point de collocation. Cela se retrouve dans la formule : le produit (xxj)\prod(x - x_j) s'annule quand x=xix = x_i.

Le problème pratique : on ne connaît pas f !

En pratique, si on connaissait la fonction f(x)f(x) et ses dérivées, on n'aurait pas besoin d'interpoler ! La formule d'erreur semble donc inutilisable. Cependant, cette formule reste précieuse dans plusieurs situations :

Cas 1 : La fonction est connue analytiquement

Parfois, on dispose d'une formule pour f(x)f(x), mais son évaluation est coûteuse (intégrale, série, équation différentielle). On construit alors une table de valeurs et on interpole. Dans ce cas, on peut calculer les dérivées et borner l'erreur.

Cas 2 : On connaît une borne sur les dérivées

Même sans connaître ff exactement, on peut parfois majorer ses dérivées. Par exemple :

  • Pour des données physiques « lisses », on suppose que f(n+1)(x)M|f^{(n+1)}(x)| \leq M pour une constante MM raisonnable
  • On obtient alors une borne d'erreur : En(x)M(n+1)!(xxi)|E_n(x)| \leq \frac{M}{(n+1)!} |\prod(x - x_i)|

Cas 3 : Estimation empirique avec Newton-Gregory

La méthode de Newton-Gregory (leçon suivante) offre une alternative pratique : on estime l'erreur par le terme suivant du développement, sans connaître ff. C'est souvent la méthode privilégiée en pratique.

En résumé

La formule d'erreur de Lagrange est surtout utile pour :

  • L'analyse théorique : comprendre comment l'erreur évolue avec nn et le placement des points
  • Le calcul de bornes : quand on dispose d'informations sur les dérivées de ff
  • La comparaison de méthodes : justifier le choix des points de Tchebychev, par exemple

Exemple : estimation d'erreur pour sin(x)

Données

Considérons la table de sin(x)\sin(x) avec un pas h=0.4h = 0.4 :

xsin(x)
0.10.09983
0.50.47943
0.90.78333
1.30.96356
1.70.99166

Interpolation quadratique en x = 0.8

Utilisons les 3 premiers points : (0.1,0.09983),(0.5,0.47943),(0.9,0.78333)(0.1, 0.09983), (0.5, 0.47943), (0.9, 0.78333).

Après calcul, on obtient P2(0.8)=0.714452P_2(0.8) = 0.714452.

La valeur exacte est sin(0.8)=0.717356\sin(0.8) = 0.717356.

L'erreur réelle est donc : E2(0.8)=0.7173560.714452=0.002904E_2(0.8) = 0.717356 - 0.714452 = 0.002904.

Bornes d'erreur théoriques

Pour f(x)=sin(x)f(x) = \sin(x), la dérivée troisième est f(3)(x)=cos(x)f^{(3)}(x) = -\cos(x).

Sur l'intervalle [0.1,0.9][0.1, 0.9] : cos(x)1|\cos(x)| \leq 1.

Le produit (0.80.1)(0.80.5)(0.80.9)=0.7×0.3×(0.1)=0.021(0.8 - 0.1)(0.8 - 0.5)(0.8 - 0.9) = 0.7 \times 0.3 \times (-0.1) = -0.021.

L'erreur est bornée par :

E2(0.8)13!×0.021=0.0216=0.0035|E_2(0.8)| \leq \frac{1}{3!} \times |{-0.021}| = \frac{0.021}{6} = 0.0035

Notre erreur réelle (0.0029) est bien inférieure à cette borne.


Algorithme Python

Principe de l'implémentation

L'algorithme traduit directement la formule de Lagrange en code :

  1. Fonction lagrange_basis : Calcule un polynôme de base πi(x)\pi_i(x) en multipliant tous les facteurs xxjxixj\frac{x - x_j}{x_i - x_j} pour jij \neq i.

  2. Fonction lagrange_interpolation : Calcule Pn(x)=i=0nfiπi(x)P_n(x) = \sum_{i=0}^{n} f_i \cdot \pi_i(x) en sommant les contributions de chaque point.

Complexité algorithmique

  • Temps : O(n2)O(n^2) pour évaluer Pn(x)P_n(x) en un point (deux boucles imbriquées)
  • Espace : O(n)O(n) pour stocker les données

Cette complexité quadratique rend l'algorithme moins efficace que Newton-Gregory pour de nombreuses évaluations.

lagrange.pypython
import numpy as np

def lagrange_basis(x_points, i, x):
  """
  Calcule le i-ème polynôme de base de Lagrange π_i(x).

  Implémente la formule :
      π_i(x) = ∏_{j≠i} (x - x_j) / (x_i - x_j)

  Paramètres:
      x_points : tableau des abscisses [x_0, x_1, ..., x_n]
      i : indice du polynôme de base à calculer
      x : point où évaluer π_i

  Retourne:
      π_i(x) : valeur du i-ème polynôme de base en x
  """
  n = len(x_points)
  result = 1.0

  for j in range(n):
      if j != i:  # On exclut j = i du produit
          # Multiplie par le facteur (x - x_j) / (x_i - x_j)
          result *= (x - x_points[j]) / (x_points[i] - x_points[j])

  return result

def lagrange_interpolation(x_points, y_points, x):
  """
  Calcule P_n(x) par la formule de Lagrange.

  Implémente la formule :
      P_n(x) = Σ_{i=0}^{n} f_i · π_i(x)

  Paramètres:
      x_points : abscisses des points d'interpolation [x_0, ..., x_n]
      y_points : ordonnées correspondantes [f_0, ..., f_n]
      x : point où évaluer le polynôme interpolant

  Retourne:
      P_n(x) : valeur interpolée au point x

  Note:
      Les abscisses x_points doivent être distinctes (pas de doublon).
  """
  n = len(x_points)
  result = 0.0

  # Somme sur tous les points de données
  for i in range(n):
      # Ajoute la contribution f_i · π_i(x)
      result += y_points[i] * lagrange_basis(x_points, i, x)

  return result

# === Exemple d'utilisation ===
# Interpolation de sin(x) avec 3 points (interpolation quadratique)

x_data = np.array([0.1, 0.5, 0.9])  # Abscisses connues
y_data = np.array([0.09983, 0.47943, 0.78333])  # sin(x) aux abscisses

x_eval = 0.8  # Point où on veut estimer sin(x)
p_x = lagrange_interpolation(x_data, y_data, x_eval)
exact = np.sin(x_eval)

print(f"P_2({x_eval}) = {p_x:.6f}")
print(f"sin({x_eval}) = {exact:.6f}")
print(f"Erreur = {abs(exact - p_x):.6f}")

Avantages et inconvénients

AvantagesInconvénients
Formule explicite, pas de système à résoudreCoût de calcul élevé : O(n²) pour évaluer P(x)
Facilité de compréhension et d'implémentationAjout d'un point nécessite de tout recalculer
Formule d'erreur directement applicableInstabilité numérique pour n grand

Résumé

  • La formule de Lagrange exprime le polynôme d'interpolation comme combinaison linéaire de polynômes de base πi(x)\pi_i(x)
  • Chaque polynôme de base vaut 1 en xix_i et 0 aux autres points
  • La formule d'erreur permet d'estimer la précision de l'interpolation
  • L'erreur dépend de la dérivée (n+1)(n+1)-ième de ff et de la distance aux points d'interpolation

Pour aller plus loin

La prochaine leçon présentera la méthode de Newton-Gregory, qui utilise les différences finies pour construire le polynôme d'interpolation de manière incrémentale. Cette approche permet d'ajouter facilement des points sans tout recalculer.