Conditionnement des systèmes linéaires

Objectifs d'apprentissage

À la fin de cette leçon, vous serez en mesure de :

  • Calculer le nombre de condition d'une matrice
  • Interpréter le conditionnement comme facteur d'amplification d'erreur
  • Appliquer les théorèmes de perturbation
  • Utiliser le raffinement itératif pour améliorer la précision
  • Reconnaître un système mal conditionné

Prérequis

  • Normes vectorielles et matricielles
  • Factorisation LU

Qu'est-ce que le conditionnement ?

Motivation

Considérons le système Ax=bA \cdot x = b. En pratique :

  • Les coefficients de AA et bb sont connus avec une précision limitée
  • Les calculs introduisent des erreurs d'arrondi
  • La solution calculée xx^* diffère de la solution exacte xx

Question fondamentale : De petites erreurs sur les données produisent-elles de petites ou de grandes erreurs sur la solution ?

Exemple introductif : deux systèmes très différents

Considérons deux systèmes 2×2 et voyons comment ils réagissent à une perturbation de 5% sur le second membre.

Système 1 — Bien conditionné (matrice identité) :

(1001)(x1x2)=(23)\begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} \begin{pmatrix} x_1 \\ x_2 \end{pmatrix} = \begin{pmatrix} 2 \\ 3 \end{pmatrix}

Solution exacte : x=(2,3)Tx = (2, 3)^T.

Perturbons bb de 5% : b=(2,1,3,15)Tb' = (2{,}1, 3{,}15)^T (on ajoute 5% à chaque composante).

Nouvelle solution : x=(2,1,3,15)Tx' = (2{,}1, 3{,}15)^T.

L'erreur sur xx est exactement 5%. Le système est parfaitement stable.

Système 2 — Mal conditionné :

(1111,01)(x1x2)=(22,01)\begin{pmatrix} 1 & 1 \\ 1 & 1{,}01 \end{pmatrix} \begin{pmatrix} x_1 \\ x_2 \end{pmatrix} = \begin{pmatrix} 2 \\ 2{,}01 \end{pmatrix}

Solution exacte : x=(1,1)Tx = (1, 1)^T.

Perturbons bb de 5% : b=(2,1,2,1105)Tb' = (2{,}1, 2{,}1105)^T.

Résolvons le système perturbé :

  • Ligne 2 - Ligne 1 : 0,01x2=0,01050{,}01 \cdot x_2 = 0{,}0105, donc x2=1,05x_2 = 1{,}05
  • De la ligne 1 : x1=2,11,05=1,05x_1 = 2{,}1 - 1{,}05 = 1{,}05

Nouvelle solution : x=(1,05,1,05)Tx' = (1{,}05, 1{,}05)^T.

Ici aussi l'erreur est de 5%, mais si on perturbe différemment (par exemple b=(2,1,2,01)Tb' = (2{,}1, 2{,}01)^T), on obtient x=(11,1,9)Tx' = (11{,}1, -9)^T — une erreur énorme ! Le système est très sensible à la direction de la perturbation.

Système bien conditionné vs mal conditionné

💡

Définition intuitive

  • Bien conditionné : De petites perturbations des données causent de petites perturbations de la solution.
  • Mal conditionné : De petites perturbations des données peuvent causer d'énormes perturbations de la solution.

Interprétation géométrique : Dans la visualisation ci-dessus, les lignes représentent les équations du système. Pour un système bien conditionné, les lignes se croisent à angle droit (ou proche). Pour un système mal conditionné, les lignes sont presque parallèles — un petit déplacement d'une ligne déplace beaucoup le point d'intersection.


Le nombre de condition

Définition

Le nombre de condition d'une matrice inversible AA est :

κ(A)=AA1\kappa(A) = \|A\| \cdot \|A^{-1}\|

Il dépend du choix de la norme. On note κp(A)\kappa_p(A) pour la norme pp.

💡

Note sur la notation

Dans la littérature, le nombre de condition est noté de différentes façons :

  • κ(A)\kappa(A) (lettre grecque kappa) — notation utilisée dans ce cours
  • cond(A)\text{cond}(A) — notation alternative courante

Ces deux notations désignent exactement la même quantité. La notation κ\kappa est plus compacte et courante dans les ouvrages d'analyse numérique, tandis que cond\text{cond} est parfois préférée car elle est plus explicite.

💡

Pourquoi ce produit ?

Le nombre de condition mesure à quel point AA peut amplifier et réduire des vecteurs :

  • A\|A\| mesure l'amplification maximale par AA
  • A1\|A^{-1}\| mesure l'amplification maximale par A1A^{-1} (ou de manière équivalente, la réduction minimale par AA)

Le ratio entre ces deux quantités donne la « plage d'étirement » de la matrice.

Calcul détaillé : système bien conditionné

Reprenons le Système 1 avec A=I=(1001)A = I = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} (matrice identité).

Étape 1 : Calculer A\|A\|_\infty (max des sommes de lignes)

  • Ligne 1 : 1+0=1|1| + |0| = 1
  • Ligne 2 : 0+1=1|0| + |1| = 1
  • A=max(1,1)=1\|A\|_\infty = \max(1, 1) = 1

Étape 2 : Calculer A1A^{-1}

Pour la matrice identité, l'inverse est elle-même :

A1=I=(1001)A^{-1} = I = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}

Étape 3 : Calculer A1\|A^{-1}\|_\infty

  • Ligne 1 : 1+0=1|1| + |0| = 1
  • Ligne 2 : 0+1=1|0| + |1| = 1
  • A1=1\|A^{-1}\|_\infty = 1

Étape 4 : Calculer κ(A)\kappa_\infty(A)

κ(I)=II1=1×1=1\kappa_\infty(I) = \|I\|_\infty \cdot \|I^{-1}\|_\infty = 1 \times 1 = 1

Interprétation

κ(I)=1\kappa(I) = 1 est le minimum possible. La matrice identité est parfaitement conditionnée : une erreur de 5% sur les données donne exactement 5% d'erreur sur la solution, jamais plus.

Calcul détaillé : système mal conditionné

Reprenons le Système 2 avec A=(1111,01)A = \begin{pmatrix} 1 & 1 \\ 1 & 1{,}01 \end{pmatrix}.

Étape 1 : Calculer A\|A\|_\infty

  • Ligne 1 : 1+1=2|1| + |1| = 2
  • Ligne 2 : 1+1,01=2,01|1| + |1{,}01| = 2{,}01
  • A=2,01\|A\|_\infty = 2{,}01

Étape 2 : Calculer A1A^{-1}

Pour une matrice 2×2, on utilise la formule :

A1=1det(A)(dbca)A^{-1} = \frac{1}{\det(A)} \begin{pmatrix} d & -b \\ -c & a \end{pmatrix}

Calculons le déterminant :

det(A)=1×1,011×1=0,01\det(A) = 1 \times 1{,}01 - 1 \times 1 = 0{,}01

Donc :

A1=10,01(1,01111)=(101100100100)A^{-1} = \frac{1}{0{,}01} \begin{pmatrix} 1{,}01 & -1 \\ -1 & 1 \end{pmatrix} = \begin{pmatrix} 101 & -100 \\ -100 & 100 \end{pmatrix}

Étape 3 : Calculer A1\|A^{-1}\|_\infty

  • Ligne 1 : 101+100=201|101| + |-100| = 201
  • Ligne 2 : 100+100=200|-100| + |100| = 200
  • A1=201\|A^{-1}\|_\infty = 201

Étape 4 : Calculer κ(A)\kappa_\infty(A)

κ(A)=2,01×201404\kappa_\infty(A) = 2{,}01 \times 201 \approx 404
⚠️

Interprétation

κ(A)400\kappa(A) \approx 400 signifie qu'une erreur de 5% sur les données peut produire jusqu'à 400×5%=2000%400 \times 5\% = 2000\% d'erreur sur la solution ! C'est ce qu'on a observé avec la perturbation défavorable.

Propriétés du nombre de condition

PropriétéValeurExplication
Minimum possibleκ(A)1\kappa(A) \geq 1Car 1=I=AA1AA11 = \|I\| = \|A \cdot A^{-1}\| \leq \|A\| \cdot \|A^{-1}\|
Matrice orthogonaleκ2(Q)=1\kappa_2(Q) = 1Les rotations ne déforment pas les vecteurs
Pour la norme 2κ2(A)=σmax/σmin\kappa_2(A) = \sigma_{\max}/\sigma_{\min}Ratio des valeurs singulières extrêmes
Matrice singulièreκ(A)=\kappa(A) = \inftyCar A1A^{-1} n'existe pas

Théorèmes de perturbation

Perturbation du second membre

Si on résout Ax=bA \cdot x = b avec bb perturbé en b+δbb + \delta b, la solution perturbée est x+δxx + \delta x.

🚨

Théorème 1 — Borne sur l'erreur

δxxκ(A)δbb\frac{\|\delta x\|}{\|x\|} \leq \kappa(A) \cdot \frac{\|\delta b\|}{\|b\|}

L'erreur relative sur xx est au plus κ(A)\kappa(A) fois l'erreur relative sur bb.

Démonstration

De A(x+δx)=b+δbA(x + \delta x) = b + \delta b et Ax=bAx = b, on déduit Aδx=δbA \cdot \delta x = \delta b.

Donc δx=A1δb\delta x = A^{-1} \delta b, ce qui donne :

δx=A1δbA1δb\|\delta x\| = \|A^{-1} \delta b\| \leq \|A^{-1}\| \cdot \|\delta b\|

De plus, b=AxAx\|b\| = \|Ax\| \leq \|A\| \cdot \|x\|, donc xb/A\|x\| \geq \|b\| / \|A\|.

En combinant :

δxxA1δbb/A=AA1δbb=κ(A)δbb\frac{\|\delta x\|}{\|x\|} \leq \frac{\|A^{-1}\| \cdot \|\delta b\|}{\|b\| / \|A\|} = \|A\| \cdot \|A^{-1}\| \cdot \frac{\|\delta b\|}{\|b\|} = \kappa(A) \cdot \frac{\|\delta b\|}{\|b\|}

Application numérique avec ε = 0,05 (5%)

Système bien conditionné (κ=1\kappa = 1) :

Si l'erreur relative sur bb est ε=0,05\varepsilon = 0{,}05 (5%), alors :

δxx1×0,05=0,05=5%\frac{\|\delta x\|}{\|x\|} \leq 1 \times 0{,}05 = 0{,}05 = 5\%

Système mal conditionné (κ=400\kappa = 400) :

Avec la même erreur ε=0,05\varepsilon = 0{,}05 sur bb :

δxx400×0,05=20=2000%\frac{\|\delta x\|}{\|x\|} \leq 400 \times 0{,}05 = 20 = 2000\%
⚠️

Attention

C'est une borne supérieure. L'erreur réelle peut être plus petite, mais dans le pire cas, elle atteint cette borne.

Vérification sur notre exemple

Reprenons le système mal conditionné avec la perturbation défavorable b=(2,1,2,01)Tb' = (2{,}1, 2{,}01)^T.

Calcul de l'erreur relative sur bb :

δb=bb=(0,1,0)T\delta b = b' - b = (0{,}1, 0)^T
δb=0,1,b=2,01\|\delta b\|_\infty = 0{,}1, \quad \|b\|_\infty = 2{,}01
δbb=0,12,010,04985%\frac{\|\delta b\|_\infty}{\|b\|_\infty} = \frac{0{,}1}{2{,}01} \approx 0{,}0498 \approx 5\%

Calcul de l'erreur relative sur xx :

Solution exacte : x=(1,1)Tx = (1, 1)^T, solution perturbée : x=(11,1,9)Tx' = (11{,}1, -9)^T (calculé plus haut).

δx=xx=(10,1,10)T\delta x = x' - x = (10{,}1, -10)^T
δx=10,1,x=1\|\delta x\|_\infty = 10{,}1, \quad \|x\|_\infty = 1
δxx=10,11=10,1=1010%\frac{\|\delta x\|_\infty}{\|x\|_\infty} = \frac{10{,}1}{1} = 10{,}1 = 1010\%

Vérification de la borne :

1010%κ(A)×5%=404×5%2020%1010\% \leq \kappa(A) \times 5\% = 404 \times 5\% \approx 2020\% \quad \checkmark

L'erreur réelle (1010%) est bien inférieure à la borne (2020%), mais reste énorme !

Perturbation de la matrice

Si AA est perturbée en A+δAA + \delta A :

🚨

Théorème 2 — Perturbation de A

Pour δA<1/A1\|\delta A\| < 1/\|A^{-1}\| :

δxx+δxκ(A)δAA\frac{\|\delta x\|}{\|x + \delta x\|} \leq \kappa(A) \cdot \frac{\|\delta A\|}{\|A\|}

La même règle s'applique : le nombre de condition amplifie les erreurs relatives.

Perturbation combinée (CSE)

En pratique, on a souvent des erreurs sur AA et sur bb simultanément. Le Componentwise Sensitivity Estimate (CSE) donne :

🚨

Théorème 3 — Erreurs combinées

δxxκ(A)(δAA+δbb)\frac{\|\delta x\|}{\|x\|} \lesssim \kappa(A) \left( \frac{\|\delta A\|}{\|A\|} + \frac{\|\delta b\|}{\|b\|} \right)

Application numérique

Si les données ont une erreur de mesure de 5% à la fois sur AA et sur bb :

Système bien conditionné (κ=1\kappa = 1) :

δxx1×(0,05+0,05)=0,10=10%\frac{\|\delta x\|}{\|x\|} \lesssim 1 \times (0{,}05 + 0{,}05) = 0{,}10 = 10\%

Système mal conditionné (κ=400\kappa = 400) :

δxx400×(0,05+0,05)=40=4000%\frac{\|\delta x\|}{\|x\|} \lesssim 400 \times (0{,}05 + 0{,}05) = 40 = 4000\%

Résidu et erreur

Le résidu mesure « à quel point la solution approchée satisfait l'équation » :

r=bAxr = b - A \cdot x^*

xx^* est notre solution calculée.

💡

Attention : résidu ≠ erreur

  • Le résidu rr mesure bAxb - Ax^* (facile à calculer)
  • L'erreur e=xxe = x - x^* mesure la différence avec la vraie solution (impossible à calculer directement !)

La relation entre résidu et erreur est :

1κ(A)rbxxxκ(A)rb\frac{1}{\kappa(A)} \cdot \frac{\|r\|}{\|b\|} \leq \frac{\|x - x^*\|}{\|x\|} \leq \kappa(A) \cdot \frac{\|r\|}{\|b\|}

Interprétation avec ε = 0,05

Supposons qu'on calcule une solution avec un résidu relatif de 5% : r/b=0,05\|r\|/\|b\| = 0{,}05.

Système bien conditionné (κ=1\kappa = 1) :

0,051ex1×0,05\frac{0{,}05}{1} \leq \frac{\|e\|}{\|x\|} \leq 1 \times 0{,}05

L'erreur relative est exactement 5%. Résidu et erreur sont équivalents.

Système mal conditionné (κ=400\kappa = 400) :

0,05400ex400×0,05\frac{0{,}05}{400} \leq \frac{\|e\|}{\|x\|} \leq 400 \times 0{,}05
0,0125%ex2000%0{,}0125\% \leq \frac{\|e\|}{\|x\|} \leq 2000\%

L'erreur peut être κ fois plus grande ou κ fois plus petite que le résidu relatif, soit un écart de κ² = 160 000 entre les bornes !

⚠️

Piège classique

Un petit résidu ne garantit pas une petite erreur si κ(A)\kappa(A) est grand ! Ne vous fiez jamais au résidu seul pour juger de la qualité d'une solution.


Exemples de matrices mal conditionnées

Matrice de Hilbert

Hij=1i+j1H_{ij} = \frac{1}{i + j - 1}
H4=(11/21/31/41/21/31/41/51/31/41/51/61/41/51/61/7)H_4 = \begin{pmatrix} 1 & 1/2 & 1/3 & 1/4 \\ 1/2 & 1/3 & 1/4 & 1/5 \\ 1/3 & 1/4 & 1/5 & 1/6 \\ 1/4 & 1/5 & 1/6 & 1/7 \end{pmatrix}
Taille nκ₂(Hₙ)
3≈ 524
5≈ 4.8 × 10⁵
10≈ 1.6 × 10¹³
15≈ 10¹⁷ (limite de la précision double)
conditionnement.pypython
import numpy as np

def nombre_condition(A, p=2):
  """
  Calcule le nombre de condition de A.
  """
  if p == 2:
      s = np.linalg.svd(A, compute_uv=False)
      return s[0] / s[-1]
  else:
      return np.linalg.norm(A, p) * np.linalg.norm(np.linalg.inv(A), p)

# Matrices de Hilbert
for n in [3, 5, 10]:
  H = np.array([[1/(i+j+1) for j in range(n)] for i in range(n)])
  kappa = nombre_condition(H)
  print(f"κ(H_{n}) = {kappa:.2e}")

Perte de chiffres significatifs

Règle pratique

🚨

Règle de la perte de précision

Si κ(A)10k\kappa(A) \approx 10^k, alors on perd environ k=log10(κ)k = \log_{10}(\kappa) chiffres significatifs dans la solution.

Démonstration

Supposons que les données soient connues avec une précision de pp chiffres significatifs. Cela correspond à une erreur relative de l'ordre de 10p10^{-p} (l'epsilon machine pour la précision pp).

D'après le théorème de perturbation, l'erreur relative sur la solution est bornée par :

δxxκ(A)δbbκ(A)10p\frac{\|\delta x\|}{\|x\|} \leq \kappa(A) \cdot \frac{\|\delta b\|}{\|b\|} \approx \kappa(A) \cdot 10^{-p}

Si κ(A)=10k\kappa(A) = 10^k, alors :

δxx10k10p=10(pk)\frac{\|\delta x\|}{\|x\|} \lesssim 10^k \cdot 10^{-p} = 10^{-(p-k)}

Une erreur relative de 10(pk)10^{-(p-k)} signifie que seuls pkp - k chiffres sont fiables. On a donc perdu k=log10(κ)k = \log_{10}(\kappa) chiffres à cause du conditionnement.

Application à notre exemple

Pour le système mal conditionné avec κ400\kappa \approx 400 :

log10(400)2,6\log_{10}(400) \approx 2{,}6

On perd environ 2 à 3 chiffres significatifs.

Vérification numérique :

Supposons qu'on travaille avec des données à 3 chiffres significatifs (erreur relative 103\sim 10^{-3}).

L'erreur sur la solution peut atteindre :

κ×103=400×103=0,4=100,4\kappa \times 10^{-3} = 400 \times 10^{-3} = 0{,}4 = 10^{-0{,}4}

Une erreur relative de 100,40,410^{-0{,}4} \approx 0{,}4 signifie qu'on n'a plus que 32,60,43 - 2{,}6 \approx 0{,}4 chiffre fiable — presque aucun !

Dans notre exemple concret, avec 5% d'erreur sur bb, on a observé jusqu'à 1010% d'erreur sur xx. La borne théorique était κ×5%=400×5%=2000%\kappa \times 5\% = 400 \times 5\% = 2000\%. L'erreur réelle (1010%) est inférieure à la borne, ce qui est cohérent.

Tableau récapitulatif

Avec une précision double (≈ 16 chiffres) :

κ(A)log₁₀(κ)Chiffres perdusChiffres fiables
10110^11≈ 1≈ 15
10410^44≈ 4≈ 12
101010^{10}10≈ 10≈ 6
101610^{16}16≈ 16≈ 0 (aucun !)
⚠️

Attention

Pour les matrices de Hilbert avec n12n \geq 12, le conditionnement dépasse 101610^{16}. En précision double, aucun chiffre de la solution n'est fiable !


Que faire face à un mauvais conditionnement ?

StratégieDescription
Reformuler le problèmeChanger de variables, normaliser
PréconditionnementMultiplier par une matrice bien choisie
RégularisationAjouter un terme pour stabiliser
Précision étendueUtiliser plus de chiffres significatifs
Méthodes itérativesContrôler l'erreur à chaque étape

Résumé

Le nombre de condition κ(A)=AA1\kappa(A) = \|A\| \cdot \|A^{-1}\| mesure la sensibilité du système aux perturbations.

κ(A)Interprétation
≈ 1Parfaitement conditionné
≈ 10²-10³Bien conditionné
≈ 10⁶-10⁸Modérément mal conditionné
> 10¹⁰Très mal conditionné
Singulier (pas de solution unique)

Points clés :

  • L'erreur relative peut être amplifiée par κ(A)\kappa(A)
  • Un petit résidu ne garantit pas une petite erreur
  • On perd environ log10(κ)\log_{10}(\kappa) chiffres significatifs

Pour aller plus loin

La prochaine leçon présentera le raffinement itératif, une technique élégante pour récupérer la précision perdue à cause du conditionnement, en réutilisant la factorisation LU déjà calculée.