Chapitre 10 : algorithmes de calcul matriciel Motivation : Les algorithmes de résolutions de systèmes linéaires et de calcul sur les matrices seront implémentés par vous-mêmes en T.P. Le but de ces notes est de présenter ces différents algorithmes, de voir comment ils s articulent entre eux, de préciser quelques notions et outils qui pourront vous aider, et d autre part d analyser leur complexité. 0 Rappels sur les matrices en Python pur : a) Une matrice n est qu une liste de listes Par exemple A=[[ 1,],[3,4]] représentera pour nous la matrice ( 1 3 4 ). Les entrées de A sont obtenues via A[i][j]. Noter que l affichage d une matrice n est pas bien joli, mais qu il est facile de programmer une petite fonction qui fasse un affichage joli. Attention : En python, les indices commencent à 0, donc pour les matrices à A[0][0]. b) Une liste est un objet mutable On peut modifier les entrées de la matrice, c est bien, les fonctions peuvent transformer la matrice qu elles ont en argument, c est bien, mais il faut prendre garde aussi aux problèmes des éventuelles copies d une matrices qui pointeraient vers la même case mémoire... une modification de la copie modifiera aussi l original. On rappelle qu il existe un module appelé deepcopy qui résout ce problème des copies. 1 Résolution des systèmes triangulaires : On considère un système Y = T X avec T T S n (K) inversible et Y M n,1 (K) fixés, et on cherche l unique solution X M n,1 (K) de ce système. Un tel système se résout de bas en haut. A la ligne L n, on va seulement faire un quotient pour trouver x n = y n /t n,n. Mais ensuite à la ligne L i, on obtiendra x i par : x i = 1 t i,i (y i j>i t i,j x j ). Question : Donner l ordre de grandeur de la complexité de cet algorithme de résolution : Θ(n), Θ(n ), Θ(n 3 )? Pivot : mise sous forme triangulaire d une matrice On fixe une matrice A M n (K) inversible..1 La méthode du pivot, avec une spécificité pour les machines Le premier pivot Au début de la méthode du pivot, on veut nettoyer la première colonne en utilisant A(1, 1) comme pivot, via L i L i µ i L 1 pour i où µ i = A(i, 1)/A(1, 1). Mais le (seul) problème est que A(1, 1) peut être nul. Ce que dirait un mathématicien : On doit donc d abord rechercher la première entrée non nulle dans la colonne 1 et une fois cette entrée trouvée à une ligne L i échanger L i et L 1. Comme A est inversible, on sait qu on va toujours en trouver, car la première colonne ne peut pas être nulle. 1
Une précaution liée au calcul numérique pour le choix du pivot : Quand on manipule des flottants, le test de l égalité à zéro n est pas adapté, car parfois dans les calculs un nombre qui vaudrait théoriquement zéro sera remplacé par un nombre très petit. On pourrait remplacer le test d égalité à zéro par la comparaison avec le epsilon machine, mais : pour des raisons de meilleure précision du calcul numérique, il vaut mieux éviter de diviser par des très petits nombres. Corollaire du principe précédent, ce que dit un mathématicien numérique : il vaut mieux choisir comme pivot dans la colonne 1, l entrée ayant la plus grande valeur absolue Le pivot à l étape i : A l étape i, en suivant le principe précédent, on choisit parmi les lignes L j avec j i, celle où l entrée A(j, i) a la plus grande valeur absolue, et on l échange avec L i. Ensuite on se sert de cette nouvelle L i pour nettoyer la colonne C i en dessous de la diagonale. Remarque du mathématicien : là encore, on est sûr qu une des entrées A(j, i) avec j i est non nulle. Sinon, comme à ce stade les premières colonnes C 1,..., C i 1 sont déjà celles d une matrice T.S., on aurait C 1,..., C i liées.. Estimation de la complexité de la méthode du pivot précédente Ecrite de manière plus formelle, la description de l algorithme du pivot donnée au paragraphe précédent devient : On numérote ici les lignes en L 0,..., L n 1 dans l esprit de Python. pour i de 0 à n- : trouver j >=i tel que A(j,i) soit maximum échanger L_i et L_j pour k de i+1 à n L_k <- L_k - mu_k L_i Pour chaque valeur de i 0, n : la recherche de j coûte n i comparaisons, l échange éventuel de L i et L j coûte n + affectations (n pour les entrées des lignes, et pour i et j) pour chaque valeur de k entre i + 1 et n 1, la transvection coûte n affectations, et autant de divisions, multiplications, soustractions (une par entrée de la ligne). Propriété En ajoutant toutes ces contributions comme comptant 1, on obtient pour la méthode du pivot sur une matrice A GL n (K) un coût en Θ(n 3 ). 3 Application à la résolution de systèmes de Cramer 3.1 Codage matriciel d un système quelconque avec second membre : Remarque : Si on se donne un système linéaire quelconque S Y = AX avec A M m,n (K), Y M m,1 (K) et X M n,1 (K), où A et Y sont fixés et on cherche X, si on transforme ce système S par des opérations élémentaires sur les lignes, on arrive à un système équivalent S Y = A X où Y et A ont été modifiées par les mêmes opérations opérations sur les lignes. Ces systèmes équivalents ont bien sûr même ensemble de solution. On en déduit la :
Propriété-définition de la matrice augmentée associée à un système : Toutes les opérations sur un système peuvent être codées sur ce qu on appelle la matrice augmentée de ce système à savoir la matrice (A Y ) obtenue en rajoutant Y comme dernière colonne à A. Les opérations faites sur lignes du système sont faites sur les lignes de cette matrice. On arrive à une matrice (A Y ) telle qu on ait toujours l équivalence : AX = Y A X = Y. Exemple : On considère le système x + y + 7z = 1 x y + 5z = 5 x 3y 9z = 5 A ce système, on associe la matrice augmentée : 1 1 7 1 1 5 5 1 3 9 5 Comparons alors l effet d une opération élémentaire sur le système et la matrice augmentée. Par exemple, avec : L L L 1 le système devient : la matrice augmentée devient : x + y + 7z = 1 3y 9z = 3 x 3y 9z = 5 1 1 7 1 0 3 9 3 1 3 9 5 Ceci illustre bien qu il suffit de conduire les opérations élémentaires sur la matrice augmentée pour coder les différents systèmes équivalents obtenus par opérations élémentaires. Ici, en poursuivant le pivot avec la matrice augmentée : L 3 L 3 + L 1 L 1 3 L 1 1 7 1 0 3 9 3 0 6 1 1 7 1 0 1 3 1 0 6 L 3 L 3 + L 1 1 7 1 0 1 3 1 0 0 4 4 Cette matrice augmentée dont la première partie est une matrice TS 3 3 code le système triangulaire équivalent à notre système initial : x + y + 7z = 1 y + 3z = 1 4z = 4 3
3. Les deux étapes résolution d un système de Cramer par le pivot Définition : Un système de Cramer est un système AX = Y avec A matrice carrée inversible données, Y colonne donnée, et d inconnue une colonne X. On sait donc que ce système admet un unique solution. La première étape de la résolution : Transformer A en une matrice A triangulaire sup. avec la méthode du pivot sur les lignes donnée au.1. Appliquer les mêmes transformations sur les lignes à Y ce qui donne une nouvelle colonne Y. (On peut utiliser la matrice augmentée pour cela). La deuxième étape de la résolution : Résoudre le système triangulaire A X = Y avec la méthode du 1. Question : Quelle est la complexité totale de cet algorithme? 4
Chapitre 10 : algorithmes de calcul matriciel (suite) 4 Mise en perspective avec l inversion de matrices 4.1 Rappel sur l algorithme de Gauss-Jordan pour inverser une matrice 1 1 7 Si on reprend l exemple du 3.1, le système donné s écrivait AX = Y avec A = 1 5. 1 3 9 L algorithme dit de Gauss-Jordan, appelé simplement pivot matriciel pour inverser la matrice A, consiste en deux phases : phase de descente : faire les mêmes opérations sur les lignes qu au 3.1 pour arriver à une matrice TS dont on normalise les entrées diagonales à 1 (phase de descente à laquelle on s est arrêté pour le pivot au 3.1) phase de remontée : transformer ensuite les éléments au-dessus de la diagonale en 0. Chaque des opérations sur les lignes est répercutée sur une matrice témoin qui vaut I n au départ et A 1 à l arrivée. 4. Comparaison des coûts (culturel pour nous) 4..1 Coût du pivot de Gauss pour résoudre AX = Y : Dans la méthode du pivot de Gauss vue pour l inversion d un système au 3.1 : on arrête le pivot à la fin de la première phase (phase de descente) i.e. lorsque la matrice est triangulaire. En laissant de côté les affections, le coût de ce seul pivot pour rendre triangulaire est, pour n grand, équivalent à n 3 /3. Ensuite la résolution du système triangulaire étant en O(n ), le coût total de la méthode du pivot reste du n 3 /3. Propriété : résoudre, pour un Y fixé, le système AX = Y par le pivot de Gauss du 3 a, pour n grand, un coût en terme de nombres d opérations de l ordre de n 3 /3. 4.. Coût du calcul de A 1 par le pivot de Gauss-Jordan La phase de remontée rajoute des opérations qui font qu on montre la : Propriété : calculer A 1 par la méthode du pivot matriciel (Gauss-Jordan) a, pour n grand, un coût en terme de nombre d opérations de l ordre de n 3, donc supérieur. Retenir au moins que : l inversion par pivot de AX = Y coûte moins cher que le calcul de A 1 par pivot. 4.3 Cas où on doit résoudre plusieurs systèmes avec le même premier membre AX Si on a besoin de résoudre plusieurs système AX = Y 1, AX = Y,... AX = Y n, on se dit que dans ce cas le calcul de A 1 une fois pour toute semble bien justifié. On va cependant voir au 5 suivant, une méthode qui ne s applique pas à toutes les matrices inversibles mais à la plupart, mais qui, lorsqu elle s applique, est plus rapide que le calcul de l inverse. 5
5 L algorithme de décomposition A = L.U a) Une décomposition pour certaines matrices : On va montrer que certaines matrices inversibles A s écrivent comme un produit : A = L.U, avec L lower triangular autrement dit T.I. et matrice U upper triangular autrement dit T.S. b) A quoi sert une telle décomposition? Motivation : si on a plusieurs systèmes à résoudre avec le même premier membre Si on a plusieurs systèmes à résoudre avec la même matrice A et le second membre Y qui change et qu on connaît L et U telles que A = LU, alors : X = UX (1) AX = Y LUX = Y LX = Y () Ce qu on gagne : les deux systèmes LX = Y et UX = X sont triangulaires! Ainsi, connaissant déjà la décomposition LU d une matrice, la résolution des systèmes AX = Y devient un problème en O(n ) au lieu de O(n 3 )! c) Une C.N. pour qu une matrice inversible ait une décomposition L.U Notations : pour tout p 1, n, et toute matrice M M n (K), on note M p la matrice obtenue à partir de M en ne gardant que les p premières lignes et les p premières colonnes. Soit A GL n (K). Prop. (Maths) Justifier que s il existe un couple (L, U) M n (K) avec L triangulaire inférieure et U triangulaire supérieure telles que A = L.U. alors pour tout p 1, n, la matrice A p est inversible. Indication On pourra écrire L et U par bloc. Remarquer que l hypothèse A inversible entraîne L et U inversibles. d) Récip. du c), avec un algorithme effectif : En reprenant la méthode du pivot, on va voir que la réciproque du c) est vraie et surtout on va décrire un algorithme permettant d obtenir ces matrices L et U. L essentiel : l hyp. sur les A p permet de faire un pivot sans permutation de lignes Soit donc A M n (K) telle que pour tout p 1, n, A p soit inversible. 1ère étape : Pour p = 1, on obtient que A 1 = (a 1,1 ) est inversible i.e. a 1,1 0. Donc il suffit de faire directement les opérations L i L i a i,1 a 1,1 L 1 pour transformer la matrice A en une matrice qu on notera A (1) 0 dont la première colonne est 0 ème étape : Pour p =, si on considère la matrice qu on note A (1) obtenue à partir de A (1) en ne gardant que les deux premières lignes et les deux premières colonnes alors on remarque que A (1) est elle-même obtenue à partir seulement de A par une opération sur les lignes (L L a,1 L 1 ) Donc comme A est inversible par hypothèse, on est sûr que A (1) l est aussi. a 1,1 Mais A (1) = ( a 1,1 0 a (1) ). Donc on est sûr que a (1), est non nul., 6 a 1,1.
Il suffit donc d effectuer les opérations sur les lignes pour i = 3,..., n : L i L i a(1) i, L pour obtenir à partir de A (1) une matrice qu on notera A () dont les deux premières colonnes sont celles d une matrice T.S. Remarque importante : On a alors à ce stade A () = L () L (1) A avec L () L (1) matrice T.I. Itération du procédé : H.R. A l issue de l étape p 1, la matrice A a été transformée en une matrice qu on notera A (p 1) avec une relation A (p 1) = LA où L est T.I. Cette matrice A (p 1) a la propriété suivante : la matrice obtenue à partir A (p 1) en ne gardant que les p premières lignes et les p premières colonnes, qu on note A (p 1) p, est une matrice T.S. On utilise alors le fait que A (p 1) p est T.S. inversible pour s assurer que son entrée (p, p) est non nulle et on élimine alors par pivot sur les lignes L i, avec i p, toutes les entrées en dessous de la diagonale dans la colonne C p, en retranchant des multiples de L p. Ceci permet d établir la récurrence. C est le fait de ne faire que des transvections L j L j + µl i avec i < j qui dit que les opérations élémentaires correspondantes sont codées par des matrices T.I. e) Un des dangers de la décomposition LU : En pratique, une matrice dont les entrées sont des flottants est le plus souvent inversible (une simple perturbation numérique rend non nul le déterminant), et de même pour les sous-matrices, donc, la méthode LU s applique souvent. Cependant : le fait de ne pas chercher le meilleur pivot dans une colonne (celui le plus grand en valeur absolue), risque de provoquer des instabilités numériques (erreurs de calculs importantes), comme nous allons le voir au paragraphe suivant. La méthode du pivot de Gauss, où on cherche à chaque fois le pivot de plus grande valeur absolue est plus stable. 6 Exemples de problèmes numériques : 6.1 Ce qui se passe si on choisit un pivot trop petit Considérons le système : dont la solution exacte est : x = { 10 4 x y = 1, x + y =, 1 1 +.10 4 = 0, 99989998..., y = = 1, 00010001... 1 + 10 4 1 + 10 4 (les séquences surlignées désignent la période du développement décimal). Les écritures avec trois chiffres significatifs des solutions sont donc x 1, y 1. On va résoudre ce système en faisant les calculs eux-mêmes avec trois chiffres significatifs (taille de la mantisse). (M1) En prenant pour pivot le premier coefficient 10 4 (pivot très petit par rapport aux autres coefficients! on trouve le système équivalent de lignes L 1 et L L 1 10 L 4 1 { 10 4 x y = 1, (1 + 10 4 )y = + 10 4 Mais avec 3 chiffres significatifs 10 4 + 1 10 4 et 10 4 + 10 4, donc le système est devenu : { 10 4 x y = 1, 10 4 y = 10 4, a (1), 7
avec comme solution : { y = 1, x = 0 On est très loin des solutions approchées qu on aimerait trouver x = 1 et y = 1! (M) On se rassure : cela se passe beaucoup mieux en prenant le deuxième coefficient de la première colonne : pivot le plus grand En prenant donc le deuxième coefficient comme pivot, on fait l opération L 1 L 1 10 4 L ce qui donne : { ( 1 10 4 )y = 1, x + y = Le 1 10 4 est arrondi à 1 (trois chiffres significatifs), et on a le système : { y = 1, x + y = qui donnent les bonnes solutions approchées y = 1 et x = 1. Cet exemple illustre donc bien l importance du choix du pivot le plus grand en v. abs. 8
Solution du 5 c) Si on a A = LU, si p 1, n, on pose A = ( A p ) = (L p 0 ) (U p 0 ) donc par produit par bloc A p = L p.u p. Comme A est inversible, et que A = LU on sait que L et U sont inversible : c est évident avec le déterminant, sinon ici simplement en disant que rg(lu) min(rg(l), rg(u)). Mais L (resp. U) étant une matrice Triangle inférieure (resp. supérieure) inversible, toutes ses entrées diagonales sont non nulles, donc notamment toutes les entrées diagonales de L p (resp. U p ) sont non nulles et donc L p (resp. U p ) est encore inversible. On conclut que A p = L p.u p est inversible comme produit d inversibles. 9