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 [t0,t1][t_0, t_1] en nn sous-intervalles de largeur h=t1t0nh = \frac{t_1 - t_0}{n}.

Les points de discrétisation sont :

ti=t0+ih,i=0,1,2,,nt_i = t_0 + ih, \quad i = 0, 1, 2, \ldots, n

On note xix(ti)x_i \approx x(t_i) les valeurs approchées de la solution.

Approximation des dérivées

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

x(ti)xi+1xi12h+O(h2)x'(t_i) \approx \frac{x_{i+1} - x_{i-1}}{2h} + O(h^2)

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

x(ti)xi+12xi+xi1h2+O(h2)x''(t_i) \approx \frac{x_{i+1} - 2x_i + x_{i-1}}{h^2} + O(h^2)

Précision

Ces formules sont d'ordre O(h2)O(h^2). 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 :

x(t)=p(t)x(t)+q(t)x(t)+r(t)x''(t) = p(t)x'(t) + q(t)x(t) + r(t)

avec les conditions aux limites x(t0)=αx(t_0) = \alpha et x(tn)=βx(t_n) = \beta.

Substitution

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

xi+12xi+xi1h2=pixi+1xi12h+qixi+ri\frac{x_{i+1} - 2x_i + x_{i-1}}{h^2} = p_i \cdot \frac{x_{i+1} - x_{i-1}}{2h} + q_i x_i + r_i

pi=p(ti)p_i = p(t_i), qi=q(ti)q_i = q(t_i), ri=r(ti)r_i = r(t_i).

Réarrangement

En multipliant par h2h^2 et en regroupant :

xi+12xi+xi1=hpi2(xi+1xi1)+h2qixi+h2rix_{i+1} - 2x_i + x_{i-1} = \frac{hp_i}{2}(x_{i+1} - x_{i-1}) + h^2 q_i x_i + h^2 r_i
(1+hpi2)xi1+(2h2qi)xi+(1hpi2)xi+1=h2ri\left(1 + \frac{hp_i}{2}\right)x_{i-1} + (-2 - h^2 q_i)x_i + \left(1 - \frac{hp_i}{2}\right)x_{i+1} = h^2 r_i

Système linéaire

Pour i=1,2,,n1i = 1, 2, \ldots, n-1 (points intérieurs), on obtient un système de n1n-1 équations à n1n-1 inconnues (x1,x2,,xn1x_1, x_2, \ldots, x_{n-1}).

Les valeurs x0=αx_0 = \alpha et xn=βx_n = \beta 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 :

x(t)=t+(10.2t)x(t),x(1)=2,x(3)=1x''(t) = t + (1 - 0.2t)x(t), \quad x(1) = 2, \quad x(3) = -1

Ici p(t)=0p(t) = 0, q(t)=10.2tq(t) = 1 - 0.2t, r(t)=tr(t) = t.

Cas h = 0.5 (4 sous-intervalles)

Points : t0=1,t1=1.5,t2=2,t3=2.5,t4=3t_0 = 1, t_1 = 1.5, t_2 = 2, t_3 = 2.5, t_4 = 3

Inconnues : x1,x2,x3x_1, x_2, x_3 (3 équations)

Coefficients :

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

xi1+(2h2qi)xi+xi+1=h2rix_{i-1} + (-2 - h^2 q_i)x_i + x_{i+1} = h^2 r_i

Avec h=0.5h = 0.5, h2=0.25h^2 = 0.25 :

  • i=1i = 1 (t1=1.5t_1 = 1.5) : q1=10.3=0.7q_1 = 1 - 0.3 = 0.7, r1=1.5r_1 = 1.5

    x0+(20.25×0.7)x1+x2=0.25×1.5x_0 + (-2 - 0.25 \times 0.7)x_1 + x_2 = 0.25 \times 1.5
    2+(2.175)x1+x2=0.3752 + (-2.175)x_1 + x_2 = 0.375
  • i=2i = 2 (t2=2t_2 = 2) : q2=10.4=0.6q_2 = 1 - 0.4 = 0.6, r2=2r_2 = 2

    x1+(2.15)x2+x3=0.5x_1 + (-2.15)x_2 + x_3 = 0.5
  • i=3i = 3 (t3=2.5t_3 = 2.5) : q3=10.5=0.5q_3 = 1 - 0.5 = 0.5, r3=2.5r_3 = 2.5

    x2+(2.125)x3+x4=0.625x_2 + (-2.125)x_3 + x_4 = 0.625
    x2+(2.125)x3+(1)=0.625x_2 + (-2.125)x_3 + (-1) = 0.625

Système matriciel :

(2.1751012.1501012.125)(x1x2x3)=(0.37520.50.625+1)=(1.6250.51.625)\begin{pmatrix} -2.175 & 1 & 0 \\ 1 & -2.150 & 1 \\ 0 & 1 & -2.125 \end{pmatrix} \begin{pmatrix} x_1 \\ x_2 \\ x_3 \end{pmatrix} = \begin{pmatrix} 0.375 - 2 \\ 0.5 \\ 0.625 + 1 \end{pmatrix} = \begin{pmatrix} -1.625 \\ 0.5 \\ 1.625 \end{pmatrix}

Solution (par élimination de Gauss ou LU) :

x1=0.552,x2=0.424,x3=0.964x_1 = 0.552, \quad x_2 = -0.424, \quad x_3 = -0.964

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 (à t=1.8t = 1.8), ce qui correspond à l'erreur O(h2)O(h^2) des différences finies.


Conditions aux limites sur les dérivées

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

x(t0)=γ,x(tn)=δx'(t_0) = \gamma, \quad x'(t_n) = \delta

Points fantômes

On introduit deux points supplémentaires x1x_{-1} et xn+1x_{n+1} en dehors du domaine.

Les conditions aux limites s'écrivent :

x1x12h=γx1=x12hγ\frac{x_1 - x_{-1}}{2h} = \gamma \quad \Rightarrow \quad x_{-1} = x_1 - 2h\gamma
xn+1xn12h=δxn+1=xn1+2hδ\frac{x_{n+1} - x_{n-1}}{2h} = \delta \quad \Rightarrow \quad x_{n+1} = x_{n-1} + 2h\delta

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

Exemple

Pour le problème :

x(t)=t+(10.2t)x(t),x(1)=0,x(3)=1x''(t) = t + (1 - 0.2t)x(t), \quad x'(1) = 0, \quad x'(3) = -1

Avec h=0.5h = 0.5, le système devient 5×5 (on inclut x0x_0 et x4x_4 comme inconnues) :

(2.2200012.175100012.150100012.125100022.1)(x0x1x2x3x4)=(0.250.3750.50.6251.75)\begin{pmatrix} -2.2 & 2 & 0 & 0 & 0 \\ 1 & -2.175 & 1 & 0 & 0 \\ 0 & 1 & -2.150 & 1 & 0 \\ 0 & 0 & 1 & -2.125 & 1 \\ 0 & 0 & 0 & 2 & -2.1 \end{pmatrix} \begin{pmatrix} x_0 \\ x_1 \\ x_2 \\ x_3 \\ x_4 \end{pmatrix} = \begin{pmatrix} 0.25 \\ 0.375 \\ 0.5 \\ 0.625 \\ 1.75 \end{pmatrix}

Solution :

x0=3.479,  x1=3.702,  x2=4.198,  x3=4.824,  x4=5.428x_0 = -3.479, \; x_1 = -3.702, \; x_2 = -4.198, \; x_3 = -4.824, \; x_4 = -5.428

Extrapolation de Richardson

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

  1. Résoudre avec pas hh → obtenir xi(1)x_i^{(1)}
  2. Résoudre avec pas h/2h/2 → obtenir xi(2)x_i^{(2)}
  3. Extrapoler :
xextrap=x(2)+13(x(2)x(1))x_{\text{extrap}} = x^{(2)} + \frac{1}{3}(x^{(2)} - x^{(1)})

Cette formule est valide pour des différences d'ordre O(h2)O(h^2) et donne une approximation d'ordre O(h4)O(h^4).


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 PVIO(h2)O(h^2) (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.