200
6 Valeurs propres et vecteurs propres
17.8208
-9.5022
0.2854
Ces valeurs sont en bon accord avec celles obtenues dans l’Exemple 6.1 par la
commande eig. La vitesse de convergence décroît quand des valeurs propres
ont des modules presque identiques. C’est le cas de la matrice correspondant à
α = −30 : deux valeurs propres ont à peu près le même module et la méthode
a alors besoin de 1149 itérations pour converger avec la même tolérance :
D = qrbasic (A ( -30) ,1.e -14 ,2000)
La méthode converge en 1149 itérations
D =
-30.6430
29.7359
-11.6806
0.5878
Les grandes matrices creuses sont un cas à part : si A est stockée sous
forme creuse, la commande eigs(A,k) calcule les k premières valeurs
eigs
propres de A de plus grand module.
Exemple 6.9 (Compression d’image) Avec la commande MATLAB A=
imread(’lena’.’jpg’), on charge une image JPEG en noir et blanc (cette
imread
image est célèbre car très utilisée dans la communauté scientifique pour tester
les algorithmes de compression d’images). La variable A est une matrice de
taille 512 par 512, dont les coefficients sont des entiers codés sur 8 bits (uint8)
représentant le niveau de gris. La commande :
image (A ); colormap ( gray (256));
crée l’image représentée à gauche de la Figure 6.5. Pour calculer la SVD de A,
on doit d’abord convertir A en une matrice dont les coefficient sont des doubles
(les nombres flottants utilisés d’habitude par MATLAB). Ceci se fait avec la
commande :
A = double ( A ); [U ,S , V ]= svd (A );
Au milieu de la Figure 6.5, on montre l’image obtenue en n’utilisant que
les 20 premières valeurs singulières de S. Les commandes sont :
k =20; X =U (: ,1:k )*S (1:k ,1:k )*(V (: ,1:k )) ’;
image ( uint8 (X )); colormap ( gray (256));
L’image à droite de la Figure 6.5 est obtenue avec les 60 premières valeurs
singulières. Elle nécessite le stockage de 61500 coefficients (deux matrices de
taille 512 × 60 et les 60 premières valeurs singulières) au lieu des 262144 coefficients nécessaires pour stocker l’image originale.
Précédent

- 211/374

Suivant