Generamos una matriz \(A \in \mathbb{R}^{3 \times 4}\) con números enteros aleatorios entre \(-5\) y \(5\). Fijamos una semilla para reproducibilidad.
set.seed(2024) # Semilla (puedes cambiarla)
A <- matrix(sample(-5:5, size = 12, replace = TRUE), nrow = 3, ncol = 4)
dimnames(A) <- list(paste0("fila", 1:3), paste0("col", 1:4))
A
## col1 col2 col3 col4
## fila1 -4 3 5 -4
## fila2 -1 4 -4 4
## fila3 -5 -4 4 -1
descomposicion <- svd(A,nu=3, nv=4)
La función devuelve una lista con tres componentes: - d : vector de valores singulares (orden decreciente) - u : matriz de vectores singulares izquierdos (U) - v : matriz de vectores singulares derechos (V)
Sigma <- matrix(0, nrow = nrow(A), ncol = ncol(A))
diag(Sigma) <- descomposicion$d
Sigma
## [,1] [,2] [,3] [,4]
## [1,] 10.6774 0.000000 0.000000 0
## [2,] 0.0000 6.184907 0.000000 0
## [3,] 0.0000 0.000000 4.554133 0
La función svd() devuelve la matriz \(U\) en el componente $u. Para
nuestra matriz de ejemplo \(3 \times
4\), \(U\) es una matriz
ortogonal de tamaño \(3 \times 3\).
U <- descomposicion$u
U
## [,1] [,2] [,3]
## [1,] 0.6158682 -0.7512698 -0.2372763
## [2,] -0.4854043 -0.5990458 0.6368098
## [3,] 0.6205554 0.2770160 0.7336029
La función svd() devuelve la matriz \(V\) en el componente $v. Para
nuestra matriz de ejemplo \(3 \times
4\), \(V\) es una matriz
ortogonal de tamaño \(4 \times 4\).
V <- descomposicion$v
V
## [,1] [,2] [,3] [,4]
## [1,] -0.4758506 0.35878390 -0.7368513 0.3192030
## [2,] -0.2412793 -0.93098513 -0.2413195 0.1296762
## [3,] 0.7027162 -0.04076082 -0.1754910 0.6882814
## [4,] -0.4706808 0.05365966 0.6066449 0.6384060
A_reconstruida <- U %*% Sigma %*% t(V)
A_reconstruida
## [,1] [,2] [,3] [,4]
## [1,] -4 3 5 -4
## [2,] -1 4 -4 4
## [3,] -5 -4 4 -1
A
## col1 col2 col3 col4
## fila1 -4 3 5 -4
## fila2 -1 4 -4 4
## fila3 -5 -4 4 -1