This help topic is for R version 1.5.0. For the current version of R, try https://stat.ethz.ch/R-manual/R-patched/library/base/html/svd.html
svd {base}R Documentation

Singular Value Decomposition of a Matrix

Description

Compute the singular-value decomposition of a rectangular matrix.

Usage

svd(x, nu = min(n, p), nv = min(n, p))
La.svd(x, nu = min(n, p), nv = min(n, p), method = c("dgesdd", "dgesvd"))

Arguments

x

a matrix whose SVD decomposition is to be computed.

nu

the number of left singular vectors to be computed. This must be one of 0, nrow(x) and ncol(x), except for method = "dgesdd".

nv

the number of right singular vectors to be computed. This must be one of 0 and ncol(x).

method

The LAPACK routine to use in the real case.

Details

The singular value decomposition plays an important role in many statistical techniques.

svd provides an interface to the LINPACK routine DSVDC. La.svd provides an interface to the LAPACK routines DGESVD and DGESDD. The latter is usually substantially faster if singular vectors are required: see http://www.cs.berkeley.edu/~demmel/DOE2000/Report0100.html. Most benefit is seen with an optimized BLAS system.

La.svd is preferred to svd for new projects, but it is not an exact replacement as it returns the transpose of the right singular vector matrix, and the signs of the singular vectors may differ from those given by svd. (They may also differ between methods and between platforms.)

Both functions handle complex matrices via LAPACK routine ZGESVD.

Computing the singular vectors is the slow part for large matrices.

Using method="dgesdd" requires IEEE 754 arithmetic. Should this not be supported on your platform, method="dgesvd" is used, with a warning.

Value

The SVD decomposition of the matrix as computed by LINPACK,

\bold{X = U D V'},

where \bold{U} and \bold{V} are orthogonal, \bold{V'} means V transposed, and \bold{D} is a diagonal matrix with the singular values D_{ii}. Equivalently, \bold{D = U' X V}, which is verified in the examples, below.

The components in the returned value correspond directly to the values returned by DSVDC.

d

a vector containing the singular values of x.

u

a matrix whose columns contain the left singular vectors of x.

v

a matrix whose columns contain the right singular vectors of x.

For La.svd the return value replaces v by vt, the (conjugated if complex) transpose of v.

References

Dongarra, J. J., Bunch, J. R., Moler, C. B. and Stewart, G. W. (1978) LINPACK Users Guide. Philadelphia: SIAM Publications.

Anderson. E. and ten others (1999) LAPACK Users' Guide. Third Edition. SIAM.
Available on-line at http://www.netlib.org/lapack/lug/lapack_lug.html.

See Also

eigen, qr.

capabilities to test for IEEE 754 arithmetic.

Examples

hilbert <- function(n) { i <- 1:n; 1 / outer(i - 1, i, "+") }
str(X <- hilbert(9)[,1:6])
str(s <- svd(X))
Eps <- 100 * .Machine$double.eps

D <- diag(s$d)
stopifnot(abs(X - s$u %*% D %*% t(s$v)) < Eps)#  X = U D V'
stopifnot(abs(D - t(s$u) %*% X %*% s$v) < Eps)#  D = U' X V

X <- cbind(1, 1:7)
str(s <- svd(X)); D <- diag(s$d)
stopifnot(abs(X - s$u %*% D %*% t(s$v)) < Eps)#  X = U D V'
stopifnot(abs(D - t(s$u) %*% X %*% s$v) < Eps)#  D = U' X V


[Package base version 1.5.0 ]