Problèmes aux limites — Méthode des différences finies

Objectifs d'apprentissage

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

  • Discrétiser une ÉD par différences finies
  • Construire le système linéaire tridiagonal associé
  • Traiter les conditions aux limites sur les valeurs et sur les dérivées
  • Comparer la méthode des différences finies à la méthode de tir

Prérequis

  • Méthode de tir
  • Différences finies pour la dérivation (Chapitre 5)
  • Résolution de systèmes linéaires (Chapitre 3)

Principe de la méthode

La méthode des différences finies procède en deux étapes :

💡

Étapes de la méthode

  1. Discrétisation : Remplacer les dérivées par des approximations aux différences finies
  2. Résolution : Résoudre le système linéaire (ou non linéaire) résultant

Discrétisation

Maillage

On divise l'intervalle en sous-intervalles de largeur .

Les points de discrétisation sont :

On note les valeurs approchées de la solution.

Approximation des dérivées

Dérivée première (différence centrée) :

Dérivée seconde (différence centrée) :

Précision

Ces formules sont d'ordre . La précision de la méthode des différences finies dépend directement de la finesse du maillage.


Application à une ÉD linéaire d'ordre 2

Considérons l'ÉD :

avec les conditions aux limites et .

Substitution

En remplaçant les dérivées par leurs approximations :

, , .

Réarrangement

En multipliant par et en regroupant :

Système linéaire

Pour (points intérieurs), on obtient un système de équations à inconnues ().

Les valeurs et sont connues (conditions aux limites).

💡

Structure tridiagonale

Le système a une matrice tridiagonale — seuls les coefficients sur la diagonale principale et les deux diagonales adjacentes sont non nuls.


Exemple détaillé

Résolvons le même PVL que dans la leçon précédente :

Ici , , .

Cas h = 0.5 (4 sous-intervalles)

Points :

Inconnues : (3 équations)

Coefficients :

Pour chaque point intérieur , l'équation discrétisée est :

Avec , :

  • () : ,

  • () : ,

  • () : ,

Système matriciel :

Solution (par élimination de Gauss ou LU) :

Cas h = 0.2 (10 sous-intervalles)

Avec un maillage plus fin, on obtient un système 9×9 :

tDiff. finiesMéthode de tir
1.02.0002.000
1.21.3511.348
1.40.7920.787
1.60.3110.305
1.8−0.097−0.104
2.0−0.436−0.443
2.2−0.705−0.712
2.4−0.903−0.908
2.6−1.022−1.026
2.8−1.058−1.060
3.0−1.000−1.000

Comparaison

Les deux méthodes donnent des résultats très proches. L'écart maximal est d'environ 0.007 (à ), ce qui correspond à l'erreur des différences finies.


Conditions aux limites sur les dérivées

Parfois, les conditions aux limites portent sur les dérivées :

Points fantômes

On introduit deux points supplémentaires et en dehors du domaine.

Les conditions aux limites s'écrivent :

On substitue ces expressions dans les équations aux bords et on obtient un système élargi.

Exemple

Pour le problème :

Avec , le système devient 5×5 (on inclut et comme inconnues) :

Solution :


Extrapolation de Richardson

Pour améliorer la précision, on peut appliquer l'extrapolation de Richardson :

  1. Résoudre avec pas → obtenir
  2. Résoudre avec pas → obtenir
  3. Extrapoler :

Cette formule est valide pour des différences d'ordre et donne une approximation d'ordre .


Algorithme

python
import numpy as np

def finite_differences(p, q, r, t0, t1, alpha, beta, n):
  """
  Méthode des différences finies pour x'' = p(t)x' + q(t)x + r(t).

  Paramètres:
      p, q, r: fonctions de t
      t0, t1: bornes de l'intervalle
      alpha, beta: conditions aux limites x(t0), x(t1)
      n: nombre de sous-intervalles

  Retourne:
      t, x: solution approchée
  """
  h = (t1 - t0) / n
  t = np.linspace(t0, t1, n + 1)

  # Construction de la matrice tridiagonale
  # Système pour x_1, ..., x_{n-1}
  A = np.zeros((n - 1, n - 1))
  b = np.zeros(n - 1)

  for i in range(n - 1):
      ti = t[i + 1]  # t_{i+1} dans la numérotation Python
      pi, qi, ri = p(ti), q(ti), r(ti)

      # Coefficients
      c_minus = 1 - h * pi / 2
      c_center = -2 + h**2 * qi
      c_plus = 1 + h * pi / 2

      # Diagonale principale
      A[i, i] = c_center

      # Diagonales adjacentes
      if i > 0:
          A[i, i - 1] = c_minus
      if i < n - 2:
          A[i, i + 1] = c_plus

      # Second membre
      b[i] = h**2 * ri
      if i == 0:
          b[i] -= c_minus * alpha  # x_0 = alpha
      if i == n - 2:
          b[i] -= c_plus * beta    # x_n = beta

  # Résolution du système
  x_interior = np.linalg.solve(A, b)

  # Assemblage de la solution complète
  x = np.zeros(n + 1)
  x[0] = alpha
  x[1:n] = x_interior
  x[n] = beta

  return t, x

Comparaison des méthodes

CritèreMéthode de tirDifférences finies
ApprocheRésout plusieurs PVIRésout un système linéaire
Complexité (linéaire)2 résolutions PVI1 système tridiagonal
Complexité (non linéaire)Itérations de tirSystème non linéaire
CL sur dérivéesAdaptation facilePoints fantômes
Extension aux ÉDPDifficileNaturelle
PrécisionDépend du solveur PVI (centrée)

Recommandations

  • Différences finies : problèmes linéaires, extension aux ÉDP, CL mixtes
  • Méthode de tir : problèmes non linéaires, utilise les solveurs PVI existants

Résumé

  • La méthode des différences finies discrétise l'ÉD en remplaçant les dérivées par des quotients de différences
  • On obtient un système linéaire tridiagonal pour les ÉD linéaires
  • Les conditions sur les dérivées se traitent avec des points fantômes
  • L'extrapolation de Richardson améliore la précision
  • Les deux méthodes (tir et différences finies) donnent des résultats similaires

Conclusion du chapitre

Ce chapitre a couvert les principales méthodes numériques pour les équations différentielles :

Partie A — Problèmes à conditions initiales

  • Taylor : base théorique
  • Euler : simple mais peu précis
  • Runge-Kutta : méthode recommandée (RK4)
  • Adams-Moulton : efficace pour longues intégrations

Partie B — Problèmes à conditions aux limites

  • Méthode de tir : transforme en PVI
  • Différences finies : discrétisation directe

Ces techniques sont fondamentales en ingénierie, physique et sciences computationnelles.