Dans le domaine de l’analyse numérique, la stabilité numérique est une propriété hautement souhaitable des algorithmes mathématiques. La définition précise de la stabilité dépend du contexte, en particulier dans l'algèbre linéaire numérique et les algorithmes de résolution d'équations aux dérivées ordinaires et partielles via des approximations discrètes.
« La stabilité garantit que de petites modifications des données d’entrée n’entraînent pas de grandes fluctuations dans le résultat final. »
En algèbre linéaire numérique, on s'intéresse principalement aux instabilités qui surviennent à proximité de problèmes presque singuliers, tels que des valeurs propres très petites ou presque coïncidentes. Dans les algorithmes numériques de résolution d’équations différentielles, le problème est que les erreurs d’arrondi ou les petites fluctuations dans les données initiales peuvent conduire à de grands écarts entre la réponse finale et la solution exacte. Certains algorithmes numériques peuvent lisser les petites fluctuations et erreurs dans les données d’entrée, tandis que d’autres peuvent amplifier ces erreurs. Les calculs dont on peut prouver qu’ils n’amplifient pas les erreurs d’approximation sont dits numériquement stables.
Une tâche courante dans l’analyse numérique consiste à choisir des algorithmes robustes, ce qui signifie que les résultats ne varient pas radicalement lorsque les données d’entrée changent légèrement. Le phénomène inverse est l’instabilité algorithmique. Souvent, un algorithme implique une méthode d’approximation et, dans certains cas, il peut être démontré que l’algorithme approchera la bonne solution en utilisant des nombres réels au lieu de nombres à virgule flottante. Cependant, dans ce cas, il n’y a aucune garantie que la solution converge vers la bonne, car les erreurs d’arrondi ou de troncature dans les nombres à virgule flottante peuvent être amplifiées, provoquant une croissance exponentielle de l’écart par rapport à la bonne solution.
En algèbre linéaire numérique, le concept de stabilité peut être formalisé de plusieurs manières différentes. Les définitions couramment utilisées de stabilité avant, arrière et mixte apparaissent souvent dans ce domaine. Considérons un problème résolu par un algorithme numérique, où la fonction f associe des données x à une solution y. Le résultat y* de l'algorithme s'écartera généralement de la « vraie » solution y. Les principales raisons de l’erreur sont l’erreur d’arrondi et l’erreur de troncature.
« L’erreur directe d’un algorithme est la différence entre son résultat et la solution ; l’erreur inverse est le plus petit Δx tel que f(x + Δx) = y*. »
L'erreur directe est la différence entre y* et y ; l'erreur inverse est le minimum Δx tel que f(x + Δx) = y*. Il existe une relation de condition numérique entre l'erreur directe et l'erreur inverse : la taille de l'erreur directe est au plus le produit du numéro de condition et de l'erreur inverse. Dans de nombreux cas, il est plus naturel de considérer les erreurs relatives. Lorsque l’erreur rétrograde est faible pour toutes les entrées x, nous appelons l’algorithme rétrograde stable. Bien sûr, « petit » est un terme relatif et sa définition dépendra du contexte spécifique.
On donne souvent une définition plus générale de la stabilité numérique, appelée stabilité hybride, qui combine l'erreur directe et l'erreur inverse. Un algorithme est stable s'il résout approximativement un problème voisin, c'est-à-dire s'il existe un petit Δx tel que f(x + Δx) - y* soit également petit. Par conséquent, un algorithme rétrostable est toujours stable. En ce qui concerne la stabilité directe, un algorithme est stable directe si son erreur directe divisée par le nombre de conditions du problème est relativement faible.
Lors de la résolution d’équations différentielles, la stabilité est définie différemment. Dans les équations différentielles ordinaires numériques, il existe différentes notions de stabilité numérique, telles que la A-stabilité. Ces concepts sont souvent liés à certaines notions de stabilité dans les systèmes dynamiques, en particulier la stabilité de Lyapunov. Lors de la résolution d’équations rigides, il est très important d’utiliser une méthode stable.
« La stabilité est parfois obtenue en introduisant la diffusion numérique, ce qui garantit que les erreurs d'arrondi dans les calculs ne s'accumulent pas à des niveaux dangereux. »
Un algorithme de résolution d'équations aux dérivées partielles de type évolution linéaire est considéré comme stable si la variation totale de la solution numérique reste limitée lorsque le pas de calcul s'approche de zéro. Le théorème d'équivalence de Lax stipule que si un algorithme est cohérent et stable, il convergera. Cependant, pour les équations aux dérivées partielles non linéaires, la définition de la stabilité est beaucoup plus compliquée car de nombreuses propriétés des équations non linéaires n'existent pas dans leurs homologues linéaires.
Le calcul de la racine carrée de 2 (environ 1,41421) est un problème bien défini. De nombreux algorithmes résolvent ce problème en commençant par une approximation initiale x0, telle que x0 = 1,4, puis en calculant continuellement des estimations améliorées x1, x2, etc. Une méthode typique qui pourrait être utilisée est la célèbre méthode babylonienne, dont la formule est xk+1 = (xk + 2/xk) / 2.
L'autre méthode est appelée « Méthode X », et sa formule est xk+1 = (xk^2 − 2)² + xk. Quelques itérations de chaque méthode sont enregistrées sous le tableau, et nous voyons que la méthode babylonienne converge rapidement quelle que soit l'estimation initiale, tandis que la méthode X converge très lentement à x0 = 1,4 et diverge étrangement à x0 = 1,42. Par conséquent, la méthode babylonienne est considérée comme numériquement stable, tandis que la méthode X est numériquement instable.
La stabilité numérique est également affectée par le nombre de chiffres significatifs conservés par la machine. Une machine qui ne conserverait que quatre chiffres significatifs donnerait un bon exemple des conséquences qui pourraient résulter d’une perte de signification. Par exemple, considérons les fonctions équivalentes f(x) et g(x). Lors du calcul de f(500) et g(500), même si les deux fonctions sont égales, elles produisent des résultats complètement différents, montrant comment de petites erreurs peuvent conduire à de grandes variations.
En résumé, la stabilité numérique est cruciale dans l’analyse numérique, car elle affecte la précision et l’efficacité avec lesquelles nous résolvons les problèmes. Cependant, selon vous, quel type d’algorithme ou de méthode peut rester stable dans des conditions instables ?