svd {base} | R Documentation |
Singular Value Decomposition of a Matrix
Description
svd
provides an interface to the LINPACK routine DSVDC.
The singular value decompostion plays an important role in many
statistical techniques.
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 |
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 veryfied 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., J. R. Bunch, C. B. Moler and G. W. Stewart (1978). LINPACK Users Guide, SIAM Publications, Philadelphia.
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 <- 10 * .Machine$double.eps
D <- diag(s$d)
all(abs(X - s$u %*% D %*% t(s$v)) < Eps)# TRUE: X = U D V'
all(abs(D - t(s$u) %*% X %*% s$v) < Eps)# TRUE: D = U' X V
X <- cbind(1,1:7)
str(s <- svd(X)); D <- diag(s$d)
all(abs(X - s$u %*% D %*% t(s$v)) < Eps)# TRUE: X = U D V'
all(abs(D - t(s$u) %*% X %*% s$v) < Eps)# TRUE: D = U' X V