Main Content

La traduction de cette page n'est pas à jour. Cliquez ici pour voir la dernière version en anglais.

Valeurs singulières

Une valeur singulière et les vecteurs singuliers correspondants d’une matrice rectangulaire A sont, respectivement, un scalaire σ et une paire de vecteurs u et v qui satisfont à

Av=σuAHu=σv,

AH est la transposée hermitienne de A. Les vecteurs singuliers u et v sont généralement mis à l’échelle pour avoir une norme de 1. En outre, si u et v sont des vecteurs singuliers de A, alors -u et -v sont des vecteurs singuliers de A également.

Les valeurs singulières σ sont toujours réelles et non négatives, même si A est complexe. Avec les valeurs singulières dans une matrice diagonale Σ et les vecteurs singuliers correspondants formant les colonnes de deux matrices orthogonales U et V, vous obtenez les équations

AV=UΣAHU=VΣ.

Étant donné que U et V sont des matrices unitaires, multiplier la première équation par VH à droite donne l’équation de décomposition en valeurs singulières

A=UΣVH.

La décomposition en valeurs singulières complète d’une matrice de dimension m x n implique :

  • La matrice U de dimension m x m

  • La matrice Σ de dimension m x n

  • La matrice V de dimension n x n

En d’autres termes, U et V sont toutes deux carrées, et Σ est de la même taille que A. Si A a beaucoup plus de lignes que de colonnes (m > n), alors la matrice résultante U de dimension m x m est grande. Cependant, la plupart des colonnes de U sont multipliées par des 0 dans Σ. Dans cette situation, la décomposition économique permet d’économiser du temps et du stockage en produisant une matrice U de dimension m x n, une matrice Σ de dimension n x n et la même matrice V :

In the economy-sized decomposition, columns in U can be ignored if they multiply zeros in the diagonal matrix of singular values.

La décomposition en éléments propres est l’outil approprié pour analyser une matrice lorsqu’elle représente un mapping d’un espace vectoriel dans lui-même, comme c’est le cas pour une équation différentielle ordinaire. Cependant, la décomposition en valeurs singulières est l’outil approprié pour analyser un mapping d’un espace vectoriel dans un autre espace vectoriel, avec potentiellement une dimension différente. La plupart des systèmes d’équations linéaires simultanées appartiennent à cette seconde catégorie.

Si A est carrée, symétrique et définie positive, alors ses décompositions en éléments propres et en valeurs singulières sont identiques. Mais, à mesure que la symétrie et le caractère défini positif de A diminuent, la différence entre les deux décompositions s’accroît. En particulier, la décomposition en valeurs singulières d’une matrice réelle est toujours réelle, mais la décomposition en éléments propres d’une matrice réelle non symétrique peut être complexe.

Pour la matrice donnée comme exemple

A = [9     4
     6     8
     2     7];

la décomposition en valeurs singulières complète est

[U,S,V] = svd(A)

U =

   -0.6105    0.7174    0.3355
   -0.6646   -0.2336   -0.7098
   -0.4308   -0.6563    0.6194


S =

   14.9359         0
         0    5.1883
         0         0


V =

   -0.6925    0.7214
   -0.7214   -0.6925

Vous pouvez vérifier que U*S*V' est égal à A dans la marge d'erreur d'arrondi. Pour ce petit problème, la décomposition réduite est seulement légèrement plus petite.

[U,S,V] = svd(A,"econ")

U =

   -0.6105    0.7174
   -0.6646   -0.2336
   -0.4308   -0.6563


S =

   14.9359         0
         0    5.1883


V =

   -0.6925    0.7214
   -0.7214   -0.6925

Là encore, U*S*V' est égal à A dans la marge d'erreur d'arrondi.

Calcul de la SVD en batch

Si vous devez décomposer un ensemble important de matrices de la même dimension, il ne sera pas efficace d’effectuer toutes les décompositions en boucle avec svd. Mieux vaut concaténer toutes les matrices au sein d’un tableau multidimensionnel et utiliser pagesvd pour effectuer les décompositions en valeurs singulières sur l'ensemble des couches (pages) du tableau avec un seul appel de fonction.

FonctionUtilisation
pagesvdUtilisez pagesvd pour effectuer les décompositions en valeurs singulières sur les couches d’un tableau multidimensionnel. C’est une manière efficace d’effectuer une SVD sur un ensemble important de matrices ayant toutes la même dimension.

Prenons l’exemple d’un ensemble de trois matrices de dimension 2 x 2. Concaténez les matrices dans un tableau 2 x 2 x 3 avec la fonction cat.

A = [0 -1; 1 0];
B = [-1 0; 0 -1];
C = [0 1; -1 0];
X = cat(3,A,B,C);

À présent, utilisez pagesvd pour effectuer simultanément les trois décompositions.

[U,S,V] = pagesvd(X);

À chaque couche de X correspondent des couches dans les sorties U, S, et V. Par exemple, la matrice A se trouve sur la première couche de X, et sa décomposition est donnée par U(:,:,1)*S(:,:,1)*V(:,:,1)'.

Approximation SVD de rang faible

Pour les grandes matrices creuses, l’utilisation de svd pour calculer toutes les valeurs singulières et tous les vecteurs singuliers n’est pas toujours pratique. Par exemple, si vous ne devez connaître que quelques-unes des valeurs singulières les plus grandes, le fait de calculer toutes les valeurs singulières d’une matrice creuse de 5 000 x 5 000 représente un travail supplémentaire.

Dans les cas où seul un sous-ensemble des valeurs singulières et des vecteurs singuliers est requis, les fonctions svds et svdsketch sont préférables à svd.

FonctionUtilisation
svdsUtilisez svds pour calculer une approximation de rang k de la SVD. Vous pouvez spécifier si le sous-ensemble de valeurs singulières doit être le plus grand, le plus petit ou le plus proche d’un nombre spécifique. svds calcule généralement la meilleure approximation de rang k possible.
svdsketchUtilisez svdsketch pour calculer une SVD partielle de la matrice d’entrée et satisfaisant une tolérance spécifiée. Alors que svds nécessite que vous spécifiiez le rang, svdsketch détermine de manière adaptative le rang de l’esquisse de matrice en fonction de la tolérance spécifiée. L’approximation de rang k que svdsketch utilise satisfait à la tolérance, mais, contrairement à svds, il n’est pas garanti que ce soit la meilleure possible.

Par exemple, supposez une matrice creuse aléatoire de 1 000 x 1 000 avec une densité d’environ 30 %.

n = 1000;
A = sprand(n,n,0.3);

Les six valeurs singulières les plus grandes sont

S = svds(A)

S =

  130.2184
   16.4358
   16.4119
   16.3688
   16.3242
   16.2838

Et les six valeurs singulières les plus petites sont

S = svds(A,6,"smallest")

S =

    0.0740
    0.0574
    0.0388
    0.0282
    0.0131
    0.0066

Pour des matrices plus petites capables de tenir en mémoire sous la forme d’une matrice entière, full(A), l’utilisation de svd(full(A)) peut être plus rapide que svds ou svdsketch. Cependant pour des matrices vraiment grandes et creuses, il devient nécessaire d’utiliser svds ou svdsketch.

Voir aussi

| | | |

Sujets associés