Nous allons aborder la décomposition des matrices en Python. Si tu connais sûrement la décomposition en valeurs propres des matrices, il en existe plein d’autres que nous allons aborder ici, sans pour autant développer les aspects purement mathématiques. Nous aborderons donc quatre manières de la décomposer en Python, en passant de la décomposition en valeurs propres à des décompositions hors programmes (décomposition LU, de Cholesky, etc.). Nous détaillerons ainsi le principe théorique des méthodes, leurs conditions d’application et leur utilité, tout en fournissant des exemples de code en Python pour illustrer leur mise en œuvre pratique et automatisée afin de gagner du temps, et ce, pour la décomposition LU, celle de Cholesky, celle en valeurs propres et en valeurs singulières.
Introduction
La décomposition de matrice est une technique qui consiste à factoriser une matrice en un produit de matrices plus simples et plus faciles à manipuler. En quelque sorte, c’est l’équivalent matriciel de la factorisation d’un nombre entier en nombres premiers.
Cette approche permet de résoudre des problèmes qui seraient autrement trop lourds à traiter. Elle est au cœur de nombreux algorithmes d’optimisation, de résolution de systèmes linéaires, de statistiques et de machine learning. Nous allons nous concentrer sur les quatre méthodes les plus courantes (la décomposition LU, de Cholesky, en valeurs propres et SVD).
La décomposition LU
La décomposition LU (pour Lower-Upper) factorise une matrice carrée A en produit d’une matrice triangulaire inférieure L (Lower) et d’une matrice triangulaire supérieure U (Upper) de sorte que \(A = LU\).
Son principal intérêt est de résoudre des systèmes d’équations linéaires de manière très efficace, car les systèmes triangulaires sont triviaux à résoudre. La plupart des bibliothèques utilisent généralement une version avec pivotage qui inclut une matrice de permutation P, de sorte que l’on a \(PA = LU\).
Condition : la matrice A doit être carrée.
En Python, la fonction lu de scipy.linalg est l’outil le plus robuste pour cette décomposition.
On doit d’abord créer une matrice : prenons par exemple \( A = \begin{pmatrix}
2 & 1 & 1 \\
4 & 1 & 0 \\
-2 & 2 & 1
\end{pmatrix} \) pour décomposer cette matrice en lui appliquant la fonction lu.
La décomposition de Cholesky
La décomposition de Cholesky factorise une matrice \(A\) en produit d’une matrice triangulaire inférieure \(L\) et de sa transposée \({}^tL\) :
\(A = L{}^tL\)
C’est donc une version plus puissante que la décomposition \(LU\) qui implique cependant des hypothèses plus strictes au niveau de la matrice \(A\).
Conditions : la matrice A doit être carrée, symétrique et définie positive. Une matrice est dite définie positive si pour tout vecteur \(x \ne 0\), \(x{}^tAx >0 \). En pratique, si la décomposition de Cholesky fonctionne et que la console ne te renvoie pas un message d’erreur, cela confirme que la matrice est bien définie positive.
En Python : la fonction cholesky de numpy.linalg est l’outil standard.
La décomposition en valeurs propres
Seule décomposition au programme en prépa ECG, la décomposition en valeurs propres factorise une matrice carrée \(A\) en :
\[A=V\Lambda V^{-1}\]
Où \(V\) est la matrice dont les colonnes sont les vecteurs propres de \(A\), et \(\Lambda\) est une matrice diagonale contenant les valeurs propres de \(A\). Les valeurs propres et les vecteurs propres sont fondamentaux pour comprendre les transformations linéaires et la stabilité des systèmes.
Conditions : la matrice \(A\) doit être carrée et diagonalisable. Il existe plusieurs caractérisations de la diagonalisabilité des matrices, je te laisse regarder ton cours de deuxième année pour ça. Il est toujours utile de rappeler que pour les matrices symétriques, c’est toujours le cas et les valeurs propres sont réelles.
En Python, la fonction eig de numpy.linalg renvoie les valeurs propres et la matrice de vecteurs propres.
La décomposition en valeurs singulières (SVD)
La SVD (Singular Value Decomposition) est la plus générale des décompositions, dans la mesure où elle s’applique à toute matrice \(A\) de dimensions \(m \times n\) :
\[A=UD\,{}^tV\]
- \(U\) est une matrice orthogonale \(m \times m\) ;
- \(D\) est une matrice diagonale \(m \times n\) contenant les valeurs singulières (les racines carrées des valeurs propres de \(A\,{}^tA\)) ;
- \(V\) est une matrice orthogonale \(n \times n\).
Conditions : aucune ! La SVD existe pour toute matrice qu’elle soit carrée, rectangulaire, de plein rang maximum ou non.
En Python : la fonction svd de numpy.linalg est l’outil de référence.
Conclusion
En définitive, nous avons abordé quatre méthodes de décomposition des matrices, qui ont toutes des conditions d’applications différentes, les plus robustes donnant lieu à des conditions plus restrictives.
Pour rappel :
- La décomposition LU est l’outil de choix pour la résolution de systèmes linéaires.
- La décomposition de Cholesky est la version optimisée de la décomposition LU pour les matrices symétriques définies positives.
- La décomposition en valeurs propres aide à comprendre la géométrie des transformations et la dynamique des systèmes.
- La décomposition SVD est la plus universelle, applicable à toute matrice mais moins performante que les autres.
Utiliser Python pour cela peut permettre de vérifier aisément ses calculs de valeurs propres et de vecteurs propres avec la décomposition en valeurs propres, par exemple !
Tu peux retrouver ici le méga-répertoire qui contient toutes les annales de concours et les corrigés. Tu peux également accéder ici à toutes nos autres ressources mathématiques !



