DÉCOMPOSITION LU D`UNE MATRICE

Transcription

DÉCOMPOSITION LU D`UNE MATRICE
Informatique pour tous
Décomposition LU d’une matrice
DÉCOMPOSITION LU D’UNE
MATRICE
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
DÉCOMPOSITION LU D’UNE
MATRICE
I-Un peu de théorie
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
DÉCOMPOSITION LU D’UNE
MATRICE
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
La factorisation LU d'une matrice An×n est une méthode de décomposition très importante dans le
domaine de l'analyse numérique. Sa définition est simple, mais ses applications sont très nombreuses et très
utiles, nous verrons pourquoi plus tard.
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
La factorisation LU d'une matrice An×n est une méthode de décomposition très importante dans le
domaine de l'analyse numérique. Sa définition est simple, mais ses applications sont très nombreuses et très
utiles, nous verrons pourquoi plus tard.
Cependant, cette méthode n’est pas implémentée dans numpy.linalg (alors qu’elle est utilisée pour
réaliser la fonction solve qui résout les systèmes d’équations linéaires !)
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
La factorisation LU d'une matrice An×n est une méthode de décomposition très importante dans le
domaine de l'analyse numérique. Sa définition est simple, mais ses applications sont très nombreuses et très
utiles, nous verrons pourquoi plus tard.
Cependant, cette méthode n’est pas implémentée dans numpy.linalg (alors qu’elle est utilisée pour
réaliser la fonction solve qui résout les systèmes d’équations linéaires !)
Nous allons donc créer une fonction decomp_LU() pour combler ce manque.
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
La factorisation LU d'une matrice An×n est une méthode de décomposition très importante dans le
domaine de l'analyse numérique. Sa définition est simple, mais ses applications sont très nombreuses et très
utiles, nous verrons pourquoi plus tard.
Cependant, cette méthode n’est pas implémentée dans numpy.linalg (alors qu’elle est utilisée pour
réaliser la fonction solve qui résout les systèmes d’équations linéaires !)
Nous allons donc créer une fonction decomp_LU() pour combler ce manque.
Pour être honnête, cette fonction existe dans la librairie scipy.linalg, on pourra l’utiliser pour
contrôler nos résultats..
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
DÉCOMPOSITION LU D’UNE
MATRICE
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
La factorisation LU consiste à écrire une matrice inversible A comme le produit de deux autres matrices
L et U : A = L×U.
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
La factorisation LU consiste à écrire une matrice inversible A comme le produit de deux autres matrices
L et U : A = L×U.
L est une matrice triangulaire inférieure ayant des 1 sur la diagonale
0
1

 l2,1 1
L =  l3,1 l3,2

⋮
 ⋮
l
 n ,1 ln ,2
0 ...
0 ...
1 ...
⋱ ⋮
ln ,3 ⋯
0

0
0

⋮
1 
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
La factorisation LU consiste à écrire une matrice inversible A comme le produit de deux autres matrices
L et U : A = L×U
L est une matrice triangulaire inférieure ayant des 1 sur la diagonale
et U une matrice triangulaire supérieure.
0
1

 l2,1 1
L =  l3,1 l3,2

⋮
 ⋮
l
 n ,1 ln ,2
0 ...
0 ...
1 ...
⋱ ⋮
ln ,3 ⋯
0

0
0

⋮
1 
 u1,1 u1,2 ... u1,n −1 u1,n 


0
u
...
u
u
2,2
2, n −1
2, n 

0 ... u3,n −1 u3,n 
U = 0


⋮
⋮
⋱
⋮
⋮


 0

0
0
⋯
u
n
,
n


Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
Par exemple, la matrice A suivante :
se factorise en
 2 −1 0 


A =  −1 2 −1
 0 −1 2 


0
0   2 −1
0 
 1

 

A =  −1/ 2
1
0  ⋅  0 3 / 2 −1 
 0
−2 / 3 1   0 0 4 / 3 

L
U
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
Par exemple, la matrice A suivante :
se factorise en
 2 −1 0 


A =  −1 2 −1
 0 −1 2 


0
0   2 −1
0 
 1

 

A =  −1/ 2
1
0  ⋅  0 3 / 2 −1 
 0
−2 / 3 1   0 0 4 / 3 

L
U
Travail demandé : Calculer à la main le produit des deux matrices L et U
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
DÉCOMPOSITION LU D’UNE
MATRICE
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
On sait que la méthode de Gauss passe par une triangularisation de la matrice A. On peut donc réutiliser
la technique mise en œuvre pour cela.
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
On sait que la méthode de Gauss passe par une triangularisation de la matrice A. On peut donc réutiliser
la technique mise en œuvre pour cela.
Pour éliminer la première « sous »-colonne de A, on transvecte toutes les lignes Li pour i compris
entre 2 et n.
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
On sait que la méthode de Gauss passe par une triangularisation de la matrice A. On peut donc réutiliser
la technique mise en œuvre pour cela.
Pour éliminer la première « sous »-colonne de A, on transvecte toutes les lignes Li pour i compris
entre 2 et n.
Pour la ligne i, on fait la transvection Li ← Li − µi1L1 avec µi1 = ai,1 / a1,1 .
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
On sait que la méthode de Gauss passe par une triangularisation de la matrice A. On peut donc réutiliser
la technique mise en œuvre pour cela.
Pour éliminer la première « sous »-colonne de A, on transvecte toutes les lignes Li pour i compris
entre 2 et n.
Pour la ligne i, on fait la transvection Li ← Li − µi1L1 avec µi1 = ai,1 / a1,1 .
On peut alors écrire cette transformations sous une forme matricielle
0 0 ...
 1

⋮ ⋮ ...
 ⋮
Ei1 A =  −µi1 0 1 ...

⋮ ⋱ ⋮
 ⋮
 0
0 0 ⋯

0   a1,1

⋮  ⋮
0   ai ,1

⋮  ⋮
1   an ,1
a1,2
⋮
...
...
a1,n −1
⋮
ai ,2
...
ai ,n −1
⋮
⋱
⋮
an ,2 ⋯ an ,n −1
a1,n 

⋮ 
ai ,n 

⋮ 
an ,n 
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
En faisant de même pour toutes les lignes pour la sous colonne 1 puis pour toutes les sous colonnes, on
obtient :
Enn ⋯ Eij ⋯ En1 ⋯ E31 E21 A = U
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
En faisant de même pour toutes les lignes pour la sous colonne 1 puis pour toutes les sous colonnes, on
obtient :
Enn ⋯ Eij ⋯ En1 ⋯ E31 E21 A = U
où toutes les matrices Eij ont des 1 sur la diagonale et un seul coefficient non nul ailleurs, sous la diagonale.
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
En faisant de même pour toutes les lignes pour la sous colonne 1 puis pour toutes les sous colonnes, on
obtient :
Enn ⋯ Eij ⋯ En1 ⋯ E31 E21 A = U
où toutes les matrices Eij ont des 1 sur la diagonale et un seul coefficient non nul ailleurs, sous la diagonale.
La matrice E = Enn…Eij…En1…E31E21 est donc triangulaire inférieure avec des 1 sur la diagonale ainsi
que son inverse L = E−1.
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
En faisant de même pour toutes les lignes pour la sous colonne 1 puis pour toutes les sous colonnes, on
obtient :
Enn ⋯ Eij ⋯ En1 ⋯ E31 E21 A = U
où toutes les matrices Eij ont des 1 sur la diagonale et un seul coefficient non nul ailleurs, sous la diagonale.
La matrice E = Enn…Eij…En1…E31E21 est donc triangulaire inférieure avec des 1 sur la diagonale ainsi
que son inverse L = E−1.
On obtient bien A = E−1 U = LU.
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
En faisant de même pour toutes les lignes pour la sous colonne 1 puis pour toutes les sous colonnes, on
obtient :
Enn ⋯ Eij ⋯ En1 ⋯ E31 E21 A = U
où toutes les matrices Eij ont des 1 sur la diagonale et un seul coefficient non nul ailleurs, sous la diagonale.
La matrice E = Enn…Eij…En1…E31E21 est donc triangulaire inférieure avec des 1 sur la diagonale ainsi
que son inverse L = E−1.
On obtient bien A = E−1 U = LU.
On constate que les déterminations des coefficients de L et de U sont liées : cela va se retrouver dans
l’algorithme.
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
DÉCOMPOSITION LU D’UNE
MATRICE
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Un système de n équations à n inconnues peut s’écrire sous la forme matricielle AX = B.
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Un système de n équations à n inconnues peut s’écrire sous la forme matricielle AX = B.
On peut le résoudre par la méthode de Gauss. On a vu que sa complexité est en O(n3).
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Un système de n équations à n inconnues peut s’écrire sous la forme matricielle AX = B.
On peut le résoudre par la méthode de Gauss. On a vu que sa complexité est en O(n3).
Supposons maintenant que nous connaissons la factorisation LU de la matrice A. Alors, le système
AX = B peut se réécrire LUX = B.
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Un système de n équations à n inconnues peut s’écrire sous la forme matricielle AX = B.
On peut le résoudre par la méthode de Gauss. On a vu que sa complexité est en O(n3).
Supposons maintenant que nous connaissons la factorisation LU de la matrice A. Alors, le système
AX = B peut se réécrire LUX = B.
Si l’on pose Z = UX, on doit résoudre les équations LZ = B (où l’inconnue est Z) puis UX = Z où
l’inconnue est X.
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Un système de n équations à n inconnues peut s’écrire sous la forme matricielle AX = B.
On peut le résoudre par la méthode de Gauss. On a vu que sa complexité est en O(n3).
Supposons maintenant que nous connaissons la factorisation LU de la matrice A. Alors, le système
AX = B peut se réécrire LUX = B.
Si l’on pose Z = UX, on doit résoudre les équations LZ = B (où l’inconnue est Z) puis UX = Z où
l’inconnue est X.
Deux équations au lieu d’une, cela paraît plus compliqué mais ici, les matrices L et U sont
triangulaires et l’on sait que dans ce cas la résolution est rapide.
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
La méthode trouve son intérêt lorsque l’on doit résoudre l’équation AX = B pour plusieurs valeurs de
B.
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
La méthode trouve son intérêt lorsque l’on doit résoudre l’équation AX = B pour plusieurs valeurs de
B.
La méthode de Gauss doit recommencer à zéro pour chaque valeur de B alors que, une fois la
décomposition LU de A réalisée, on peut la réutiliser pour toutes les valeurs de B. La résolution des
différentes équations est alors plus rapide (voir le calcul de complexité de l’algorithme).
Informatique pour tous
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Décomposition LU d’une matrice
II-Algorithme
1) Décomposition LU
DÉCOMPOSITION LU D’UNE
MATRICE
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
II-Algorithme
1) Décomposition LU
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
II-Algorithme
1) Décomposition LU
L’algorithme proposé est le suivant (indices « à la matheux ») :
u1,1 = a1,1
Pour j de 2 à n
u1,j = a1,j
lj,1 = aj,1/a1,1
# la première ligne de U est la première ligne de A
# la première colonne de L est formée des pivots µi,1
Pour i de 2 à n − 1
ui ,i = ai ,i − ∑ k =1 li ,k uk ,i
i −1
Pour j de i + 1 à n
ui , j = ai , j − ∑ k =1 li ,k uk , j
# on fabrique les coefficients de U
et L en dehors de la diagonale
1
i −1
l j ,i =
a j ,i − ∑ k =1 l j ,k uk ,i
ui , i
n −1
# il reste à fabriquer le coefficient un,n
= an ,n − ∑ k =1 ln ,k uk , n
(
un , n
# on fabrique les coefficients de la diagonale de
U sauf un,n
i −1
)
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
II-Algorithme
1) Décomposition LU
L’algorithme proposé est le suivant (indices « à la matheux ») :
u1,1 = a1,1
Pour j de 2 à n
u1,j = a1,j
lj,1 = aj,1/a1,1
# la première ligne de U est la première ligne de A
# la première colonne de L est formée des pivots µi,1
Pour i de 2 à n − 1
ui ,i = ai ,i − ∑ k =1 li ,k uk ,i
i −1
Pour j de i + 1 à n
ui , j = ai , j − ∑ k =1 li ,k uk , j
# on fabrique les coefficients de U
et L en dehors de la diagonale
1
i −1
l j ,i =
a j ,i − ∑ k =1 l j ,k uk ,i
ui , i
n −1
# il reste à fabriquer le coefficient un,n
= an ,n − ∑ k =1 ln ,k uk , n
(
un , n
# on fabrique les coefficients de la diagonale de
U sauf un,n
i −1
)
Travail demandé : Implémenter en Python une fonction decomp_LU(A) qui renvoie les matrices L et
U de la décomposition de A (attention aux indices). Vérifier avec l’exemple donné précédemment. On
pourra utiliser la fonction sum qui s’applique aux éléments d’une liste. solution possible ou encore
Informatique pour tous
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Décomposition LU d’une matrice
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
DÉCOMPOSITION LU D’UNE
MATRICE
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
Informatique pour tous
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Décomposition LU d’une matrice
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
Le calcul précédent supposait implicitement que tous les pivots étaient non nuls ou pas trop petits pour
que le calcul de leur inverse soit possible ou correct numériquement lorsqu’il est effectué par la machine.
Informatique pour tous
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Décomposition LU d’une matrice
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
Le calcul précédent supposait implicitement que tous les pivots étaient non nuls ou pas trop petits pour
que le calcul de leur inverse soit possible ou correct numériquement lorsqu’il est effectué par la machine.
On a vu qu’une méthode utilisée pour pallier ce défaut est celle du « pivot partiel », consistant à
permuter les lignes pour obtenir le plus grand pivot (en valeur absolue) de la colonne traitée.
Informatique pour tous
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Décomposition LU d’une matrice
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
Le calcul précédent supposait implicitement que tous les pivots étaient non nuls ou pas trop petits pour
que le calcul de leur inverse soit possible ou correct numériquement lorsqu’il est effectué par la machine.
On a vu qu’une méthode utilisée pour pallier ce défaut est celle du « pivot partiel », consistant à
permuter les lignes pour obtenir le plus grand pivot (en valeur absolue) de la colonne traitée.
On peut traduire cette méthode sous forme du produit de matrices PA où P est une matrice de
permutation.
Informatique pour tous
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Décomposition LU d’une matrice
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
Le calcul précédent supposait implicitement que tous les pivots étaient non nuls ou pas trop petits pour
que le calcul de leur inverse soit possible ou correct numériquement lorsqu’il est effectué par la machine.
On a vu qu’une méthode utilisée pour pallier ce défaut est celle du « pivot partiel », consistant à
permuter les lignes pour obtenir le plus grand pivot (en valeur absolue) de la sous-colonne traitée.
On peut traduire cette méthode sous forme du produit de matrices PA où P est une matrice de
permutation.
Une matrice de permutation est issue de la matrice identité dans laquelle des lignes ont été permutées.
Elle vérifie donc les propriétés suivantes :
0 1 0 0
• les coefficients sont 0 ou 1 ;


0 0 1 0

• il y a un et un seul 1 par ligne ;
exemple :
1 0 0 0
• il y a un et un seul 1 par colonne.


0 0 0 1
Informatique pour tous
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Décomposition LU d’une matrice
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
Dans le cas de la recherche des pivots partiels, les 1 indiquent la position du maximum (en valeur
absolue) de la colonne partielle, avant chaque permutation.
Informatique pour tous
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Décomposition LU d’une matrice
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
Dans le cas de la recherche des pivots partiels, les 1 indiquent la position du maximum (en valeur
absolue) de la colonne partielle, avant chaque permutation.
 2 −5 1 3 


4
7
8
2

Par exemple, la matrice de permutation de la matrice A ci-contre : A = 
 3 1 1 6


4
1
7
9


0 1 0 0


1 0 0 0

est la matrice P suivante : P =
0 0 0 1


0 0 1 0
Travail demandé : Calculer à la main le produit PA. Que doit-on vérifier ?
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
Dans le cas de la recherche des pivots partiels, les 1 indiquent la position du maximum (en valeur
absolue) de la colonne partielle, avant chaque permutation.
 2 −5 1 3 


4
7
8
2

Par exemple, la matrice de permutation de la matrice A ci-contre : A = 
 3 1 1 6


4
1
7
9


0 1 0 0


1 0 0 0

est la matrice P suivante : P =
0 0 0 1


0 0 1 0
Travail demandé : Calculer à la main le produit PA. Que doit-on vérifier ?
4 7

2 −5
Réponse : PA = 
4 1

3 1
8 2

1 3
Les éléments de la diagonale sont les pivots partiels.
7 9

1 6
Informatique pour tous
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Décomposition LU d’une matrice
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
Dans le cas de la recherche des pivots partiels, les 1 indiquent la position du maximum (en valeur
absolue) de la colonne partielle, avant chaque permutation.
 2 −5 1 3 


4
7
8
2

Par exemple, la matrice de permutation de la matrice A ci-contre : A = 
 3 1 1 6


4
1
7
9


0 1 0 0


1 0 0 0

est la matrice P suivante : P =
0 0 0 1


0 0 1 0
Travail demandé : Calculer à la main le produit PA. Que doit-on vérifier ?
Calculer de même le produit AP. Que constate-t-on ?
Informatique pour tous
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Décomposition LU d’une matrice
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
Dans le cas de la recherche des pivots partiels, les 1 indiquent la position du maximum (en valeur
absolue) de la colonne partielle, avant chaque permutation.
 2 −5 1 3 


4
7
8
2

Par exemple, la matrice de permutation de la matrice A ci-contre : A = 
 3 1 1 6


4
1
7
9


0 1 0 0


1 0 0 0

est la matrice P suivante : P =
0 0 0 1


0 0 1 0
Travail demandé : Calculer à la main le produit PA. Que doit-on vérifier ?
Calculer de même le produit AP. Que constate-t-on ?
 −5 2 3 1 


7 4 2 8

Réponse : AP =
Les colonnes de la matrices A ont été permutées en suivant l’ordre
 1 3 6 1

 1 ← 2, 2 ← 1, 3 ← 4, 4 ← 3 indiqué par la position des 1 de la matrice P.
 1 4 9 7
Informatique pour tous
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Décomposition LU d’une matrice
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
Travail demandé : En s’inspirant de l’algorithme vu en cours (et rappelé ci-dessous) de la recherche
du pivot partiel puis de l’échange de ligne, définir une fonction mat_permut(M) qui renvoie la matrice de
permutation de la matrice M.
On devra créer une matrice identité dont on permutera ensuite les lignes. Si l’on utilise pour cela la
fonction numpy.eye(n), on prendra garde que l’affectation T1 = T2 (où T1 et T2 sont des tableaux numpy) ne
crée pas un nouvel objet. Toute modification ultérieure de l’un affectera donc aussi l’autre.
n = len(M)
j = i
for k in range(i+1, n):
if abs(M[k][i]) > abs(M[j][i]):
j = k
if j != i :
M[i][k], M[j][k] = M[j][k], M[i][k]
solution possible
Informatique pour tous
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Décomposition LU d’une matrice
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
3) Résolution de AX = B
DÉCOMPOSITION LU D’UNE
MATRICE
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
3) Résolution de AX = B
Informatique pour tous
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Décomposition LU d’une matrice
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
3) Résolution de AX = B
Comme on l’a vu, la résolution de l’équation matricielle AX = B (où X est l’inconnue) conduit à
résoudre successivement LZ = B (inconnue Z) puis UX = Z (inconnue X).
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
3) Résolution de AX = B
Comme on l’a vu, la résolution de l’équation matricielle AX = B (où X est l’inconnue) conduit à
résoudre successivement LZ = B (inconnue Z) puis UX = Z (inconnue X).
Comme L est triangulaire inférieure (avec des 1 sur la diagonale) l’algorithme de détermination de Z
est simple (indice à la matheux) :
z1 = b1
Pour i de 2 à n
zi = bi − ∑ j =1 Li , j z j
C’est une « substitution avant ».
i −1
Informatique pour tous
Décomposition LU d’une matrice
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
3) Résolution de AX = B
Comme on l’a vu, la résolution de l’équation matricielle AX = B (où X est l’inconnue) conduit à
résoudre successivement LZ = B (inconnue Z) puis UX = Z (inconnue X).
Comme L est triangulaire inférieure (avec des 1 sur la diagonale) l’algorithme de détermination de Z
est simple (indice à la matheux) :
z1 = b1
Pour i de 2 à n
zi = bi − ∑ j =1 Li , j z j
i −1
C’est une « substitution avant ».
Pour UX = Z, on retrouve la fin de l’algorithme de Gauss puisque U est triangulaire supérieure :
xn = z n
Pour i de n − 1 à 1
xi = zi − ∑ j =1+1U i , j x j / U i ,i
(
C’est une « substitution arrière ».
n
)
Informatique pour tous
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Décomposition LU d’une matrice
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
3) Résolution de AX = B
Travail demandé : Évaluer la complexité de cette résolution, si la décomposition LU de la matrice A
est déjà effectuée.
Informatique pour tous
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Décomposition LU d’une matrice
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
3) Résolution de AX = B
Travail demandé : Évaluer la complexité de cette résolution, si la décomposition LU de la matrice A
est déjà effectuée.
Réponse : Comptons le nombre d'opération des deux algorithmes.
Pour la substitution avant, on a i−1 multiplications à l’itération i. Ainsi, le nombre total est
∑ i =1 ( i − 1) =
n
n ( n − 1)
.
2
Pour la susbtitution arrière, on a n − (i+1) opérations à l’itération i . Comme i varie de n − 1 à 1 , on en a au
total
n ( n + 1)
∑ ( n − i + 1) = 2 .
n −1
i =1
Conclusion, la complexité de ces deux algorithme est en O(n2).
Si l’on résout AX = B pour plusieurs matrice B successivement, la résolution par cette méthode sera plus
rapide que la méthode de Gauss, la décomposition LU (qui est de complexité O(n3) n’étant faite qu’une seule
fois.
Informatique pour tous
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Décomposition LU d’une matrice
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
3) Résolution de AX = B
Travail demandé : Implémenter une fonction resol_LU(A,B) où A et B sont les matrices de l’équation
AX = B, cette fonction exploitant la décomposition LU de A. Vérifier son fonctionnement sur le système suivant :
2 x − 5 y + z + 3 t = 5
 4 x + 7 y + 8 z + 2t = 10


3 x + y + z + 6t = 2
 4 x + y + 7 z + 9t = 6
solution possible
Informatique pour tous
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Décomposition LU d’une matrice
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
3) Résolution de AX = B
Complément possible: Comparer « expérimentalement » la vitesse d’exécution de la résolution de AX
= B par la méthode de la décomposition LU et la méthode de Gauss dont on rappelle l’algorithme ci-dessous
(pour une matrice déjà permutée) :
def transvection_ligne(M, i, j, mu):
n = len(M)
nt = np.size(M)
if n == nt :
M[j] += mu * M[i]
else :
for k in range(n):
M[j][k] += mu * M[i][k]
script
def resol_Gauss(A0, B0):
A, B = np.copy(A0), np.copy(B0)
n = len(A)
assert len(A[0]) == n
# Mise sous forme triangulaire
for i in range(n):
for j in range(i+1, n):
r = A[j][i] / float(A[i][i])
transvection_ligne(A, i, j, -r)
transvection_ligne(B, i, j, -r)
# Phase de remontée
X = [0.] * n
for i in range(n-1, -1, -1):
X[i] = (B[i]-sum(A[i][j]*X[j] for j in range(i+1,n))) / A[i][i]
return X
Informatique pour tous
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Décomposition LU d’une matrice
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
3) Résolution de AX = B
Complément possible: Comparer « expérimentalement » la vitesse d’exécution de la résolution de
AX = B par la méthode de la décomposition LU et la méthode de Gauss dont on rappelle l’algorithme cidessous (pour une matrice déjà permutée):
Pour mesurer la durée d’un algorithme, on peut utiliser la méthode time() de la bibliothèque time, qui
renvoie une date en seconde. Par exemple :
import time
debut = time.time()
resol_LU(A, B)
fin = time.time()
duree = fin - debut
Informatique pour tous
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Décomposition LU d’une matrice
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
3) Résolution de AX = B
4) Compléments mathématiques
DÉCOMPOSITION LU D’UNE
MATRICE
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
3) Résolution de AX = B
4) Compléments mathématiques
Informatique pour tous
I-Un peu de théorie
1) Décomposer, pour quoi faire ?
2) Définition
3) Calcul
4) Un exemple d’application
Décomposition LU d’une matrice
II-Algorithme
1) Décomposition LU
2) Matrice de permutation
3) Résolution de AX = B
4) Compléments mathématiques
Existence, unicité
Pour toute matrice carrée, il existe une décomposition PLU. La décomposition LU existe si et
seulement si
toutes les sous matrices principales d'ordre 1 à n−1 sont inversibles. Si toutes les sous matrices
principales d'ordre 1 à n sont inversibles, elle est unique .
Applications
Outre la résolution des systèmes d’équations linéaires, la décomposition LU est utilisée pour calculer :
• l’inverse d’une matrice : les programmes informatiques qui implémentent ce type de calcul
utilisent généralement cette méthode.
• le déterminant d’une matrice : si A est sous forme LU ou PLU, son déterminant se calcule
facilement : det(A) = det(P)⋅det(L) ⋅ det(U). Les trois déterminants de ce produit sont très simples à calculer
(matrices triangulaires ou de permutations).
Informatique pour tous
Décomposition LU d’une matrice
Informatique pour tous
Décomposition LU d’une matrice
Informatique pour tous
Décomposition LU d’une matrice
def decomp_LU(A):
n = len(A)
U = np.zeros((n,n))
L = np.eye(n)
# le nombre de lignes de la matrice A
# créer une matrice n × n remplie de 0
# créer une matrice identité n × n
U[0][0] = A[0][0]
for i in range(1 , n) :
U[0][i] = A[0][i]
L[i][0] = A[i][0]/A[0][0]
# la première ligne de U est la première ligne de A
# la première colonne de L est formée des coefficients mi,1
for i in range(1, n-1):
U[i][i] = A[i][i] - sum(L[i][k] * U[k][i] for k in range(i))
# on fabrique les coefficients de la
diagonale de U sauf un,n
for j in range(i+1,n):
# on fabrique les coefficients de U et L en dehors de la diagonale
U[i][j] = A[i][j]- sum(L[i][k] * U[k][j] for k in range(i))
L[j][i] = A[j][i]- sum(L[j][k] * U[k][i] for k in range(i))
L[j][i] = L[j][i]/U[i,i]
U[n-1][n-1] = A[n-1][n-1] - sum(L[n-1][k] * U[k][n-1] for k in range(n-1)) # il reste à fabriquer le
coefficient un,n (ln,n vaut 1 on le sait d'avance)
return L,U
Informatique pour tous
Décomposition LU d’une matrice
def decomp_LU2(A):
n = len(A)
U = np.zeros((n,n))
L = np.eye(n)
U[0][0] = A[0][0]
for i in range(1 , n) :
U[0][i] = A[0][i]
L[i][0] = A[i][0]/A[0][0]
for i in range(1, n-1):
U[i][i] = A[i][i]
# le nombre de lignes de la matrice A
# créer une matrice n × n remplie de 0
# créer une matrice identité n × n
# la première ligne de U est la première ligne de A
# la première colonne de L est formée des coefficients mi,1
# on fabrique les coefficients de la diagonale de U sauf un,n
for k in range(i) :
U[i][i] -= L[i][k] * U[k][i]
for j in range(i+1,n):
# on fabrique les coefficients de U et L en dehors de la diagonale
U[i][j] = A[i][j]
L[j][i] = A[j][i]
for k in range(i):
U[i][j] -= L[i][k] * U[k][j]
L[j][i] -= L[j][k] * U[k][i]
L[j][i] = L[j][i]/U[i,i]
U[n-1][n-1] = A[n-1][n-1]
# il reste à fabriquer le coefficient un,n (ln,n vaut 1 on le sait d'avance)
for k in range(n-1) :
U[n-1][n-1] -= L[n-1][k] * U[k][n-1]
return L,U
Informatique pour tous
def mat_permut(M):
n = len(M)
permut = np.eye(n)
Décomposition LU d’une matrice
# créer une matrice identité n × n
# il faut réarranger la matrice identité de façon que le plus grand élément de chaque sous-colonne de M
# est placée sur la diagonale de M
for i in range(n) :
j=i
for k in range(i+1,n):
if abs(M[k][i]) > abs(M[j][i]):
j=k
if j != i:
#attention, les égalités simples ne créeent pas un nouvel objet
L = np.copy(permut[j])
permut[j] = np.copy(permut[i])
permut[i] = np.copy(L)
return permut
Informatique pour tous
def subst_avant(L,B) :
n = len(L)
Z = [0.] * n
Z[0] = B[0]
for i in range(1,n):
Z[i] = B[i] - sum(L[i][j] * Z[j] for j in range(i))
return Z
def subst_arriere(U,Z) :
n = len(U)
X = [0.] * n
for i in range(n-1, -1, -1):
X[i] = (Z[i]-sum(U[i][j]*X[j] for j in range(i+1,n))) / U[i][i]
return X
def resol_LU(A0,B0) :
A, B = np.copy(A0), np.copy(B0)
LU=decomp_LU(A)
L = LU[0]
U = LU[1]
Y = subst_avant(L,B)
return subst_arriere(U,Y)
Décomposition LU d’une matrice
Informatique pour tous
def transvection_ligne(M, i, j, mu) :
""" L_i < − L_i + mu.L_j """
n = len(M) # le nombre de ligne
nt = np.size(M)
if n == nt : #cas d’une matrice colonne
M[j] += mu * M[i]
else :
for k in range(n):
M[j][k] += mu * M[i][k]
def resol_Gauss(A0, B0) :
"""Résolution de A0.X=B0; A0 doit être inversible"""
A, B = np.copy(A0), np.copy(B0)
n = len(A)
assert len(A[0]) == n
# Mise sous forme triangulaire
for i in range(n) :
for j in range(i+1, n) :
r = A[j][i] / float(A[i][i])
transvection_ligne(A, i, j, -r)
transvection_ligne(B, i, j, -r)
# Phase de remontée
X = [0.] * n
for i in range(n-1, -1, -1):
X[i] = (B[i]-sum(A[i][j]*X[j] for j in range(i+1,n))) / A[i][i]
return X
Décomposition LU d’une matrice