Rev 14533 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
\name{svd}\alias{svd}\alias{La.svd}\title{Singular Value Decomposition of a Matrix}\usage{svd(x, nu = min(n, p), nv = min(n, p))La.svd(x, nu = min(n, p), nv = min(n, p))}\arguments{\item{x}{a matrix whose SVD decomposition is to be computed.}\item{nu}{the number of left singular vectors to be computed.This must be one of \code{0}, \code{nrow(x)} and \code{ncol(x)}.}\item{nv}{the number of right singular vectors to be computed.This must be one of \code{0} and \code{ncol(x)}.}}\description{Compute the singular-value decomposition of a rectangular matrix.}\details{The singular value decomposition plays an important role in manystatistical techniques.\code{svd} provides an interface to the LINPACK routine DSVDC.\code{La.svd} provides an interface to the LAPACK routine DGESVD.\code{La.svd} is preferred to \code{svd} for new projects, but it isnot an exact replacement as it returns the transpose of the rightsingular vector matrix, and the signs of the singular vectors may differfrom those given by \code{svd}.Both functions handle complex matrices via LAPACK routine ZGESVD.}\value{The SVD decomposition of the matrix as computed by LINPACK,\deqn{ \bold{X = U D V'},} where \eqn{\bold{U}} and \eqn{\bold{V}} areorthogonal, \eqn{\bold{V'}} means \emph{V transposed}, and\eqn{\bold{D}} is a diagonal matrix with the singularvalues \eqn{D_{ii}}{D[i,i]}. Equivalently, \eqn{\bold{D = U' X V}},which is verified in the examples, below.The components in the returned value correspond directlyto the values returned by DSVDC.\item{d}{a vector containing the singular values of \code{x}.}\item{u}{a matrix whose columns contain the left singular vectors of \code{x}.}\item{v}{a matrix whose columns contain the right singular vectors of\code{x}.}For \code{La.svd} the return value replaces \code{v} by \code{vt}, the(conjugated if complex) transpose of \code{v}.}\references{Dongarra, J. J., Bunch, J. R., Moler, C. B. and Stewart, G. W. (1978)\emph{LINPACK Users Guide.} Philadelphia: SIAM Publications.Anderson. E. and ten others (1995)\emph{LAPACK Users' Guide}. Second Edition. SIAM.}\seealso{\code{\link{eigen}}, \code{\link{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.epsD <- 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 VX <- 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}\keyword{algebra}\keyword{array}