Discrétisation des équations de la physique - Méthode des différences finies


Approximation de la dérivée d'une fonction

Les équations de la physique sont le plus souvent des équations différentielles, ou équations aux dérivées partielles (comme l'équation de Helmholtz, ou équation des ondes, qui nous intéresse particulièrement ici par la suite), c'est-à-dire des équations dont l'inconnue est une fonction et qui font intervenir cette fonction recherchée ainsi que ses dérivées (dérivées première, seconde, ...).
Par exemple, l'équation assez simple et bien connue (dont la solution est, par définition même, la fonction exponentielle):
ℰ: f '(x) = f (x) , pour tout x∈[0; 1]
avec la condition au bord f (0) = 1.
Dans cette équation différentielle du 1er ordre, on recherche f, c'est-à-dire qu'on recherche les valeurs f (x) pour tous les réels x∈[0; 1].
Il faut revenir au sens et à la défintion du nombre dérivé f '(x). Si f est une fonction effectivement dérivable en x, alors ce nombre dérivé est défini par la limite du taux de variation:
f '(x) =  limh0 f (x + h) − f (x) / h

Ainsi la dérivée est un taux de variation, la différence f (x + h) − f (x) infinitésimal.
La méthode dite des différences finies propose simplement de remplacer ces taux de varations infinitésimaux par des taux de variations finis (la qualification de "fini" est faite par opposition à infiniment petits.
On va donc écrire simplement l'approximatation
f '(x) ≃ f (x + h) − f (x) / h
Cette approximation étant évidemment d'autant meilleure que le pas h est un nombre choisi petit.

Maillage

Imaginons que l'on ne connaisse pas la fonction solution de l'équation différentielle précédente, ou que l'on ne sache pas l'exprimer à l'aide de fonctions usuelles.
On peut néanmoins alors tenter calculer des valeurs approchées de f (x).

L'idée est de se donner un nombre h puis, à partir de la connaissance de f (0) et des approximations précédentes, calculer une valeur approchée de f (0 + h), puis de f (2h), puis f (3h), …
On découpe tout d'abord l'intervalle du problème, ici [0; 1] en N intervalles, chacun de longueur h = 1/N .
On numérote chacun des points obtenus x0, x1, x2, …, xN−1, xN.
Découpage de l'intervalle


La suite des abscisses est une suite arithmétique de raison h, et on a donc x1 = x0 + h, puis x2 = x0 + 2h, et plus généralement, xn = x0 + nh.
Ce découpage de l'intervalle [0; 1] s'appelle une discrétisation, ou encore un maillage de l'intervalle.

Il reste maintenant à utiliser ce maillage et l'approximation de la dérivée par différence finie pour discrétiser l'équation différentielle qui nous intéresse et en donner finalement une solution approchée.

Discrétisation des équations différentielles


Résoudre numériquement l'équation signifie maintenant déterminer des valeurs approchées de f (x0), f (x1), …, f (xN).
Pour simplifier un peu les notations, on introduit la suite (un) définie par

un = f (xn) = f (x0 + nh)
On a vu qu'on pouvait approcher la dérivée f '(xn) par la différence finie
f '(xn) ≃ f (xn + h) − f (xn) / h
soit, comme (xn) est une suite arithmétique de raison h, on a donc xn+1 = xn + h et donc
f '(xn) ≃ f (xn+1) − f (xn) / h
ou encore,
f '(xn) ≃ un+1un / h

En utilisant maintenant la maillage du paragraphe précédent, l'équation de départ
ℰ: f '(x) = f (x) , pour tout x∈[0; 1]
devient
ℰ': f '(xn) = f (xn) , pour tout entier n
et donc avec l'approximation de la dérivée par différence finie,
un+1un / h f '(xn) = f (xn) = un

On aboutit ainsi à la relation de récurrence:
un+1un / h = un
soit aussi
un+1 = (1 + h) un

Finalement, la discrétisation de l'équation différentielle s'écrit comme une relation de récurrence pour une suite:
u0 = f(0) = 1 un+1 = (1 + h) un, pour tout entier nN = 1/h

Cette dernière relation nous permet de calculer tous les termes un de la suite, donc toutes les valeurs approchées prises par la fonction car on rappelle bien que un = f (xn)

Application numérique

Pour N = 10 par exemple, soit un pas h = 0,1, on obtient:
f (0) = u0 = 1 f (0,1) = u1 = (1 + h) u0 = 1,1 f (0,2) = u2 = (1 + h) u1 = 1,21 f (0,3) = u3 = (1 + h) u2 = 1,331 f (0,4) = u4 = (1 + h) u3 = 1,4641 f (0,5) = u5 = (1 + h) u4 = 1,6105 f (0,6) = u6 = (1 + h) u5 = 1,7715 f (0,7) = u7 = (1 + h) u6 ≃ 1,9487 f (0,8) = u8 = (1 + h) u7 ≃ 2,1436 f (0,9) = u9 = (1 + h) u8 ≃ 2,3580 f (1) = u10 = (1 + h) u9 ≃ 2,5937

Il se trouve que pour l'équation , la solution est en fait connue, il s'agit de la fonction exponentielle: f (x) = exp(x) .
On a donc ainsi une bonne occasion d'observer l'efficacité de la méthode, en comparant les résultats approchés obtenus ci-dessus aux valeurs exactes.
Cette comparaison est effectuée sur le graphique suivant.
Représentation graphique des résultats numériques
Représentation graphique de la solution, exacte en rouge, approchée par les valeurs un en noir.


Pour aller plus loin: formules de Taylor

Les formules de Taylor (voir là par exemple) relient d'une manière plsu générale les valeurs d'une fonction en un point et de ses dérivées successives.
Au premier ordre, la formule de Taylor permet d'obtenir une expression approchée de la derivée première: on retrouve la méthode des différences finies vue jusque là.
En utilisant la formule de Taylor jusqu'au second ordre (voire troisième …) on peut approximer de même les dérivées secondes. C'est ce que nous allons utiliser pour approximer l'équation des ondes qui, elle, fait intervenir exclusivement des dérivées secondes.

L'approximation des dérivées secondes avec la formule de Taylor est aussi utilisée et détaillée dans la résolution approchée de l'équation de Poisson.




LongPage: h2: 5 - h3: 0