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))
Arguments
x |
a matrix whose SVD decomposition is to be computed. |
nu |
the number of left eigenvectors to be computed.
This must be one of |
nv |
the number of right eigenvectors to be computed.
This must be one of |
Details
svd
provides an interface to the LINPACK routine DSVDC.
The singular value decomposition plays an important role in many
statistical techniques.
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 |
u |
a matrix whose columns contain the left eigenvectors of |
v |
a matrix whose columns contain the right eigenvectors of |
References
Dongarra, J. J., Bunch, J. R., Moler, C. B. and Stewart, G. W. (1978) LINPACK Users Guide. Philadelphia: SIAM Publications.
See Also
eigen
, qr
.
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