Transformations de Householder

Projet Algorithmique Numerique
Compression d’image a travers la factorisation SVD
Projet n˚1
Groupe n˚2
Responsable : classerre
Secr´etaire : mghozzi
Codeurs : makdim, jdiebold, kgalienne
Compression d’image `
a travers
la factorisation SVD
R´esum´e : Ce projet consiste a
` mettre en place les outils n´ecessaires de manipulation de matrices pour faire de la compression
d’images par la factorisation SVD des matrices. Ainsi, la premi`ere partie concernera les fonctions qui permettent de manipuler
les matrices de Householder. La deuxi`eme partie mettra en place une fonction qui transforme une matrice A en une matrice
bidiagonale H. Dans la troisi`eme partie, une fonction qui transforme une matrice bidiagonale BD en une matrice siagonale
S sera d´efinie. Et dans la quatri`eme partie, les transformations pr´ec´edentes seront appliqu´ees afin de r´ealiser la compression
d’images.
Transformations de Householder
Dans cette partie, nous nous int´eressons aux matrices de Householder, et nous allons mettre en place deux
fonctions permettant de manipuler ces matrices.
Matrice de Householder associ´
ee `
a deux vecteurs
Dans un premier temps, nous avons cr´eer une fonction qui, ´etant donn´e deux vecteurs pass´es en param`etres de
mˆeme norme, retourne la matrice de Householder associ´ee. Rappelons que H = Id − 2 × U t U , il faut alors exprimer
X−Y
U en fonction de X et Y : U = kX−Y
ement´e l’algorithme 1 :
k . Nous avons alors impl´
Entr´
ee
: X, Y : : deux vecteurs de mˆeme norme
Sortie
: H tel que HX = Y
V ←X −Y;
U ← V / kV k;
I ←identite(taille(X));
Retourner : I − 2 × U t U
Algorithme 1 : Algorithme de g´en´eration de matrice de Householder
La compl´exit´e de cet algorithme est O(n2 ), la somme de deux matrices se faisant en temps quadratique (en
supposant que la fonction la.norm de numpy ait une complexit´e inf´erieure `a O(n2 )).
Produit d’une matrice de Householder par un vecteur
Dans un second temps, nous cherchons `
a effectuer le produit d’une matrice de Householder par un vecteur
de mani`ere optimis´ee. Pour cela, nous n’allons pas directement calculer HX mais nous allons utiliser la formule
HX = X − 2 × U (t U X). Dans un premier temps, il faut g´en´erer H `a partir de U, `a partir de la formule suivante :
T (= U t U ) = −(H − Id/2),
√
U0 = T00
Ui = T0i /U0
On obtient alors U ou −U , ce qui est ´equivalent puisque U t U = (−U )(−t U )
L’algorithme de calcul du produit se fait alors en O(n) : la g´en´eration de U, les produits vecteur-vecteur et
vecteur-scalaire et la somme vecteur-vecteur se font en O(n).
La g´en´eralisation de ce produit `
a un produit matrice-matrice permet de g´en´erer un algorithme de complexit´e
O(n2 ) (on fait n produit matrice-vecteur), complexit´e inf´erieure `a celle d’un produit matrice-matrice usuel qui est
de O(n3 ).
Enseirb-Matmeca
1
Informatique-I1
Projet Algorithmique Numerique
Compression d’image a travers la factorisation SVD
Mise sous forme bidiagonale
Cette deuxi`eme partie consiste en l’impl´ementation d’une fonction qui applique les transformations de Householder pour d´ecomposer une matrice A sous la forme A=Qleft*BD*Qright, avec BD une matrice bidiagonale.
L’algorithme de cette fonction est le suivant :
Entr´
ee
: A : : Matrice carr´ee
Sortie
: Qlef t, BD, Qright : : Qleft et Qright des matrices orthogonaux et BD matrice bidiagonale
Qlef t ← Id;
Qright ← Id;
BD ← A;
pour (i=0 ; i<= (n-1) ; i++) faire
Q1 ← Householder(BD[i :n,i],V1(i));
Qleft ← Qleft*Q1;
BD ← Q1*BD;
si (i=(n-2)) alors
Q2← Householder(BD[i,(i+1) :n],V2(i));
Qright← Q2*Qright;
BD ← BD*Q2;
Retourner : Qleft , BD , Qright
Algorithme 2 : Algorithme de bidiagonalistion
Le vecteur V1(i) est telque
 
1
0
 
.

V 1(i) = kBD[i : n, i]k ∗ 
.
 
.
0
Et V2(i) est tel que :
 
1
0
 
.

V 1(i) = kBD[i, (i + 1) : n]k ∗ 
.
 
.
0
Transformations QR
Dans cette partie nous allons ´etablir la fonction de d´ecomposition SVD en utilisant la d´ecomposition QR plusieurs
fois sur une matrice bidiagonale.
Enseirb-Matmeca
2
Informatique-I1
Projet Algorithmique Numerique
Compression d’image a travers la factorisation SVD
Premier Algorithme
Entr´
ee
: A : : une matrice bidiagonale
Sortie
: (U, S, V ) : : trois matrices qui correspendent `a la d´ecomposition SVD de A
U ← identite(taille(A));
V ← identite(taille(A)) ;
S ← A;
pour (i=0 ; i<= nMax ; i++) faire
(Q1,R1) ← decompositionQR(transpose(S));
(Q2,R2) ← decompositionQR(transpose(R1));
S ← R2;
U ← U*Q2;
V ← transpose(Q1)*V;
Retourner : (U, S, V )
Algorithme 3 : Algorithme de d´ecomposition SVD
La complexit´e de cet algorithme est ´equivalente au produit de nMax et la complexit´e de la d´ecomposition QR
fournie par python.
On voit que la matrice R (que nous avons pris comme ´etant la matrice R2) converge vers une matrice diagonale.
La figure ref figurepermet de voir la vitesse de convergence de R `a partir de la matrice S :


−1 −20
0
0
0
 0
−5 −16
0
0 

S=
 0
0
18 −25 0 
0
0
0
8
6
Optimisation
Dans un premier temps, nous allons prouver que les matrices S, R1 et R2 sont toujours bidiagonales. Pour cela,
il faut prouver que si S est bidiagonale et S=QR, alors R est bidiagonale : Q ´etant orthogonale, Q−1 l’est aussi, or la
multiplication par une matrice orthogonale conserve les particularit´es de la matrice, donc si Q−1 ∗ S est bidiagonale,
alors R est bidiagonale. Ceci montre que :
S bidiagonale → R1 bidiagonale ; R1 bidiagonale → R2 bidiagonale ; et R2 bidiagonale → S bidiagonale. (car S=R2)
Enseirb-Matmeca
3
Informatique-I1