Contenido principal

svd

Descomposición en valores singulares

Descripción

S = svd(A) devuelve los valores singulares de la matriz A en orden descendente.

ejemplo

[U,S,V] = svd(A) realiza una descomposición en valores singulares de la matriz A, de forma que A = U*S*V'.

ejemplo

[___] = svd(A,"econ") produce una descomposición de tamaño parcial de A utilizando cualquiera de las combinaciones de argumentos de salida anteriores. Si A es una matriz de m por n:

  • m > n: solo se calculan las primeras n columnas de U, y S es de n por n.

  • m = n: svd(A,"econ") equivale a svd(A).

  • m < n: solo se calculan las primeras m columnas de V, y S es de m por m.

La descomposición de tamaño parcial elimina las filas o columnas adicionales de ceros de la matriz diagonal de valores singulares, S, junto con las columnas en U o V que multiplican esos ceros en la expresión A = U*S*V'. La eliminación de estos ceros y columnas puede mejorar el tiempo de ejecución y reducir los requisitos de almacenamiento sin comprometer la precisión de la descomposición.

ejemplo

[___] = svd(A,0) produce una descomposición diferente de tamaño parcial de la matriz de m por n A:

  • m > n: svd(A,0) equivale a svd(A,"econ").

  • m <= n: svd(A,0) equivale a svd(A).

No se recomienda el uso de esta sintaxis. Utilice la opción "econ" en su lugar.

ejemplo

[___] = svd(___,outputForm) especifica de forma opcional el formato de salida de los valores singulares. Puede utilizar esta opción con cualquiera de las combinaciones de argumentos de entrada o salida anteriores. Especifique "vector" para devolver los valores singulares como un vector columna, o "matrix" para devolver los valores singulares en una matriz diagonal.

Ejemplos

contraer todo

Calcule los valores singulares de una matriz de rango completo.

A = [1 0 1; -1 -2 0; 0 1 -1]
A = 3×3

     1     0     1
    -1    -2     0
     0     1    -1

s = svd(A)
s = 3×1

    2.4605
    1.6996
    0.2391

Encuentre la descomposición en valores singulares de una matriz rectangular A.

A = [1 2; 3 4; 5 6; 7 8]
A = 4×2

     1     2
     3     4
     5     6
     7     8

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

   -0.1525   -0.8226   -0.3945   -0.3800
   -0.3499   -0.4214    0.2428    0.8007
   -0.5474   -0.0201    0.6979   -0.4614
   -0.7448    0.3812   -0.5462    0.0407

S = 4×2

   14.2691         0
         0    0.6268
         0         0
         0         0

V = 2×2

   -0.6414    0.7672
   -0.7672   -0.6414

Confirme la relación A = U*S*V', dentro de la precisión de la máquina.

U*S*V'
ans = 4×2

    1.0000    2.0000
    3.0000    4.0000
    5.0000    6.0000
    7.0000    8.0000

Calcule la descomposición completa y la parcial de una matriz rectangular.

A = [1 2; 3 4; 5 6; 7 8]
A = 4×2

     1     2
     3     4
     5     6
     7     8

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

   -0.1525   -0.8226   -0.3945   -0.3800
   -0.3499   -0.4214    0.2428    0.8007
   -0.5474   -0.0201    0.6979   -0.4614
   -0.7448    0.3812   -0.5462    0.0407

S = 4×2

   14.2691         0
         0    0.6268
         0         0
         0         0

V = 2×2

   -0.6414    0.7672
   -0.7672   -0.6414

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

   -0.1525   -0.8226
   -0.3499   -0.4214
   -0.5474   -0.0201
   -0.7448    0.3812

S = 2×2

   14.2691         0
         0    0.6268

V = 2×2

   -0.6414    0.7672
   -0.7672   -0.6414

Dado que A es de 4 por 2, svd(A,"econ") devuelve menos columnas en U y menos filas en S en comparación con una descomposición completa. Se excluyen las filas adicionales de ceros en S, junto con las columnas correspondientes en U que se multiplicarían con esos ceros en la expresión A = U*S*V'.

Cree una matriz del cuadrado mágico de 6 por 6 y calcule la SVD. De forma predeterminada, svd devuelve los valores singulares en una matriz diagonal cuando se especifican varias salidas.

A = magic(6);
[U,S,V] = svd(A)
U = 6×6

   -0.4082    0.5574    0.0456   -0.4182    0.3092    0.5000
   -0.4082   -0.2312    0.6301   -0.2571   -0.5627    0.0000
   -0.4082    0.4362    0.2696    0.5391    0.1725   -0.5000
   -0.4082   -0.3954   -0.2422   -0.4590    0.3971   -0.5000
   -0.4082    0.1496   -0.6849    0.0969   -0.5766    0.0000
   -0.4082   -0.5166   -0.0182    0.4983    0.2604    0.5000

S = 6×6

  111.0000         0         0         0         0         0
         0   50.6802         0         0         0         0
         0         0   34.3839         0         0         0
         0         0         0   10.1449         0         0
         0         0         0         0    5.5985         0
         0         0         0         0         0    0.0000

V = 6×6

   -0.4082    0.6234   -0.3116    0.2495    0.2511    0.4714
   -0.4082   -0.6282    0.3425    0.1753    0.2617    0.4714
   -0.4082   -0.4014   -0.7732   -0.0621   -0.1225   -0.2357
   -0.4082    0.1498    0.2262   -0.4510    0.5780   -0.4714
   -0.4082    0.1163    0.2996    0.6340   -0.3255   -0.4714
   -0.4082    0.1401    0.2166   -0.5457   -0.6430    0.2357

Especifique la opción "vector" para devolver los valores singulares en un vector columna.

[U,S,V] = svd(A,"vector")
U = 6×6

   -0.4082    0.5574    0.0456   -0.4182    0.3092    0.5000
   -0.4082   -0.2312    0.6301   -0.2571   -0.5627    0.0000
   -0.4082    0.4362    0.2696    0.5391    0.1725   -0.5000
   -0.4082   -0.3954   -0.2422   -0.4590    0.3971   -0.5000
   -0.4082    0.1496   -0.6849    0.0969   -0.5766    0.0000
   -0.4082   -0.5166   -0.0182    0.4983    0.2604    0.5000

S = 6×1

  111.0000
   50.6802
   34.3839
   10.1449
    5.5985
    0.0000

V = 6×6

   -0.4082    0.6234   -0.3116    0.2495    0.2511    0.4714
   -0.4082   -0.6282    0.3425    0.1753    0.2617    0.4714
   -0.4082   -0.4014   -0.7732   -0.0621   -0.1225   -0.2357
   -0.4082    0.1498    0.2262   -0.4510    0.5780   -0.4714
   -0.4082    0.1163    0.2996    0.6340   -0.3255   -0.4714
   -0.4082    0.1401    0.2166   -0.5457   -0.6430    0.2357

Si especifica un argumento de salida, como S = svd(A), svd cambia de comportamiento para devolver los valores singulares en un vector columna de forma predeterminada. En ese caso, puede especificar la opción "matrix" para devolver los valores singulares como una matriz diagonal.

Utilice los resultados de la descomposición en valores singulares para determinar el rango, el espacio de columnas y el espacio nulo de una matriz.

A = [2 0 2; 0 1 0; 0 0 0]
A = 3×3

     2     0     2
     0     1     0
     0     0     0

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

     1     0     0
     0     1     0
     0     0     1

S = 3×3

    2.8284         0         0
         0    1.0000         0
         0         0         0

V = 3×3

    0.7071         0    0.7071
         0    1.0000         0
    0.7071         0   -0.7071

Calcule el rango utilizando el número de valores singulares distintos de cero.

s = diag(S);
rank_A = nnz(s)
rank_A = 
2

Calcule una base ortonormal para el espacio de columnas de A utilizando las columnas de U que correspondan a valores singulares distintos de cero.

column_basis = U(:,logical(s))
column_basis = 3×2

     1     0
     0     1
     0     0

Calcule una base ortonormal para el espacio nulo de A utilizando las columnas de V que correspondan a valores singulares iguales a cero.

null_basis = V(:,~s)
null_basis = 3×1

    0.7071
         0
   -0.7071

Las funciones rank, orth y null permiten calcular fácilmente estas cantidades.

Argumentos de entrada

contraer todo

Matriz de entrada. A puede tener un tamaño cuadrado o rectangular.

Tipos de datos: single | double
Soporte de números complejos:

Formato de salida de los valores singulares, especificado como uno de estos valores:

  • "vector": S es un vector columna. Este es el comportamiento predeterminado cuando se especifica una salida, S = svd(X).

  • "matrix": S es una matriz diagonal. Este es el comportamiento predeterminado cuando se especifican varias salidas, [U,S,V] = svd(X).

Ejemplo: [U,S,V] = svd(X,"vector") devuelve S como un vector columna en lugar de una matriz diagonal.

Ejemplo: S = svd(X,"matrix") devuelve S como una matriz diagonal en lugar de un vector columna.

Tipos de datos: char | string

Argumentos de salida

contraer todo

Vectores singulares izquierdos, devueltos como columnas de una matriz.

  • Para una matriz de m por n A con m > n, la descomposición de tamaño parcial svd(A,"econ") calcula solo las primeras n columnas de U. En este caso, las columnas de U son ortogonales y U es una matriz de m por n que cumple UHU=In.

  • Para descomposiciones completas, svd(A) devuelve U como una matriz unitaria de m por m que cumple UUH=UHU=Im. Las columnas de U que corresponden a valores singulares distintos de cero forman un conjunto de vectores de base ortonormal para el rango de A.

Distintas máquinas y versiones de MATLAB® pueden producir diferentes vectores singulares que siguen siendo numéricamente precisos. Las columnas correspondientes en U y V pueden invertir sus signos, ya que esto no afecta al valor de la expresión A = U*S*V'.

Valores singulares, devueltos como una matriz diagonal o un vector columna. Los valores singulares no son negativos y se devuelven en orden decreciente.

Si A es una matriz de m por n y S es una matriz diagonal, el tamaño de S es el siguiente:

  • La descomposición svd(A,"econ") de tamaño parcial devuelve S como una matriz cuadrada de orden min([m,n]).

  • Para descomposiciones completas, svd(A) devuelve S con el mismo tamaño que A.

Además, los valores singulares de S se devuelven en un vector columna o una matriz diagonal dependiendo de cómo llame a svd y de si especifica la opción outputForm:

  • Si llama a svd con una salida o especifica la opción "vector", S es un vector columna.

  • Si llama a svd con varias salidas o especifica la opción "matrix", S es una matriz diagonal.

Dependiendo de si especifica una o varias salidas, svd puede devolver diferentes valores singulares que siguen siendo numéricamente precisos.

Vectores singulares derechos, devueltos como columnas de una matriz.

  • Para una matriz de m por n A con m < n, la descomposición parcial svd(A,"econ") calcula solo las primeras m columnas de V. En este caso, las columnas de V son ortogonales y V es una matriz de n por m que cumple VHV=Im.

  • Para descomposiciones completas, svd(A) devuelve V como una matriz unitaria de n por n que cumple VVH=VHV=In. Las columnas de V que no corresponden a valores singulares distintos de cero forman un conjunto de vectores de base ortonormal para el espacio nulo de A.

Distintas máquinas y versiones de MATLAB pueden producir diferentes vectores singulares que siguen siendo numéricamente precisos. Las columnas correspondientes en U y V pueden invertir sus signos, ya que esto no afecta al valor de la expresión A = U*S*V'.

Capacidades ampliadas

expandir todo

Historial de versiones

Introducido antes de R2006a

expandir todo

Consulte también

| | | | | | |