Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Valores singulares

Un valor singular y los correspondientes vectores singulares de una matriz rectangular A son, respectivamente, un escalar σ y un par de vectores u y v que satisfacen

Av=σuAHu=σv,

donde AH es la traspuesta hermítica de A. Los vectores singulares u y v comúnmente se normalizan a 1. Igualmente, si u y v son vectores singulares de A, entonces -u y -v también son vectores singulares de A.

Los valores singulares σ siempre son reales y no negativos, aunque A sea compleja. Con los valores singulares en una matriz diagonal Σ y los correspondientes vectores singulares formando las columnas de dos matrices ortogonales U y V, se obtienen las ecuaciones

AV=UΣAHU=VΣ.

Como U y V son matrices unitarias, si se multiplica la primera ecuación por VH a la derecha, se produce la ecuación de descomposición en valores singulares

A=UΣVH.

La descomposición en valores singulares completa de una matriz de m por n incluye:

  • Matriz U m por m

  • Matriz Σ m por n

  • Matriz V n por n

En otras palabras, U y V son cuadradas y Σ tiene el mismo tamaño que A. Si A tiene muchas más filas que columnas (m > n), entonces la matriz U de m por m resultante es grande. Sin embargo, la mayoría de las columnas de U se multiplica por ceros en Σ. En esta situación, la descomposición de tamaño parcial ahorra tanto tiempo como almacenamiento, ya que produce una U de m por n, una Σ de n por n y la misma V:

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

La descomposición en valores propios es la herramienta apropiada para analizar una matriz cuando esta representa una aplicación de un espacio vectorial en sí mismo, como en el caso de una ecuación diferencial ordinaria. Sin embargo, la descomposición en valores singulares es la herramienta adecuada para analizar una aplicación de un espacio vectorial en otro espacio vectorial, posiblemente con una dimensión diferente. La mayoría de los sistemas de ecuaciones lineales simultáneas encaja en esta segunda categoría.

Si A es cuadrada, simétrica y definida positiva, entonces sus descomposiciones en valores propios y valores singulares son iguales. Sin embargo, a medida que A se desvía de la simetría y definición positiva, la diferencia entre las dos descomposiciones aumenta. En particular, la descomposición en valores singulares de una matriz real siempre es real, pero la descomposición de valores propios de una matriz real no simétrica puede ser compleja.

Para la matriz ejemplo

A = [9     4
     6     8
     2     7];

la descomposición en valores singulares completa es

[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

Se puede verificar que U*S*V' es igual a A dentro del error de redondeo. Para este pequeño problema, la descomposición de tamaño parcial es solo ligeramente menor.

[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

Nuevamente, U*S*V' es igual a A dentro del error de redondeo.

Cálculo SVD por lotes

Si tiene que descomponer una gran recopilación de matrices del mismo tamaño, no resulta eficaz realizar todas las descomposiciones en un bucle con svd. En lugar de ello, puede concatenar todas las matrices de un arreglo multidimensional y utilizar pagesvd para efectuar descomposiciones en valores singulares en todas las páginas del arreglo con una sola llamada a la función.

FunciónUso
pagesvdUtilice pagesvd para efectuar descomposiciones en valores singulares en las páginas de un arreglo multidimensional. Se trata de una forma eficaz de realizar SVD en una gran recopilación de matrices con el mismo tamaño.

Por ejemplo, piense en una recopilación de tres matrices de 2 por 2. Concatene las matrices en un arreglo de 2 por 2 por 3 con la función cat.

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

Ahora, utilice pagesvd para realizar las tres descomposiciones a la vez.

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

Para cada página de X, hay páginas correspondientes en las salidas U, S y V. Por ejemplo, la matriz A se encuentra en la primera página de X, y su descomposición se da por U(:,:,1)*S(:,:,1)*V(:,:,1)'.

Aproximaciones SVD de rango bajo

Para matrices dispersas grandes, no siempre es práctico utilizar svd para calcular todos los valores y vectores singulares. Por ejemplo, si necesita conocer solo algunos de los valores singulares más grandes, implica trabajo adicional calcular todos los valores singulares de una matriz dispersa de 5000 por 5000.

En los casos en que se requiere solo un subconjunto de los vectores y valores singulares, se prefieren las funciones svds y svdsketch en vez de svd.

FunciónUso
svdsUtilice svds para calcular la aproximación de rango k del SVD. Puede especificar si el subconjunto de valores singulares debería ser el más grande, el más pequeño o el más cercano a un número específico. svds generalmente calcula la mejor aproximación de rango k posible.
svdsketchUtilice svdsketch para calcular un SVD parcial de la matriz de entrada que satisface una tolerancia especificada. Mientras que svds precisa que especifique el rango, svdsketch determina adecuadamente el rango de la aproximación de la matriz en función de la tolerancia especificada. La aproximación de rango k que últimamente svdsketch utiliza satisface la tolerancia, pero a diferencia de svds, no está garantizado que sea el mejor posible.

Por ejemplo, considere una matriz dispersa aleatoria de 1000 por 1000 con una densidad de aproximadamente 30%.

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

Los seis valores singulares más grandes son

S = svds(A)

S =

  130.2184
   16.4358
   16.4119
   16.3688
   16.3242
   16.2838

Además, los valores singulares más pequeños son

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

S =

    0.0740
    0.0574
    0.0388
    0.0282
    0.0131
    0.0066

Para matrices más pequeñas que pueden caber en la memoria en su versión completa, full(A), el uso de svd(full(A)) puede ser todavía más rápido que svds o svdsketch. No obstante, para matrices verdaderamente grandes y dispersas, se hace necesario el uso de svds o svdsketch.

Consulte también

| | | |

Temas relacionados