svd
Singular Value Decomposition of a Matrix
Compute the singularvalue decomposition of a rectangular matrix.
Usage
svd(x, nu = min(n, p), nv = min(n, p), LINPACK = FALSE)
La.svd(x, nu = min(n, p), nv = min(n, p))
Arguments
 x
 a numeric or complex matrix whose SVD decomposition is to be computed. Logical matrices are coerced to numeric.
 nu
 the number of left singular vectors to be computed.
This must between
0
andn = nrow(x)
.  nv
 the number of right singular vectors to be computed.
This must be between
0
andp = ncol(x)
.  LINPACK
 logical. Defunct and ignored.
Details
The singular value decomposition plays an important role in many
statistical techniques. 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.
Value

The SVD decomposition of the matrix as computed by LAPACK,
\bold{X = U D V'}, where \bold{U} and \bold{V} are
orthogonal, \bold{V'} means V transposed (and conjugated
for complex input), and \bold{D} is a diagonal matrix with the
singular values D_{ii}D[i,i]. Equivalently, \bold{D = U'
X V}, which is verified in the examples.The returned value is a list with components
 d
 a vector containing the singular values of
x
, of lengthmin(n, p)
.  u
 a matrix whose columns contain the left singular vectors of
x
, present ifnu > 0
. Dimensionc(n, nu)
.  v
 a matrix whose columns contain the right singular vectors of
x
, present ifnv > 0
. Dimensionc(p, nv)
. Recall that the singular vectors are only defined up to sign (a
constant of modulus one in the complex case). If a left singular
vector has its sign changed, changing the sign of the corresponding
right vector gives an equivalent decomposition.For La.svd the return value replaces v by vt, the
(conjugated if complex) transpose of v.
Source
The main functions used are the LAPACK routines DGESDD
and
ZGESDD
. LAPACK is from http://www.netlib.org/lapack and its guide is
listed in the references.
References
Anderson. E. and ten others (1999) LAPACK Users' Guide. Third Edition. SIAM. Available online at http://www.netlib.org/lapack/lug/lapack_lug.html.
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
See Also
Examples
library(base)
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