Objectifs du chapitre
À la fin de ce chapitre, vous serez capable de:
- calculer la décomposition d'une matrice carrée, l'utiliser pour résoudre plusieurs systèmes de même matrice et pour calculer un déterminant, et expliquer pourquoi le pivotage partiel est indispensable en arithmétique flottante;
- calculer la décomposition de Cholesky d'une matrice symétrique définie positive;
- obtenir la décomposition par le procédé de Gram–Schmidt ou par des réflexions de Householder, et l'appliquer aux moindres carrés et au calcul des valeurs propres;
- énoncer et démontrer le théorème de décomposition en valeurs singulières , l'interpréter géométriquement et en lire le rang, les quatre sous-espaces fondamentaux, les normes et la pseudo-inverse;
- définir le conditionnement , démontrer l'inégalité et en tirer les bonnes pratiques du calcul numérique;
- décrire les applications de la SVD tronquée (compression, analyse en composantes principales) et les méthodes itératives de Jacobi et de Gauss–Seidel.
Pourquoi factoriser une matrice?
Les chapitres précédents ont construit les objets de l'algèbre linéaire: systèmes, matrices, déterminants, espaces vectoriels, orthogonalité, valeurs propres. Ce dernier chapitre change de point de vue et pose la question de l'ingénieur: comment calcule-t-on tout cela, vite et sûrement, sur un ordinateur? Quelques situations typiques.
- Des milliers de systèmes de même matrice. Dans une simulation par éléments finis, la matrice de rigidité d'une structure ne change pas d'un pas de temps à l'autre; seul le second membre (les charges) change. Résoudre pour en refaisant chaque fois l'élimination de Gauss serait un gaspillage: on veut factoriser une fois, résoudre souvent.
- Ajuster des données bruitées. Un géomètre mesure des distances et des angles entre des dizaines de points; les inconnues (les coordonnées) sont bien moins nombreuses que les mesures. Le système est surdéterminé et il faut le résoudre au sens des moindres carrés (chapitre 7), sans que les erreurs de mesure soient amplifiées par le calcul.
- Compresser une image. Une photographie de pixels est une matrice d'un million de coefficients. Peut-on la remplacer par une matrice de rang , stockée avec dix fois moins de nombres, sans perte visible?
À chacune de ces questions répond une factorisation: écrire comme un produit de matrices plus simples (triangulaires, orthogonales, diagonales), pour lesquelles toutes les opérations sont faciles. Les décompositions , et en valeurs singulières (SVD) sont les outils de base de l'algèbre linéaire numérique; elles constituent le cœur de la bibliothèque LAPACK, que NumPy, MATLAB, R ou Julia appellent en coulisses. Comprendre ce qu'elles font, ce qu'elles coûtent et quand elles échouent est indispensable pour utiliser ces logiciels intelligemment.
La décomposition LU
De l'élimination de Gauss à A = LU
Revenons à l'élimination de Gauss du chapitre 1 sur une matrice carrée , en supposant que l'on n'ait jamais besoin d'échanger deux lignes. Pour annuler le coefficient sous le pivot , on effectue avec le (calculé sur la matrice courante). Au chapitre 2, nous avons vu que cette opération revient à multiplier à gauche par la matrice élémentaire , triangulaire inférieure à diagonale de . À la fin de l'élimination, on a obtenu une matrice triangulaire supérieure :
Démonstration. Chaque est inversible d'inverse (on vérifie que car pour ). Donc
le produit étant pris dans l'ordre de l'élimination (colonne d'abord). Développons ce produit: un terme croisé contient le scalaire , nul dès que ; or dans l'ordre choisi, le facteur précède le facteur seulement si , de sorte que toujours. Tous les termes croisés s'annulent et
qui est bien la matrice triangulaire inférieure unitaire contenant les multiplicateurs. Pour l'unicité, si avec inversible, alors sont inversibles (leurs déterminants sont non nuls) et . Le membre de gauche est triangulaire inférieur unitaire (produit et inverse de telles matrices le sont, chapitre 2), le membre de droite triangulaire supérieur: la seule matrice qui soit les deux à la fois est . Donc et .
Résoudre A x = b: substitution avant, substitution arrière
Une fois connue, le système s'écrit et se résout en deux systèmes triangulaires:
Le premier se résout de haut en bas (, puis , etc.), le second de bas en haut.
Coût. Comptons les opérations flottantes (additions et multiplications, flops). L'élimination de la colonne modifie un bloc de lignes et colonnes, à raison de deux flops par coefficient: au total flops pour la factorisation. Chaque substitution triangulaire coûte environ flops, soit par second membre. Pour , la factorisation demande environ flops et chaque résolution : on peut résoudre plus de trois cents systèmes pour le prix d'une factorisation. Calculer puis multiplier coûterait trois fois plus cher ( flops pour l'inverse) et, nous le verrons, serait moins précis.
Vous devez résoudre pour seconds membres différents, avec de taille . Quelle stratégie est la plus économique?
Le pivotage partiel
L'hypothèse «aucun échange de lignes» n'est pas seulement une commodité théorique: la matrice , inversible, n'a pas de décomposition LU (le premier pivot est nul). Plus grave, en arithmétique flottante, un pivot petit est presque aussi dangereux qu'un pivot nul.
La parade est le pivotage partiel: à chaque étape, on choisit comme pivot le coefficient de plus grande valeur absolue dans la colonne courante (sur et sous la diagonale) et l'on échange les lignes en conséquence. Tous les multiplicateurs vérifient alors , ce qui empêche l'amplification catastrophique ci-dessus. Les échanges de lignes se résument en une matrice de permutation (chapitre 2).
Nous admettons ce théorème; l'idée est simple. À chaque étape, la colonne courante (sous la diagonale incluse) n'est pas entièrement nulle, sinon la matrice serait singulière: le pivot de plus grande valeur absolue est donc non nul. On montre ensuite qu'un échange de lignes effectué à l'étape peut être «remonté» avant toutes les opérations d'élimination précédentes, à condition d'échanger aussi les lignes correspondantes des multiplicateurs déjà stockés dans ; toutes les permutations se regroupent ainsi dans , et l'on est ramené au théorème 12.1 pour la matrice . Le système devient : on permute le second membre, puis on substitue comme en (12.1). C'est exactement ce que fait scipy.linalg.lu_factor ou l'opérateur \ de MATLAB pour une matrice carrée quelconque.
Remettez dans l'ordre les étapes de la résolution de par décomposition LU avec pivotage partiel.
Glissez les éléments pour les mettre dans le bon ordre
- Permuter le second membre: former
- Résoudre par substitution arrière
- Ranger les multiplicateurs dans et la matrice échelonnée dans , de sorte que
- Résoudre par substitution avant
- À chaque étape de l'élimination, choisir dans la colonne courante le coefficient de plus grande valeur absolue, échanger les lignes et enregistrer l'échange dans
Déterminant via LU
Le déterminant d'un produit est le produit des déterminants (chapitre 3), celui d'une matrice triangulaire est le produit de ses coefficients diagonaux, et selon la parité du nombre d'échanges. De on tire donc
Pour la matrice de l'exemple 12.1, (aucun échange). C'est ainsi que numpy.linalg.det calcule un déterminant: en flops, et non par le développement selon une ligne, dont le coût en est prohibitif dès .
La décomposition de Cholesky
Lorsque est symétrique définie positive — cas des matrices de rigidité en mécanique des structures, des matrices des moindres carrés, des matrices de covariance en statistique — on peut faire deux fois mieux.
Démonstration. Au chapitre 11, nous avons vu qu'une matrice symétrique est définie positive si et seulement si tous ses mineurs principaux dominants ( le bloc en haut à gauche) sont strictement positifs. L'élimination de Gauss sans échange sur transforme en le bloc , sans changer son déterminant: , d'où le -ième pivot . Aucun pivot n'est nul et le théorème 12.1 donne de manière unique. Notons et , triangulaire supérieure unitaire: . La symétrie de donne , qui est une autre décomposition LU de (facteur inférieur unitaire , facteur supérieur ). Par unicité, , donc . Comme les sont positifs, existe et : le facteur est triangulaire inférieur à diagonale . L'unicité découle de celle de la décomposition LU: si , alors avec la diagonale de , ce qui force et .
Algorithme. On identifie les coefficients de colonne par colonne, ce qui donne, pour ,
Le coût est d'environ flops, la moitié de la décomposition LU, et aucun pivotage n'est nécessaire (la stabilité est automatique: on montre que ). Si une racine carrée d'un nombre négatif apparaît, c'est que n'était pas définie positive: l'algorithme de Cholesky est d'ailleurs le test numérique standard de positivité.
La décomposition QR
Gram–Schmidt vu comme une factorisation
Le procédé de Gram–Schmidt (chapitre 7) transforme une famille libre de en une famille orthonormée qui engendre les mêmes sous-espaces emboîtés: pour tout . Rangeons les en colonnes d'une matrice et les en colonnes de .
Démonstration. Le procédé de Gram–Schmidt construit, pour ,
avec parce que . En posant pour , et pour , la relation ci-dessus se réécrit
ce qui est exactement la -ième colonne de l'égalité matricielle .
Les réflexions de Householder
Le procédé de Gram–Schmidt est parfait sur le papier, mais en arithmétique flottante il perd progressivement l'orthogonalité: si deux colonnes sont presque parallèles, la soustraction est une différence de nombres proches, et les erreurs d'arrondi dominent le petit reste . Les bibliothèques numériques calculent autrement: en appliquant à une suite de qui annulent, colonne après colonne, les coefficients sous la diagonale, exactement comme l'élimination de Gauss, mais avec des matrices orthogonales à la place des matrices élémentaires.
Démonstration. 1. Posons , la matrice de la projection orthogonale sur la droite (chapitre 7). Elle est symétrique et . Donc est symétrique et
ce qui prouve à la fois l'orthogonalité et .
- Notons et . Alors et . Par conséquent
Géométriquement, et ont la même longueur; la réflexion par rapport à l'hyperplan médiateur de ces deux vecteurs (orthogonal à leur différence ) envoie l'un sur l'autre. Par exemple, pour , , , et
L'algorithme de Householder. On choisit qui envoie la première colonne de sur : la première colonne de est nulle sous la diagonale. On recommence avec une réflexion agissant sur les lignes à (bloc-diagonale avec en position ) pour annuler la deuxième colonne sous la diagonale, sans toucher à la première, et ainsi de suite. Après étapes, , d'où avec orthogonale (chaque est son propre inverse). Les premières colonnes de forment le du théorème 12.4 (au signe des colonnes près).
Soit et . Calculez le coefficient (ligne 1, colonne 1) de la matrice de Householder .
Application aux moindres carrés
Au chapitre 7, la solution au sens des moindres carrés de (système surdéterminé, ) était obtenue par les équations normales . La décomposition QR en donne une version plus stable.
Démonstration. Comme est de rang , est inversible et les équations normales ont une solution unique (chapitre 7). Remplaçons par : puisque , et . Les équations normales s'écrivent donc ; comme est inversible (diagonale strictement positive), l'est aussi et l'on peut simplifier: .
L'algorithme QR pour les valeurs propres
La décomposition QR a une seconde application, surprenante: elle est au cœur de l'algorithme standard de calcul des valeurs propres, celui de numpy.linalg.eig. Le polynôme caractéristique, si commode au chapitre 9, est inutilisable numériquement: ses coefficients sont extrêmement sensibles aux arrondis et ses racines le sont encore plus.
Principe. Partant de , on factorise puis on multiplie les facteurs :
Comme , on a : toutes les matrices sont orthogonalement semblables à et ont les mêmes valeurs propres (chapitre 6). Le fait remarquable, que nous admettons, est le suivant: , rangées par valeur absolue décroissante, et les produits convergent vers la matrice orthogonale des vecteurs propres. Pour une matrice quelconque, tend vers une forme triangulaire supérieure (forme de Schur), dont la diagonale porte les valeurs propres.
La décomposition en valeurs singulières
Les décompositions LU et QR sont des outils de calcul. La décomposition en valeurs singulières (SVD, singular value decomposition) est davantage: elle révèle la structure géométrique complète d'une matrice quelconque, même rectangulaire, même de rang déficient, là où la diagonalisation exige une matrice carrée et diagonalisable.
Le théorème
Démonstration. La matrice est symétrique, et semi-définie positive: pour tout , . Par le théorème spectral (chapitre 11), elle possède une base orthonormée de vecteurs propres associés à des valeurs propres (positives par la remarque précédente appliquée à : ). Soit le nombre de valeurs propres strictement positives; posons et, pour ,
Ces vecteurs sont orthonormés: . On complète en une base orthonormée de (théorème de la base incomplète puis Gram–Schmidt), rangée dans . Pour , donc . Au total, pour et sinon, ce qui s'écrit matriciellement , et étant orthogonale, .
La démonstration est constructive, mais ce n'est pas ainsi que les logiciels calculent la SVD: former élève le conditionnement au carré (théorème 12.13 plus bas). L'algorithme de Golub et Kahan (1965) réduit à une forme bidiagonale par des réflexions de Householder, puis applique une variante de l'algorithme QR.
Interprétation géométrique
Lisons de droite à gauche sur un vecteur : est une isométrie (rotation ou réflexion) qui envoie la base orthonormée sur la base canonique; étire l'axe d'un facteur (et écrase les axes ); est une nouvelle isométrie qui envoie la base canonique sur . En particulier, l'image de la sphère unité de est un ellipsoïde de (éventuellement aplati) dont les demi-axes sont les vecteurs .
Faites varier les coefficients de A = [[a, b], [c, d]]. Le cercle unité (gris) est envoyé sur une ellipse (trait plein) dont les demi-axes sont σ₁u₁ et σ₂u₂; les vecteurs v₁ et v₂ (pointillés) sont les points du cercle envoyés sur ces demi-axes.
Rang et sous-espaces fondamentaux
Démonstration. Par (12.11), pour tout , , et réciproquement chaque est dans l'image: , de dimension puisque les sont orthonormés donc libres. D'autre part, pour , donc ; par le théorème du rang (chapitre 5), , et l'inclusion est une égalité. Les deux autres formules s'obtiennent en appliquant ce qui précède à , qui est une SVD de avec les rôles de et échangés.
Ce théorème donne des bases orthonormées des quatre sous-espaces fondamentaux d'un coup, et rend visible le théorème du chapitre 7 selon lequel et . Par exemple, pour , on trouve , de valeurs propres et : une seule valeur singulière , donc ; engendre et engendre ; engendre et engendre . Numériquement, le d'une matrice se calcule en comptant les valeurs singulières supérieures à un seuil (par défaut dans NumPy): l'élimination de Gauss, elle, ne sait pas distinguer un pivot nul d'un pivot de .
Normes matricielles
Démonstration. Soit unitaire et , unitaire lui aussi car est orthogonale. Alors , avec égalité pour , c'est-à-dire . Pour Frobenius, , en utilisant (chapitre 9).
La pseudo-inverse
Démonstration. Posons et . Comme est orthogonale, . Le second terme ne dépend pas de ; le premier est nul, donc minimal, si et seulement si pour , les composantes restant libres. Parmi ces minimiseurs, est minimale lorsque pour ; le vecteur obtenu est exactement , soit .
Reprenons et . Le système n'a pas de solution () et, étant de rang , les solutions au sens des moindres carrés forment une droite entière. La pseudo-inverse est , d'où . On vérifie que est bien la projection orthogonale de sur , et que est orthogonal à , ce qui en fait le minimiseur le plus court. C'est ce que calcule pour un système de rang déficient.
Une matrice a pour valeurs singulières , et . Laquelle de ces affirmations est vraie?
Conditionnement et erreurs d'arrondi
Nombres flottants
Un ordinateur représente les réels en virgule flottante: en double précision (norme IEEE 754, type float de Python), un nombre s'écrit avec une mantisse de 52 bits. Entre deux flottants consécutifs, l'écart relatif est l'epsilon machine : chaque opération arithmétique élémentaire est effectuée avec une erreur relative au plus , soit environ 16 chiffres significatifs justes. Cela paraît beaucoup, mais nous avons vu avec le pivot qu'un algorithme mal conçu peut perdre ces chiffres en une seule soustraction. La question centrale est la suivante: en quoi la précision de la dépend-elle de la précision des ?
Le conditionnement d'une matrice
Démonstration. Si est inversible, alors , qui est une SVD de (matrices orthogonales et , matrice diagonale de coefficients , à réordonner). Par la proposition 12.9, et .
Géométriquement, est le rapport du grand au petit demi-axe de l'ellipsoïde image de la sphère unité (explorateur ci-dessus): une matrice mal conditionnée aplatit la sphère en une galette, et l'on ne peut plus distinguer, dans l'image, des directions qui étaient très différentes au départ. Le théorème suivant transforme cette image en une borne d'erreur.
Démonstration. Par soustraction des deux systèmes, , donc et . D'autre part , soit . En multipliant membre à membre ces deux inégalités entre nombres positifs,
Le conditionnement est donc le facteur d'amplification des erreurs relatives: si les données sont connues à près et , la solution n'est garantie qu'à près. Avec des données en double précision (), une matrice de conditionnement ne laisse que 6 chiffres justes. La borne est atteinte lorsque est dans la direction de (le plus étiré) et dans celle de (le plus écrasé); on démontre une inégalité analogue pour une perturbation de la matrice.
Calculez le conditionnement spectral de la matrice de l'exemple 12.7.
Conséquences pratiques
Démonstration. De on tire , avec . C'est une diagonalisation orthogonale de la matrice symétrique définie positive , donc aussi sa SVD: ses valeurs singulières sont les et .
Stabilité inverse. Le conditionnement décrit la sensibilité du problème; la qualité de l'algorithme se mesure autrement. Un algorithme est dit stable au sens inverse (backward stable) si la solution calculée est la solution exacte d'un problème voisin: avec de l'ordre de . La décomposition QR de Householder et la SVD sont stables au sens inverse; la décomposition LU avec pivotage partiel l'est en pratique (Wilkinson, 1961). Combinée à (12.14), la stabilité inverse donne la règle d'or: .
Applications
Compression d'image par SVD tronquée
Une image en niveaux de gris de pixels est une matrice ; sa SVD (12.11) l'écrit comme somme de «couches» d'importance décroissante. En ne gardant que les premières, on obtient la
matrice de rang qui ne demande de stocker que nombres au lieu de .
Nous admettons l'optimalité (la démonstration, courte mais astucieuse, se trouve dans Trefethen et Bau); les valeurs des erreurs, elles, découlent directement de la proposition 12.9 appliquée à , dont les valeurs singulières sont .
Pour une photographie de pixels, garder valeurs singulières demande nombres au lieu de , soit un taux de compression d'environ ; comme les valeurs singulières d'une image naturelle décroissent vite, le résultat est reconnaissable, quoique flou dans les détails. Le principe — représenter les données dans une base adaptée et négliger les petites composantes — est le même que dans les formats JPEG (base de cosinus) et dans la réduction de dimension des données.
Analyse en composantes principales
L'analyse en composantes principales (ACP) cherche les directions dans lesquelles un nuage de points de est le plus dispersé. Soit la matrice des données centrées (une ligne par observation, une colonne par variable, la moyenne de chaque colonne ramenée à ). La matrice de covariance empirique est , et la variance des données projetées sur une direction unitaire vaut . Par la SVD , on a : les sont les vecteurs singuliers à droite de , et la variance portée par la -ième vaut . La preuve que maximise est celle de la proposition 12.9.
Systèmes surdéterminés en géodésie et positionnement
Le récepteur GPS d'un smartphone reçoit à chaque instant les signaux de huit à douze satellites, et cherche quatre inconnues: ses trois coordonnées et le décalage de son horloge. Les équations de distance sont non linéaires; on les linéarise autour d'une position approchée (méthode de Gauss–Newton), ce qui donne à chaque itération un système surdéterminé résolu par QR. La géodésie fait de même à grande échelle: la compensation par moindres carrés du réseau de triangulation suisse (cadre de référence MN95 de swisstopo) ajuste des dizaines de milliers de mesures pour quelques milliers de coordonnées inconnues. Gauss lui-même a inventé la méthode des moindres carrés pour ce type de problème, lors du levé du royaume de Hanovre.
Méthodes itératives pour les grands systèmes
Lorsque atteint le million, la décomposition LU (coût , mémoire ) est hors de portée. Mais les matrices issues des équations aux dérivées partielles sont creuses: chaque ligne n'a que quelques coefficients non nuls, et le produit ne coûte que quelques flops. Les méthodes itératives n'utilisent que ce produit. Écrivons avec la diagonale (supposée sans zéro), la partie strictement inférieure et la partie strictement supérieure. Le système équivaut à , ce qui suggère l'itération de :
La méthode de Gauss–Seidel utilise immédiatement les composantes déjà mises à jour:
Nous admettons ce théorème; l'idée du critère est que l'erreur vérifie , donc , et si et seulement si les valeurs propres de sont de module inférieur à (chapitre 10).
Un aperçu des solveurs creux
Dans un calcul par éléments finis (chapitre 7 du cours de mécanique des structures), la matrice de rigidité d'un maillage de nœuds a coefficients dont seuls quelques sont non nuls. Deux familles de solveurs se partagent le travail. Les solveurs directs creux effectuent une décomposition LU ou de Cholesky en renumérotant les inconnues pour limiter le remplissage (les zéros de qui deviennent non nuls dans ); ils sont robustes et permettent de traiter de nombreux seconds membres. Les solveurs itératifs, héritiers de Jacobi et de Gauss–Seidel — méthode du gradient conjugué pour les matrices symétriques définies positives, GMRES en général — ne demandent que des produits matrice-vecteur et une mémoire proportionnelle à ; leur vitesse de convergence dépend directement du conditionnement, que l'on réduit par un (résoudre avec facile à inverser). Le choix entre les deux, et le réglage du préconditionneur, sont le quotidien du calcul scientifique.
Synthèse
- LU: l'élimination de Gauss est la factorisation ( triangulaire inférieure unitaire des multiplicateurs, échelonnée); coût , puis par second membre; le pivotage partiel () est indispensable en flottants; . Pour symétrique définie positive, Cholesky donne pour la moitié du coût, sans pivotage.
Pourquoi les logiciels effectuent-ils un pivotage partiel lors de la décomposition LU?
Exercices
Vous pouvez afficher le corrigé directement sous chaque énoncé après avoir cherché la solution.
Soit .
Soit et .
Soit .
- Calculer les valeurs singulières de .
- Déterminer une SVD complète.
Soit et . On utilise la norme des vecteurs, , et la norme matricielle subordonnée .
Soit de SVD , avec les valeurs singulières ().
Références
- Trefethen, L. N. et Bau, D., Numerical Linear Algebra, SIAM, Philadelphie, 1997 (leçons 4–5 sur la SVD, 7–11 sur QR et les moindres carrés, 12–22 sur le conditionnement et la stabilité, 20–23 sur LU et Cholesky).
- Strang, G., Introduction to Linear Algebra, 5e éd., Wellesley-Cambridge Press, chap. 2.6 (LU), 4.4 (QR), 7 (SVD) et 9 (algèbre linéaire numérique).
- Lay, D. C., Lay, S. R. et McDonald, J. J., Algèbre linéaire et applications, 5e éd., Pearson, chap. 2.5, 6.4 et 7.4–7.5.
- Golub, G. H. et Van Loan, C. F., Matrix Computations, 4e éd., Johns Hopkins University Press, Baltimore, 2013.
- Quarteroni, A., Sacco, R. et Saleri, F., Méthodes numériques: algorithmes, analyse et applications, Springer, Milan, 2007 (auteurs de l'EPFL et du Politecnico di Milano).
- Higham, N. J., Accuracy and Stability of Numerical Algorithms, 2e éd., SIAM, 2002 (pour la stabilité inverse et le pivotage).