Élimination de Gauss

Objectifs d'apprentissage

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

  • Appliquer l'algorithme d'élimination de Gauss pour résoudre un système linéaire
  • Identifier et utiliser les pivots lors de l'élimination
  • Transformer un système quelconque en système triangulaire supérieur
  • Évaluer la complexité algorithmique de la méthode
  • Comparer l'élimination de Gauss avec la méthode de Gauss-Jordan

Prérequis

  • Notions de base en algèbre linéaire (matrices, vecteurs)
  • Opérations élémentaires sur les lignes d'une matrice
  • Résolution de systèmes triangulaires par substitution

Principe de la méthode

L'élimination de Gauss (aussi appelée méthode de Gauss ou réduction de Gauss) est l'une des méthodes les plus fondamentales pour résoudre les systèmes d'équations linéaires. Son principe est simple et élégant :

🚨

Idée centrale

Transformer le système original Ax=bA \cdot x = b en un système triangulaire supérieur équivalent Ux=yU \cdot x = y, puis résoudre ce dernier par substitution arrière.

La méthode se décompose en deux étapes :

  1. Phase d'élimination : Utiliser les opérations élémentaires pour créer des zéros sous la diagonale, transformant ainsi la matrice AA en une matrice triangulaire supérieure UU.

  2. Phase de substitution : Résoudre le système triangulaire Ux=yU \cdot x = y par substitution arrière.


Exemple détaillé pas à pas

Résolvons le système suivant :

{3x1x2+2x3=12x1+2x2+3x3=112x12x2x3=2\begin{cases} 3x_1 - x_2 + 2x_3 = 12 \\ x_1 + 2x_2 + 3x_3 = 11 \\ 2x_1 - 2x_2 - x_3 = 2 \end{cases}

Avant de détailler les calculs, explorez le processus de manière interactive :

Étape initiale : écrire la matrice augmentée

(31212123112212)\begin{pmatrix} 3 & -1 & 2 & | & 12 \\ 1 & 2 & 3 & | & 11 \\ 2 & -2 & -1 & | & 2 \end{pmatrix}

Phase d'élimination

Premier pivot : a11=3a_{11} = 3

Le pivot est l'élément diagonal utilisé pour éliminer les éléments situés en dessous de lui dans la même colonne. Ici, le premier pivot est a11=3a_{11} = 3.

Objectif : Créer des zéros en positions (2,1) et (3,1).

Pour éliminer a21=1a_{21} = 1, on effectue : R2R213R1R_2 \leftarrow R_2 - \frac{1}{3}R_1

Pour éliminer a31=2a_{31} = 2, on effectue : R3R323R1R_3 \leftarrow R_3 - \frac{2}{3}R_1

Détaillons le calcul pour R2R_2 :

R213R1:(1,2,3,11)13(3,1,2,12)=(0,73,73,7)R_2 - \frac{1}{3}R_1 : \quad (1, 2, 3, 11) - \frac{1}{3}(3, -1, 2, 12) = \left(0, \frac{7}{3}, \frac{7}{3}, 7\right)

Et pour R3R_3 :

R323R1:(2,2,1,2)23(3,1,2,12)=(0,43,73,6)R_3 - \frac{2}{3}R_1 : \quad (2, -2, -1, 2) - \frac{2}{3}(3, -1, 2, 12) = \left(0, -\frac{4}{3}, -\frac{7}{3}, -6\right)

La matrice devient :

(31212073737043736)\begin{pmatrix} 3 & -1 & 2 & | & 12 \\ 0 & \frac{7}{3} & \frac{7}{3} & | & 7 \\ 0 & -\frac{4}{3} & -\frac{7}{3} & | & -6 \end{pmatrix}

Second pivot : a22=73a_{22} = \frac{7}{3}

Objectif : Créer un zéro en position (3,2).

On effectue : R3R34/37/3R2=R3+47R2R_3 \leftarrow R_3 - \frac{-4/3}{7/3}R_2 = R_3 + \frac{4}{7}R_2

R3+47R2:(0,43,73,6)+47(0,73,73,7)=(0,0,1,2)R_3 + \frac{4}{7}R_2 : \quad \left(0, -\frac{4}{3}, -\frac{7}{3}, -6\right) + \frac{4}{7}\left(0, \frac{7}{3}, \frac{7}{3}, 7\right) = \left(0, 0, -1, -2\right)

La matrice triangulaire supérieure obtenue est :

(312120737370012)\begin{pmatrix} 3 & -1 & 2 & | & 12 \\ 0 & \frac{7}{3} & \frac{7}{3} & | & 7 \\ 0 & 0 & -1 & | & -2 \end{pmatrix}
💡

Système triangulaire obtenu

Le système équivalent est maintenant :

{3x1x2+2x3=1273x2+73x3=7x3=2\begin{cases} 3x_1 - x_2 + 2x_3 = 12 \\ \frac{7}{3}x_2 + \frac{7}{3}x_3 = 7 \\ -x_3 = -2 \end{cases}

Phase de substitution arrière

On résout en remontant de la dernière équation à la première :

Étape 1 : De la troisième équation :

x3=2    x3=2-x_3 = -2 \implies x_3 = 2

Étape 2 : De la deuxième équation :

73x2+73(2)=7    73x2=7143=73    x2=1\frac{7}{3}x_2 + \frac{7}{3}(2) = 7 \implies \frac{7}{3}x_2 = 7 - \frac{14}{3} = \frac{7}{3} \implies x_2 = 1

Étape 3 : De la première équation :

3x1(1)+2(2)=12    3x1=12+14=9    x1=33x_1 - (1) + 2(2) = 12 \implies 3x_1 = 12 + 1 - 4 = 9 \implies x_1 = 3

Solution finale : x1=3x_1 = 3, x2=1x_2 = 1, x3=2x_3 = 2.


La notion de pivot

Définition

Le pivot à l'étape kk est l'élément diagonal akk(k)a_{kk}^{(k)} utilisé pour éliminer tous les éléments situés en dessous de lui dans la colonne kk.

Rôle du pivot

À chaque étape, on divise par le pivot pour calculer les multiplicateurs :

mik=aik(k)akk(k)pour i=k+1,k+2,,nm_{ik} = \frac{a_{ik}^{(k)}}{a_{kk}^{(k)}} \quad \text{pour } i = k+1, k+2, \ldots, n

Puis on effectue l'élimination : RiRimikRkR_i \leftarrow R_i - m_{ik} R_k

⚠️

Problème potentiel : pivot nul

Si un pivot est nul (akk(k)=0a_{kk}^{(k)} = 0), la division est impossible et l'algorithme échoue. C'est pourquoi on introduit le pivotage, que nous étudierons dans une leçon ultérieure.


Algorithme général

Voici l'algorithme d'élimination de Gauss pour un système de nn équations à nn inconnues :

elimination_gauss.pypython
import numpy as np

def elimination_gauss(A, b):
  """
  Résout le système A.x = b par élimination de Gauss.

  Paramètres:
      A : matrice des coefficients (n x n)
      b : vecteur des seconds membres (n,)

  Retourne:
      x : vecteur solution (n,)
  """
  n = len(b)

  # Créer la matrice augmentée
  Aug = np.column_stack([A.astype(float), b.astype(float)])

  # Phase d'élimination (triangularisation)
  for k in range(n - 1):  # Pour chaque pivot
      pivot = Aug[k, k]

      if abs(pivot) < 1e-12:
          raise ValueError(f"Pivot nul à l'étape {k}")

      for i in range(k + 1, n):  # Pour chaque ligne sous le pivot
          # Calculer le multiplicateur
          m = Aug[i, k] / pivot
          # Éliminer
          Aug[i, k:] = Aug[i, k:] - m * Aug[k, k:]

  # Phase de substitution arrière
  x = np.zeros(n)
  for i in range(n - 1, -1, -1):
      somme = sum(Aug[i, j] * x[j] for j in range(i + 1, n))
      x[i] = (Aug[i, n] - somme) / Aug[i, i]

  return x

# Exemple d'utilisation
A = np.array([[3, -1, 2],
            [1,  2, 3],
            [2, -2, -1]], dtype=float)
b = np.array([12, 11, 2], dtype=float)

x = elimination_gauss(A, b)
print(f"Solution : x = {x}")
# Affiche : Solution : x = [3. 1. 2.]

Complexité algorithmique

Analyse du coût

L'élimination de Gauss nécessite deux types d'opérations :

1. Phase d'élimination :

  • À l'étape kk, on effectue environ (nk)(n-k) divisions et (nk)2(n-k)^2 multiplications-soustractions.
  • Le coût total est de l'ordre de :
k=1n1(nk)2n33\sum_{k=1}^{n-1} (n-k)^2 \approx \frac{n^3}{3}

2. Phase de substitution arrière :

  • Coût de l'ordre de n22\frac{n^2}{2} opérations.
🚨

Complexité de l'élimination de Gauss

La complexité totale de l'élimination de Gauss est :

O(n33) flopsO\left(\frac{n^3}{3}\right) \text{ flops}

où « flops » signifie « floating point operations » (opérations en virgule flottante).

Comparaison avec d'autres méthodes

MéthodeComplexitéRemarque
CramerO(n!)O(n!)Impraticable
Élimination de GaussO(n3/3)O(n^3/3)Méthode de référence
Gauss-JordanO(n3/2)O(n^3/2)50% plus coûteuse
Substitution (système triangulaire)O(n2/2)O(n^2/2)Négligeable pour grand nn

Temps de calcul pratique

Pour donner une idée concrète, voici les temps approximatifs pour différentes tailles de systèmes sur un ordinateur moderne :

Taille nOpérations (≈ n³/3)Temps estimé
100333 000< 1 ms
1 000333 millions≈ 0.1 s
10 000333 milliards≈ 2 min
100 000333 × 10¹²≈ 1 jour

Méthode de Gauss-Jordan

La méthode de Gauss-Jordan est une variante qui élimine les éléments à la fois au-dessus et en dessous de la diagonale, transformant la matrice en matrice identité.

Principe

Au lieu d'obtenir une matrice triangulaire supérieure, on obtient directement :

(100x1010x2001x3)\begin{pmatrix} 1 & 0 & 0 & | & x_1 \\ 0 & 1 & 0 & | & x_2 \\ 0 & 0 & 1 & | & x_3 \end{pmatrix}

Avantages et inconvénients

AspectGauss-JordanÉlimination de Gauss
Substitution arrièreNon nécessaireNécessaire
ComplexitéO(n3/2)O(n^3/2)O(n3/3)O(n^3/3)
Efficacité50% plus lentePlus efficace
⚠️

Recommandation pratique

La méthode de Gauss-Jordan est déconseillée pour la simple résolution de systèmes linéaires car elle est 50% plus coûteuse que l'élimination de Gauss standard. Elle reste cependant utile pour calculer l'inverse d'une matrice.


Visualisation du processus

Le tableau suivant résume les étapes de l'élimination pour notre exemple :

ÉtapeOpérationPivot utilisé
InitialeMatrice augmentée originale
1aR2R213R1R_2 \leftarrow R_2 - \frac{1}{3}R_1a11=3a_{11} = 3
1bR3R323R1R_3 \leftarrow R_3 - \frac{2}{3}R_1a11=3a_{11} = 3
2R3R3+47R2R_3 \leftarrow R_3 + \frac{4}{7}R_2a22=7/3a_{22} = 7/3
FinaleSubstitution arrière

La visualisation suivante montre la méthode de Gauss-Jordan appliquée au même système, pour comparaison avec l'élimination de Gauss :


Résumé

L'élimination de Gauss est une méthode fondamentale pour résoudre les systèmes linéaires :

  • Principe : Transformer le système en un système triangulaire supérieur équivalent, puis résoudre par substitution arrière.
  • Pivot : Élément diagonal utilisé pour éliminer les éléments en dessous. Un pivot nul pose problème (solution : pivotage).
  • Complexité : O(n3/3)O(n^3/3) flops, ce qui est bien meilleur que la méthode de Cramer (O(n!)O(n!)).
  • Gauss-Jordan : Variante qui évite la substitution arrière mais est 50% plus coûteuse — déconseillée pour la résolution simple.
  • L'algorithme se programme facilement et constitue la base de nombreuses bibliothèques numériques.

Pour aller plus loin

La prochaine leçon abordera le pivotage, une technique essentielle pour :

  • Éviter les divisions par zéro (pivot nul)
  • Améliorer la stabilité numérique de l'algorithme
  • Réduire les erreurs d'arrondi lors des calculs

Nous verrons le pivotage partiel et le pivotage complet, ainsi que la technique de normalisation (scaling).