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)
.DGESDD
and
ZGESDD
. LAPACK is from http://www.netlib.org/lapack and its guide is
listed in the references.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)<="" code="">
and
nv <= min(n,="" p)<="" code="">, 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.
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
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