Licence 2Analyse

Erreurs numériques et stabilité

50 min15 exercicesSéquence 3.3Licence 2

Vidéo disponible dans la version Premium

Durée : 50 min

Erreurs numériques et stabilité

1. Représentation des nombres en machine

Un ordinateur ne représente les nombres réels qu'avec une précision finie (en général en virgule flottante, sur 6464 bits pour le type "double" usuel, soit environ 1515-1616 chiffres décimaux significatifs). Tout calcul introduit potentiellement une petite erreur d'arrondi, de l'ordre de εmachine1016\varepsilon_{\text{machine}} \approx 10^{-16} pour le double.

Erreur absolue et erreur relative : si x~\tilde x est une valeur approchée de xx, on définit :

erreur absolue=x~x,erreur relative=x~xx (si x0)\text{erreur absolue} = |\tilde x - x|, \qquad \text{erreur relative} = \frac{|\tilde x-x|}{|x|} \ (\text{si } x\neq0)

L'erreur relative est souvent plus pertinente : une erreur absolue de 11 est négligeable si x=1010x=10^{10}, mais catastrophique si x=103x=10^{-3}.

2. Propagation des erreurs dans les opérations élémentaires

Addition/soustraction : si a~=a+δa\tilde a = a+\delta_a et b~=b+δb\tilde b = b+\delta_b, alors a~+b~=(a+b)+(δa+δb)\tilde a+\tilde b = (a+b)+(\delta_a+\delta_b) : les erreurs absolues s'additionnent (au pire, en valeur absolue).

Phénomène de cancellation catastrophique : lorsqu'on soustrait deux nombres très proches, l'erreur relative du résultat peut devenir énorme, même si les erreurs absolues initiales sont minimes. Exemple : si a=1,000001a=1{,}000001 et b=1,000000b=1{,}000000 (connus chacun avec une erreur absolue 107\approx10^{-7}), alors ab=0,000001=106a-b = 0{,}000001 = 10^{-6}, mais l'erreur absolue sur ce résultat (qui reste 107\approx10^{-7}) représente maintenant une erreur relative de 10%10\% sur le résultat — alors qu'elle n'était que de 10710^{-7} sur aa et bb séparément.

Exemple classique de reformulation pour éviter la cancellation : pour résoudre x22px+q=0x^2-2px+q=0 avec pp grand et qq petit, la formule usuelle x=p±p2qx = p\pm\sqrt{p^2-q} souffre de cancellation pour la racine proche de 00 (différence de deux quantités proches). On préfère alors calculer d'abord la racine "facile" x1=p+p2qx_1=p+\sqrt{p^2-q} (somme, pas de cancellation), puis utiliser la relation produit des racines x1x2=qx_1 x_2=q pour obtenir x2=q/x1x_2 = q/x_1 sans soustraction dangereuse.

3. Conditionnement d'un problème

Le conditionnement mesure la sensibilité de la solution d'un problème à de petites perturbations des données d'entrée. Pour une fonction ff et une perturbation relative ε\varepsilon de l'entrée xx, le conditionnement (relatif) est approximativement :

κ(x)xf(x)f(x)\kappa(x) \approx \left|\frac{x\,f'(x)}{f(x)}\right|

Un problème est dit bien conditionné si κ\kappa est petit (les petites erreurs sur les données restent petites sur le résultat), et mal conditionné si κ\kappa est grand (de minuscules erreurs d'entrée peuvent être amplifiées énormément).

Exemple : pour f(x)=xf(x)=\sqrt{x}, κ(x)=x×12xx=12\kappa(x) = \left|\dfrac{x\times\frac{1}{2\sqrt x}}{\sqrt x}\right| = \dfrac12 : c'est un problème bien conditionné, peu sensible. En revanche, pour f(x)=1x1f(x)=\dfrac{1}{x-1} près de x=1x=1, le conditionnement explose (ff varie extrêmement vite), traduisant une grande sensibilité.

Important : le conditionnement est une propriété du problème mathématique lui-même, indépendante de l'algorithme utilisé pour le résoudre. Un problème mal conditionné restera difficile à résoudre précisément quel que soit l'algorithme.

4. Stabilité d'un algorithme

La stabilité d'un algorithme, à l'inverse, décrit comment celui-ci propage (ou amplifie) les erreurs d'arrondi au cours de ses propres calculs intermédiaires, même pour résoudre un problème bien conditionné. Un algorithme instable peut donner des résultats très imprécis (ou complètement faux), même appliqué à un problème bien conditionné, à cause d'une accumulation ou amplification d'erreurs à chaque étape.

Exemple classique (calcul d'une suite récurrente) : la suite définie par I0=ln(6/5)I_0=\ln(6/5) et In=1n5In1I_n = \dfrac1n - 5I_{n-1} (provenant du calcul de 01xnx+5dx\int_0^1 \frac{x^n}{x+5}dx) vérifie mathématiquement In0I_n\to0, mais le calcul numérique de cette récurrence, démarré avec I0I_0 légèrement arrondi, voit son erreur initiale multipliée par 5-5 à chaque étape : après quelques itérations seulement, les valeurs calculées deviennent absurdes (négatives ou explosant en valeur absolue), bien que la suite exacte reste positive et tende vers 00. C'est un algorithme numériquement instable, car le facteur d'amplification (5-5, en valeur absolue >1>1) fait croître l'erreur exponentiellement.

5. Stabilité : critère qualitatif

De façon générale, un algorithme itératif de la forme en+1λene_{n+1} \approx \lambda\, e_n sur l'erreur ene_n est :
- Stable si λ1|\lambda|\leq1 (l'erreur ne croît pas, ou décroît) ;
- Instable si λ>1|\lambda|>1 (l'erreur est amplifiée à chaque étape, donc explose exponentiellement après suffisamment d'itérations).

Remède pratique courant : lorsqu'une récurrence "vers l'avant" est instable, on peut souvent la rendre stable en la parcourant "à l'envers" (de nn grand vers nn petit), si le problème s'y prête, car le facteur d'amplification est alors inversé (1/λ1/\lambda, qui devient <1<1 si λ>1|\lambda|>1).

6. Exemple résolu de synthèse

Énoncé : on veut calculer f(x)=x+1xf(x) = \sqrt{x+1}-\sqrt{x} pour xx grand (par exemple x=1010x=10^{10}). Pourquoi le calcul direct est-il numériquement mauvais, et quelle reformulation éviter ce problème ?

Résolution : pour xx grand, x+1\sqrt{x+1} et x\sqrt{x} sont deux nombres très proches : leur soustraction directe souffre de cancellation catastrophique (perte de précision relative). On reformule en multipliant par la quantité conjuguée :

f(x)=x+1x=(x+1x)(x+1+x)x+1+x=(x+1)xx+1+x=1x+1+xf(x) = \sqrt{x+1}-\sqrt{x} = \frac{(\sqrt{x+1}-\sqrt x)(\sqrt{x+1}+\sqrt x)}{\sqrt{x+1}+\sqrt x} = \frac{(x+1)-x}{\sqrt{x+1}+\sqrt x} = \frac{1}{\sqrt{x+1}+\sqrt x}

Cette nouvelle expression ne comporte qu'une somme au dénominateur (pas de soustraction de quantités proches), donc elle est numériquement stable et se calcule sans perte de précision, même pour xx très grand.

Exercices

Quelle est l'erreur relative si x=1000x=1000 et x~=1000,5\tilde x = 1000{,}5 ?

Vrai ou faux : l'erreur relative est toujours plus pertinente que l'erreur absolue pour juger de la qualité d'une approximation.

Le phénomène de cancellation catastrophique se produit typiquement lors de :

Un algorithme dont l'erreur est multipliée par λ=0,3\lambda=0{,}3 à chaque étape est-il stable ?

Vrai ou faux : un problème bien conditionné, résolu par un algorithme instable, peut tout de même donner des résultats numériquement faux.

Suivez votre progression

Connectez-vous pour sauvegarder votre avancement et gagner des XP.

Se connecter