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
- Discrétisation : Remplacer les dérivées par des approximations aux différences finies
- 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 :
où , , .
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 :
| t | Diff. finies | Méthode de tir |
|---|---|---|
| 1.0 | 2.000 | 2.000 |
| 1.2 | 1.351 | 1.348 |
| 1.4 | 0.792 | 0.787 |
| 1.6 | 0.311 | 0.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 :
- Résoudre avec pas → obtenir
- Résoudre avec pas → obtenir
- Extrapoler :
Cette formule est valide pour des différences d'ordre et donne une approximation d'ordre .
Algorithme
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, xComparaison des méthodes
| Critère | Méthode de tir | Différences finies |
|---|---|---|
| Approche | Résout plusieurs PVI | Résout un système linéaire |
| Complexité (linéaire) | 2 résolutions PVI | 1 système tridiagonal |
| Complexité (non linéaire) | Itérations de tir | Système non linéaire |
| CL sur dérivées | Adaptation facile | Points fantômes |
| Extension aux ÉDP | Difficile | Naturelle |
| Précision | Dé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.