2 votos

Cálculo de la descomposición de valores singulares

Estoy un poco confundido con mis resultados de cálculo de SVD para la matriz A.

$$ A= \left( \begin{array}{ccc} 4 & 2 & 1\\ 5 & 3 & -10\\ 9 & -12 & 11 \end{array} \right) \\\\ A = UDV^{T} \mbox{ for real matrix} $$

Como sé que $U$ contiene vectores propios ortonormales de $AA^{T}$ y $V$ contiene vectores propios ortonormales de $A^{T}A$ . Usando python he encontrado los valores propios y el SVD real:

import numpy as np

A = np.matrix([[4, 2, 1],
               [5, 3, -10],
               [9, -12, 11]])

# Calculating SVD via eigenvectors
aaeigval, aaeigvec = np.linalg.eig(A*A.T)
ateigval, ateigvec = np.linalg.eig(A.T*A)

MU = aaeigvec
MD = np.diag(np.sqrt(aaeigval))
MV = ateigvec.T

# Calculating SVD via embedded function
U, d, V = np.linalg.svd(A)
D = np.diag(d)

print("SVD MATRICES VIA NP.LINALG.SVD")
print(U)
print(D)
print(V)

print("\r\nSVD MATRICES VIA EIGENVECTORS")
print(MU)
print(MD)
print(MV)

La salida es:

SVD MATRICES VIA NP.LINALG.SVD
[[-0.04227372 -0.27992453 -0.95909081]
 [ 0.36803649 -0.89680917  0.24552484]
 [-0.92884987 -0.34260117  0.1409339 ]]

[[ 19.67398841   0.           0.        ]
 [  0.          10.02047314   0.        ]
 [  0.           0.           3.67753968]]

[[-0.33996976  0.61836777 -0.70854912]
 [-0.86694055  0.08591785  0.4909503 ]
 [-0.36446486 -0.78117822 -0.50687863]]

SVD MATRICES VIA EIGENVECTORS
[[-0.95909081  0.27992453  0.04227372]
 [ 0.24552484  0.89680917 -0.36803649]
 [ 0.1409339   0.34260117  0.92884987]]

[[  3.67753968   0.           0.        ]
 [  0.          10.02047314   0.        ]
 [  0.           0.          19.67398841]]

[[-0.33996976  0.61836777 -0.70854912]
 [ 0.86694055 -0.08591785 -0.4909503 ]
 [ 0.36446486  0.78117822  0.50687863]]

Como puede ver, algunas columnas están invertidas, pero ese no es el problema. El problema está en los diferentes signos de las columnas. Por ejemplo, la columna 1 de $U$ y la columna 3 de $MU$ (tienen que ser el mismo vector propio) tienen signos diferentes en sus elementos. Por supuesto la verdadera descomposición es la de la función svd. Sin embargo sigo sin saber donde me equivoco.

3voto

Math Lover Puntos 335

Sugerencia: Si $\mathbf{v}$ es un vector propio de norma unitaria de una matriz $\mathbf{A}$ correspondiente al valor propio de $\lambda$ entonces $-\mathbf{v}$ es también un vector propio de norma unitaria de $\mathbf{A}$ . En particular, $$\mathbf{A}\mathbf{v}=\lambda \mathbf{v} \implies \mathbf{A}(-\mathbf{v})=\lambda(-\mathbf{v}).$$

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X