Factorisation LU — Principes

Objectifs d'apprentissage

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

  • Comprendre le principe de la décomposition LU
  • Calculer manuellement une factorisation LU pour une matrice 3×3
  • Identifier les formules pour les éléments de L et U
  • Connaître l'ordre des calculs dans l'algorithme
  • Comprendre les conditions d'existence de la factorisation

Prérequis

  • Élimination de Gauss
  • Multiplication de matrices

Motivation : pourquoi factoriser ?

Dans de nombreuses applications, on doit résoudre plusieurs systèmes linéaires avec la même matrice mais des seconds membres différents :

Ax(1)=b(1),Ax(2)=b(2),,Ax(k)=b(k)A \cdot x^{(1)} = b^{(1)}, \quad A \cdot x^{(2)} = b^{(2)}, \quad \ldots, \quad A \cdot x^{(k)} = b^{(k)}
💡

Exemples d'applications

  • Simulation temporelle : résolution à chaque pas de temps avec une matrice constante
  • Analyse de sensibilité : étude de l'effet de différentes conditions aux limites
  • Méthodes itératives : résolution répétée dans des algorithmes d'optimisation

Avec l'élimination de Gauss standard, chaque résolution coûte O(n3/3)O(n^3/3) opérations. Pour kk systèmes, le coût total serait O(kn3/3)O(k \cdot n^3/3).

La factorisation LU permet de « mémoriser » le travail d'élimination :

  • Factorisation (une seule fois) : O(n3/3)O(n^3/3)
  • Chaque résolution : O(n2)O(n^2)

Pour kk systèmes, le coût devient O(n3/3+kn2)O(n^3/3 + k \cdot n^2), une économie considérable !


Principe de la décomposition

L'idée fondamentale

La factorisation LU consiste à décomposer une matrice AA en un produit de deux matrices triangulaires :

A=LUA = L \cdot U

où :

  • LL est une matrice triangulaire inférieure (Lower) avec des 1 sur la diagonale
  • UU est une matrice triangulaire supérieure (Upper)
(a11a12a13a21a22a23a31a32a33)=(100l2110l31l321)(u11u12u130u22u2300u33)\begin{pmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \end{pmatrix} = \begin{pmatrix} 1 & 0 & 0 \\ l_{21} & 1 & 0 \\ l_{31} & l_{32} & 1 \end{pmatrix} \cdot \begin{pmatrix} u_{11} & u_{12} & u_{13} \\ 0 & u_{22} & u_{23} \\ 0 & 0 & u_{33} \end{pmatrix}

Lien avec l'élimination de Gauss

La matrice UU est exactement la matrice triangulaire supérieure obtenue après l'élimination de Gauss !

La matrice LL contient les multiplicateurs utilisés pendant l'élimination :

lij=mij=aij(j)ajj(j)pour i>jl_{ij} = m_{ij} = \frac{a_{ij}^{(j)}}{a_{jj}^{(j)}} \quad \text{pour } i > j

Formules de calcul (méthode de Doolittle)

Calcul des éléments

En développant le produit LU=AL \cdot U = A, on obtient les formules suivantes :

Pour les éléments de U (ligne ii, colonne jj avec jij \geq i) :

uij=aijk=1i1likukju_{ij} = a_{ij} - \sum_{k=1}^{i-1} l_{ik} \cdot u_{kj}

Pour les éléments de L (ligne ii, colonne jj avec i>ji > j) :

lij=1ujj(aijk=1j1likukj)l_{ij} = \frac{1}{u_{jj}} \left( a_{ij} - \sum_{k=1}^{j-1} l_{ik} \cdot u_{kj} \right)

Ordre des calculs

L'algorithme procède colonne par colonne :

  1. Pour chaque colonne j=1,2,,nj = 1, 2, \ldots, n :
    • D'abord calculer u1j,u2j,,ujju_{1j}, u_{2j}, \ldots, u_{jj} (éléments de U dans la colonne j)
    • Puis calculer lj+1,j,lj+2,j,,lnjl_{j+1,j}, l_{j+2,j}, \ldots, l_{nj} (éléments de L sous la diagonale)
⚠️

Ordre important !

Les calculs doivent être effectués dans le bon ordre car chaque élément dépend des éléments précédemment calculés.


Exemple détaillé

Factorisons la matrice :

A=(211433879)A = \begin{pmatrix} 2 & 1 & 1 \\ 4 & 3 & 3 \\ 8 & 7 & 9 \end{pmatrix}

Colonne 1

Éléments de U :

  • u11=a11=2u_{11} = a_{11} = 2

Éléments de L :

  • l21=a21/u11=4/2=2l_{21} = a_{21}/u_{11} = 4/2 = 2
  • l31=a31/u11=8/2=4l_{31} = a_{31}/u_{11} = 8/2 = 4

Colonne 2

Éléments de U :

  • u12=a12=1u_{12} = a_{12} = 1
  • u22=a22l21u12=321=1u_{22} = a_{22} - l_{21} \cdot u_{12} = 3 - 2 \cdot 1 = 1

Éléments de L :

  • l32=(a32l31u12)/u22=(741)/1=3l_{32} = (a_{32} - l_{31} \cdot u_{12})/u_{22} = (7 - 4 \cdot 1)/1 = 3

Colonne 3

Éléments de U :

  • u13=a13=1u_{13} = a_{13} = 1
  • u23=a23l21u13=321=1u_{23} = a_{23} - l_{21} \cdot u_{13} = 3 - 2 \cdot 1 = 1
  • u33=a33l31u13l32u23=94131=2u_{33} = a_{33} - l_{31} \cdot u_{13} - l_{32} \cdot u_{23} = 9 - 4 \cdot 1 - 3 \cdot 1 = 2

Résultat

L=(100210431),U=(211011002)L = \begin{pmatrix} 1 & 0 & 0 \\ 2 & 1 & 0 \\ 4 & 3 & 1 \end{pmatrix}, \quad U = \begin{pmatrix} 2 & 1 & 1 \\ 0 & 1 & 1 \\ 0 & 0 & 2 \end{pmatrix}

Vérification

LU=(100210431)(211011002)=(211433879)=AL \cdot U = \begin{pmatrix} 1 & 0 & 0 \\ 2 & 1 & 0 \\ 4 & 3 & 1 \end{pmatrix} \cdot \begin{pmatrix} 2 & 1 & 1 \\ 0 & 1 & 1 \\ 0 & 0 & 2 \end{pmatrix} = \begin{pmatrix} 2 & 1 & 1 \\ 4 & 3 & 3 \\ 8 & 7 & 9 \end{pmatrix} = A \quad \checkmark

Algorithme de factorisation LU

factorisation_lu.pypython
import numpy as np

def factorisation_lu(A):
  """
  Factorisation LU sans pivotage (méthode de Doolittle).

  Paramètres:
      A : matrice carrée (n x n)

  Retourne:
      L : matrice triangulaire inférieure avec 1 sur la diagonale
      U : matrice triangulaire supérieure
  """
  n = len(A)
  L = np.eye(n)  # Matrice identité (1 sur la diagonale)
  U = np.zeros((n, n))

  for j in range(n):  # Pour chaque colonne
      # Calcul des éléments de U (ligne i <= j)
      for i in range(j + 1):
          somme = sum(L[i, k] * U[k, j] for k in range(i))
          U[i, j] = A[i, j] - somme

      # Calcul des éléments de L (ligne i > j)
      for i in range(j + 1, n):
          somme = sum(L[i, k] * U[k, j] for k in range(j))
          L[i, j] = (A[i, j] - somme) / U[j, j]

  return L, U

# Exemple d'utilisation
A = np.array([[2, 1, 1],
            [4, 3, 3],
            [8, 7, 9]], dtype=float)

L, U = factorisation_lu(A)
print("L =")
print(L)
print("\nU =")
print(U)
print("\nVérification L·U =")
print(L @ U)

Conditions d'existence

Quand la factorisation LU existe-t-elle ?

🚨

Condition suffisante

La factorisation LU (sans pivotage) existe et est unique dès que les n1n-1 premiers mineurs principaux de A sont non nuls.

Un mineur principal d'ordre kk est le déterminant de la sous-matrice formée par les kk premières lignes et colonnes.

Pour une matrice 3×3 :

  • Mineur d'ordre 1 : a11a_{11}
  • Mineur d'ordre 2 : det(a11a12a21a22)\det\begin{pmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{pmatrix}
  • Mineur d'ordre 3 : det(A)\det(A)

Généralisation : Pour une matrice n×nn \times n, il suffit de vérifier que les n1n-1 premiers mineurs principaux sont non nuls (pour une matrice 3×3, seuls les mineurs d'ordre 1 et 2 sont concernés) :

Mk=det(A1:k,1:k)0pour k=1,2,,n1M_k = \det(A_{1:k, 1:k}) \neq 0 \quad \text{pour } k = 1, 2, \ldots, n-1

Explicitement :

M1=a11,M2=det(a11a12a21a22),M3=det(a11a12a13a21a22a23a31a32a33),,Mn1=det(A1:n1,1:n1)M_1 = a_{11}, \quad M_2 = \det\begin{pmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{pmatrix}, \quad M_3 = \det\begin{pmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \end{pmatrix}, \quad \ldots, \quad M_{n-1} = \det(A_{1:n-1,\, 1:n-1})

Autrement dit, il suffit que les sous-matrices principales A1:k,1:kA_{1:k, 1:k} soient inversibles pour kn1k \leq n-1 ; le dernier mineur Mn=det(A)M_n = \det(A) n'intervient pas, une matrice singulière pouvant très bien admettre une factorisation LU.

Que faire si un mineur est nul ?

Si l'un des n1n-1 premiers mineurs principaux est nul, la factorisation LU standard n'est plus garantie : l'algorithme peut buter sur un pivot ujju_{jj} nul. Solutions :

  1. Utiliser le pivotage : PA=LUP \cdot A = L \cdot UPP est une matrice de permutation
  2. Vérifier si la matrice est singulière (pas de solution unique au système)

Variantes de la factorisation

Méthode de Doolittle (utilisée ici)

  • LL a des 1 sur la diagonale
  • UU est quelconque

Méthode de Crout

  • LL est quelconque
  • UU a des 1 sur la diagonale

Factorisation de Cholesky

Pour les matrices symétriques définies positives :

A=LLTA = L \cdot L^T

Cette factorisation est plus efficace (environ 2× moins d'opérations) et garantit la stabilité numérique.


Résumé

La factorisation LU décompose une matrice en un produit A=LUA = L \cdot U :

  • L : triangulaire inférieure avec des 1 sur la diagonale (contient les multiplicateurs)
  • U : triangulaire supérieure (résultat de l'élimination de Gauss)
AspectDétail
Coût de factorisationO(n3/3)O(n^3/3) opérations
Coût par résolutionO(n2)O(n^2) opérations
Condition d'existencen1n-1 premiers mineurs principaux non nuls (suffisant)
Lien avec GaussU = matrice après élimination, L = multiplicateurs

Pour aller plus loin

La prochaine leçon expliquera comment utiliser la factorisation LU pour résoudre des systèmes linéaires, ainsi que les techniques de stockage compact et le pivotage.