Retourner au courant

La Factorisation de Cholesky

Toute matrice symétrique définie positive A admet une décomposition de Cholesky. A étant égal à la multiplication d'une matrice triangulaire inférieure L par la matrice transposée de L.

FR

Définition :

Si AA est une matrice symétrique définie positive, alors il existe une unique matrice triangulaire inférieure LL, à diagonale strictement positive, telle que A=LLTA = LL^T. On dit alors que AA admet une factorisation de Cholesky.

Vérification :

Pour calculer la décomposition de A, nous devons vérifier que A est bien symétrique définie positive :

Symétrique :

Une matrice AA est dite symétrique si A=ATA=A^T. C’est-à-dire : i,jdimA,Ai,j=Aj,i\forall i,j \in \dim{A}, A_{i,j} = A_{j,i}

Par exemple : [42213]\begin{bmatrix} -4 & -2 \cr -2 & 13 \end{bmatrix}

Définie positive :

Une matrice A est dite définie positive si et seulement si ses valeurs propres sont positives. Je vous renvoie vers mon article sur les valeurs propres et vecteurs propres pour en savoir plus :

Valeurs et Vecteurs propres

Résolution :

Une fois la vérification faite, en dimension 3, on cherche une matrice LL telle que A=LLTA = LL^T.

L=[L1,100L2,1L2,20L3,1L3,2L3,3]L = \begin{bmatrix} L_{1,1} & 0 & 0 \cr L_{2,1} & L_{2,2} & 0 \cr L_{3,1} & L_{3,2} & L_{3,3}\cr \end{bmatrix}


A=[L1,100L2,1L2,20L3,1L3,2L3,3][L1,1L2,1L3,10L2,2L3,200L3,3]A = \begin{bmatrix} L_{1,1} & 0 & 0 \cr L_{2,1} & L_{2,2} & 0 \cr L_{3,1} & L_{3,2} & L_{3,3} \end{bmatrix}\begin{bmatrix} L_{1,1} & L_{2,1} & L_{3,1} \cr 0 & L_{2,2} & L_{3,2} \cr 0 & 0 & L_{3,3} \end{bmatrix}


$$A = \begin{bmatrix} L_{1,1}^2 & * & * \cr L_{2,1}L_{1,1} & L_{2,1}^2 + L_{2,2}^2& * \cr L_{3,1}L_{1,1} & L_{3,1}L_{2,1}+L_{3,2}L_{2,2} & L_{3,1}^2 + L_{3,2}^2+L_{3,3}^2 \end{bmatrix}$$

Il suffit maintenant de résoudre équation par équation le système A=LLTA = LL^T.

Exemple :

Prenons A=[1227]A = \begin{bmatrix} 1 & 2 \cr 2 & 7 \end{bmatrix}.

A étant de taille 2x2, alors : A=LLT=[L1,12L1,1L2,1L2,1L1,1L2,12+L2,22]A = LL^T= \begin{bmatrix} L_{1,1}^2 & L_{1,1}L_{2,1} \cr L_{2,1}L_{1,1} & L_{2,1}^2 + L_{2,2}^2 \end{bmatrix}.

Ce qui nous donne 4 équations:

  • 1=L1,121 = L_{1,1}^2
  • 2=L1,1L2,12 = L_{1,1}L_{2,1}
  • 2=L1,1L2,12 = L_{1,1}L_{2,1}
  • 7=L2,12+L2,227 = L_{2,1}^2 + L_{2,2}^2

Donc:

  • L1,1=1L_{1,1}=1
  • L2,1=2L_{2,1}=2
  • L2,2=3L_{2,2}=\sqrt{3}

Ainsi :

A=LLT=(1227)=[1023][1203]A=LL^T=\begin{pmatrix}1 & 2\cr 2 & 7 \end{pmatrix} = \begin{bmatrix}1 & 0\cr 2 & \sqrt{3}\end{bmatrix}\begin{bmatrix}1 & 2\cr 0 & \sqrt{3} \end{bmatrix}

Utile pour le calcul de déterminant !

La décomposition de Cholesky offre un avantage pour le calcul de déterminant.

En effet, L étant triangulaire :

det(A)=det(LLT)=det(L)det(LT)=det(L)2=(i=1dimLLi,i)2\det(A)=\det(LL^T)=\det(L)\det(L^T)=\det(L)^2=\left(\prod_{i=1}^{\dim L}L_{i,i}\right)^2

En python :

Il est possible d’effectuer une factorisation de Cholesky rapidement en Python grâce à numpy !

import numpy as np

A = np.array([[1,2], [2,7]])
B = np.linalg.cholesky(A)
print(B)

Pour en savoir plus : numpy.linalg.cholesky.

Sources:

  1. https://en.wikipedia.org/wiki/Cholesky_decomposition
  2. https://fr.wikipedia.org/wiki/Factorisation_de_Cholesky
  3. http://perso.eleves.ens-rennes.fr/~ariffaut/Agregation/Cholesky.pdf