4M053 - TP3
Pierre Marchand : pierre.mar[email protected]
Février 2017
Objectifs de la séance :
Implémenter des méthodes d’inversion directe.
Comparer le temps d’exécution de ces méthodes en fonction de la taille des matrices.
Méthodes directes
1 Décomposition LU
Cette méthode permet de transformer une matrice carré Aen un produit d’une matrice triangulaire
inférieur Let d’une matrice triangulaire supérieur D. Cette décomposition permet notamment de ré-
soudre des problèmes d’algèbre linéaire du type
Ax =y,
xet ysont des vecteurs. Plus précisément, connaissant yet A, cette méthode nous permet de trouver
xen multipliant à gauche par l’inverse de Lpuis l’inverse de U. Ce genre de problème apparaît souvent
dans la discrétisation d’équations aux dérivées partielles par exemple.
1.1 Algorithme
Notons ai,jle cœfficient (i,j) de la matrice A. Nous allons tout d’abord faire une factorisation partielle
de la matrice
A=µA1,1 A1,2
A2,1 A2,2=µL1,1 0
L2,1 IµU1,1 U1,2
0S2,2 (1)
Iest la matrice identité, les Ai,jsont des sous-blocs de A,S2,2 =A2,2 A2,1 A1
1,1 A1,2 est appelé le
complément de Shur, tandis que L1,1 est triangulaire inférieure et U1,1 est triangulaire supérieure telles
que A1,1 =L1,1U1,1.
Exercice 1 :
1. Vérifiez que la relation suivante est vraie. Entre autres, trouvez les expressions de L2,1 et U1,2.
Nous avons alors le théorème suivant :
Théorème 1. La matrice A admet une factorisation LU si et seulement si le bloc A1,1 et le complément de
Shur S2,2 sont eux-mêmes factorisables. La composition LU de la matrice est déterminée par les factorisa-
tions des blocs A1,1 =L1,1U1,1 et S2,2 =L2,2U2,2 selon la formule :
µA1,1 A1,2
A2,1 A2,2=µL1,1 0
L2,1 L2,2µU1,1 U1,2
0U2,2
où L2,1 et U1,2 sont ceux de la factorisation partielle (1).
1
En d’autres termes, ce théorème nous dit que dès lors qu’on arrive à décomposer un bloc de la diagonale
A1,1 sous forme LU, nous n’avons plus qu’à calculer L2,1,U1,2 et S2,2 puis on cherche la décomposition
LU de S2,2.
Exercice 2 :
1. Calculez la factorisation partielle de Aavec A1,1 =a1,1 et L1,1 =l1,1 =1. Donnez l’expression de
tous les cœfficients. Écrire sur le papier un algorithme pour construire la factorisation partielle.
2. En déduire l’algorithme complet en utilisant le théorème précédent.
1.2 Implémentation
Exercice 3 :
1. Définissez la fonction
1void decomp_LU( const Matrice &M, Matrice &L , Matrice &U, ) ;
qui construit dans Let U, la décomposition LU de M.
2. Remarquez que finalement, nous pouvions stocker directement les cœfficients de Let Udans la
matrice Aafin d’éviter de créer deux autres matrices (avec le surcoût de mémoire que cela im-
plique). Vous pouvez donc définir une autre fonction qui construit Let Umais qui les stocke dans
A. (Attention, le produit matrice vecteur n’a plus de sens une fois cette fonction appliquée.)
3. Résolvez le problème suivant :
21 0 0
1 2 1 0
01 2 1
0 0 1 2
x=
1
1
1
1
.
4. Résolvez le système H y =boù H est une matrice de Hilbert : c’est-à-dire une matrice carrée de
taille N×Nde terme générale :
Hi,j=1
i+j1
et b le vecteur de taille Nbi=1. (On fera en sorte de pouvoir essayer ces résolutions pour
différentes valeurs de N).
2 Décomposition de Cholesky
Si Aest symétrique définie positive, une alternative à la décomposition LU , qui utilise à son avantage
les propriétés de Aest la décomposition de Cholesky :
A=LLT
Lest une matrice triangulaire inférieure.
2.1 Algorithme
Exercice 4 :
1. Calculez la factorisation partielle de Aavec A1,1 =a1,1 et L1,1 =l1,1 =pa1,1. Donnez l’expression
de tous les cœfficients. Écrire sur la papier un algorithme pour construire la factorisation partielle.
2. Déduisez en l’algorithme complet en utilisant le théorème 1et en admettant que le complement
de Shur est aussi symétrique définie positif. Pensez à utiliser la symétrique de la matrice A.
2
2.2 Implémentation
Exercice 5 :
1. Définissez la fonction
1matrice decomp_Cholesky ( const Matrice &M) ;
qui renvoie la matrice Lde la décomposition de Cholesky de M. Vous pouvez faire la même re-
marque que pour la décomposition LU et faire une fonction qui stocke les cœfficients de Ldans
A.
2. Résolvez le problème suivant :
21 0 0
1 2 1 0
01 2 1
0 0 1 2
x=
1
1
1
1
.
3. Résolvez le système H y =boù H est une matrice de Hilbert : c’est-à-dire une matrice carrée de
taille N×Nde terme générale :
Hi,j=1
i+j1
et ble vecteur de taille Nbi=1. (On fera en sorte de pouvoir essayer ces résolutions pour
différentes valeurs de N).
3 Comparaison
Nous voulons maintenant comparer la rapidité des deux méthodes en fonction de la taille des matrices.
Exercice 6 :
1. En utilisant la fonction clock de la bibliothèque standard ctime, comparez les temps d’exécution
des deux méthodes.
1#include <ctime >
2int main ( ) {
3cl ock_t s t ar t , end ;
4double msecs ;
5start = clock ( ) ;
6/*any s t u f f here . . . */
7end = clock ( ) ;
8msecs = ( ( double ) (end s t a rt ) ) / CLOCKS_PER_SEC ;
2. Faites des graphes du temps d’exécution par rapport à la taille de la matrice. On fera attention à
se placer en échelle logarithmique sur l’axe des abscisse afin de retrouver la complexité des algo-
rithmes (N3pour les deux). Vous pourrez utiliser Python avec matplotlib ou gnuplot par exemple.
3
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!