Stabilité de Von Neumann

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

En analyse numérique, l'analyse de stabilité de von Neumann est un procédé permettant de vérifier la stabilité numérique de schémas utilisant la méthode des différences finies pour des équations aux dérivées partielles[1]. Cette analyse est basée sur la décomposition de l'erreur numérique en série de Fourier et fut développée au Laboratoire national de Los Alamos après avoir été brièvement décrit dans un article de Crank et Nicolson[2]. Plus tard, la méthode fut traitée de manière plus rigoureuse dans un article[3] coécrit par von Neumann.

Stabilité numérique[modifier | modifier le code]

La stabilité d'un schéma numérique est intimement liée à l'erreur numérique. Un schéma de différences finies est dit stable si les erreurs commises en un pas de temps ne font pas augmenter les erreurs au fil des itérations. Si les erreurs diminuent et finissent par s'estomper, le schéma numérique est dit stable. Si au contraire, l'erreur croît à chaque itération, le schéma est dit instable. La stabilité d'un schéma peut être déterminée grâce à l'analyse de von Neumann. Pour des problèmes dépendants du temps, la stabilité garantit qu'une méthode numérique produise une solution bornée lorsque la solution de l'équation différentielle exacte est bornée. La stabilité d'un schéma peut être ardue, surtout lorsque l'équation considérée est non linéaire.

Dans certains cas, la stabilité de von Neumann est suffisante et nécessaire pour la stabilité au sens de Lax–Richtmyer (comme utilisée dans le théorème de Lax): l'EDP et le schéma aux différences finies sont linéaires ; l'EDP est à coefficients constants avec des conditions de bord périodiques et dépend de deux variables indépendantes ; et le schéma n'utilise pas plus de deux niveaux de temps[4]. La stabilité de von Neumann est nécessaire dans une bien plus vaste variété de cas. La relative simplicité de cette méthode implique qu'elle est souvent utilisée à la place d'une analyse de stabilité plus détaillée afin de donner une bonne idée des restrictions sur les tailles des pas.

Illustration de la méthode[modifier | modifier le code]

La méthode de von Neumann est basée sur la décomposition de l'erreur en séries de Fourier. Afin d'illustrer cette procédure, considérons l'équation de la chaleur uni-dimensionnelle


  \frac{\partial u}{\partial t} = \alpha \frac{\partial^2 u}{\partial x^2}

définie sur L, qui peut dans ce cas être discretisée de la manière suivante


  \quad (1) \qquad u_j^{n + 1} = u_j^{n} + r \left(u_{j + 1}^n - 2 u_j^n + u_{j - 1}^n \right)

r = \frac{\alpha\, \Delta t}{\Delta x^2}

et la solution u_j^{n} de l'équation discrète approxime la solution analytique u(x,t) de l'EDP sur les points de grille.

Définissons l'erreur d'arrondi \epsilon_j^n par


  \epsilon_j^n = N_j^n - u_j^n

u_j^n est la solution de l'équation discrétisée (1) qui serait implémentée en l'absence d'erreurs d'arrondi, et N_j^n est la solution numérique obtenue par précision arithmétique finie. Comme la solution exacte u_j^n doit vérifier la solution discrétisée, l'erreur \epsilon_j^n doit elle-aussi vérifier l'équation discrétisée[5]. Ainsi


  \quad (2) \qquad \epsilon_j^{n + 1} = \epsilon_j^n + r \left(\epsilon_{j + 1}^n - 2 \epsilon_j^n + \epsilon_{j - 1}^n \right)

est une relation de récurrence pour l'erreur. Les équations (1) et (2) montrent que l'erreur et la solution numérique on le même comportement en fonction du temps. Pour des équations différentielles linéaires avec des conditions de bord périodiques, la variation spatiale de l'erreur peut être décomposée en une série de Fourier finie sur l'intervalle L, par


  \quad (3) \qquad \epsilon(x) = \sum_{m=1}^{M} A_m e^{ik_m x}

où le nombre d'onde k_m = \frac{\pi m}{L} avec m = 1,2,\ldots,M et M = L/\Delta x. La dépendance du temps de l'erreur est incluse en supposant que l'amplitude de l'erreur A_m est une fonction du temps. Sachant que l'erreur tend à croître ou décroître de manière exponentielle avec le temps, il est raisonnable de supposer que l'amplitude varie exponentiellement avec le temps ; d'où


  \quad (4) \qquad \epsilon(x,t) = \sum_{m=1}^{M} e^{at} e^{ik_m x}

a est une constante.

Comme l'équation des différences de l'erreur est linéaire, il est suffisant de considérer la croissance de l'erreur pour un terme choisi:


  \quad (5) \qquad \epsilon_m(x,t) = e^{at} e^{ik_m x}

Les caractéristiques de stabilité peuvent être étudiées en utilisant cette forme de l'erreur, sans perte de généralité. Pour trouver la variation de l'erreur en fonction du temps, on substitue l'équation (5) dans l'équation (2), après avoir noté que

  • 
\begin{align}
 \epsilon_j^n & = e^{at} e^{ik_m x} \\
 \epsilon_j^{n+1} & = e^{a(t+\Delta t)} e^{ik_m x} \\
 \epsilon_{j+1}^n & = e^{at} e^{ik_m (x+\Delta x)} \\
 \epsilon_{j-1}^n & = e^{at} e^{ik_m (x-\Delta x)},
\end{align}

pour arriver à (après simplification)


  \quad (6) \qquad e^{a\Delta t} = 1 + \frac{\alpha \Delta t}{\Delta x^2} \left(e^{ik_m \Delta x} + e^{-ik_m \Delta x} -  2\right).

En utilisant les identités suivantes


  \qquad \cos(k_m \Delta x) = \frac{e^{ik_m \Delta x} + e^{-ik_m \Delta x}}{2} \qquad \text{et} \qquad \sin^2\frac{k_m \Delta x}{2} = \frac{1 - \cos(k_m \Delta x)}{2}

on peut réécrire (6) comme


  \quad (7) \qquad e^{a\Delta t} = 1 - \frac{4\alpha \Delta t}{\Delta x^2} \sin^2 (k_m \Delta x/2)

Définissons le facteur d'amplitude


  G \equiv \frac{\epsilon_j^{n+1}}{\epsilon_j^n}

La condition nécessaire et suffisante pour que l'erreur reste bornée est \vert G \vert \leq 1. Cependant,


  \quad (8) \qquad G = \frac{e^{a(t+\Delta t)} e^{ik_m x}}{e^{at} e^{ik_m x}} = e^{a\Delta t}

Ainsi, des équations (7) et (8) on tire que la condition de stabilité est donnée par


  \quad (9) \qquad \left\vert 1 - \frac{4\alpha \Delta t}{\Delta x^2} \sin^2 (k_m \Delta x/2) \right\vert \leq 1

Afin que la condition ci-dessus soit vraie pour tout \sin^2 (k_m \Delta x/2), on a


  \quad (10) \qquad \frac{\alpha \Delta t}{\Delta x^2} \leq \frac{1}{2}

L'équation (10) donne la condition de stabilité pour le schéma FTCS appliqué à l'équation de la chaleur uni-dimensionnelle. Elle dit que pour un \Delta x donné, la valeur de \Delta t doit être assez petit pour vérifier l'équation (10).

Références[modifier | modifier le code]

(en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « Von Neumann stability analysis » (voir la liste des auteurs)

  1. (en) Eugene Isaacson et Herbert Bishop Keller (en), Analysis of numerical methods, Dover,‎ 1994 (ISBN 978-0-48613798-8, lire en ligne), p. 523-530
  2. (en) J. Crank et P. Nicolson, « A Practical Method for Numerical Evaluation of Solutions of Partial Differential Equations of Heat Conduction Type », Proc. Camb. Phil. Soc., vol. 43,‎ 1947, p. 50-67 (DOI 10.1007/BF02127704)
  3. (en) J. G. Charney, R. Fjørtoft et J. von Neumann, « Numerical Integration of the Barotropic Vorticity Equation », Tellus, vol. 2,‎ 1950, p. 237-254 (DOI 10.1111/j.2153-3490.1950.tb00336.x)
  4. (en) G. D. Smith, Numerical Solution of Partial Differential Equations: Finite Difference Methods,‎ 1985, 3e éd., p. 67-68
  5. (en) Anderson, J. D., Jr. (en), Computational Fluid Dynamics: The Basics with Applications, McGraw-Hill,‎ 1994