svd(x, nu = min(n, p), nv = min(n, p), LINPACK = FALSE)La.svd(x, nu = min(n, p), nv = min(n, p))
0
and n = nrow(x)
.0
and p = ncol(x)
.x
, of
length min(n, p)
.x
, present if nu > 0
. Dimension c(n, nu)
.x
, present if nv > 0
. Dimension c(p, nv)
.La.svd
the return value replaces v
by vt
, the
(conjugated if complex) transpose of v
.svd
and La.svd
provide two
interfaces which differ in their return values. Computing the singular vectors is the slow part for large matrices.
The computation will be more efficient if both nu <= min(n, p)
and nv <= min(n, p)
, and even more so if both are zero. Unsuccessful results from the underlying LAPACK code will result in an
error giving a positive error code (most often 1
): these can
only be interpreted by detailed study of the FORTRAN code but mean
that the algorithm failed to converge.eigen
, qr
.hilbert <- function(n) { i <- 1:n; 1 / outer(i - 1, i, "+") }
X <- hilbert(9)[, 1:6]
(s <- svd(X))
D <- diag(s$d)
s$u %*% D %*% t(s$v) # X = U D V'
t(s$u) %*% X %*% s$v # D = U' X V
Run the code above in your browser using DataLab