Rev 37134 | Rev 42333 | Go to most recent revision | 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), LINPACK = FALSE)La.svd(x, nu = min(n, p), nv = min(n, p))}\arguments{\item{x}{a real or complex 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)},except for the default options for real matrices.}\item{nv}{the number of right singular vectors to be computed.This must be one of \code{0} and \code{ncol(x)}.}\item{LINPACK}{logical. Should LINPACK be used (for compatibility with\R < 1.7.0)?}}\description{Compute the singular-value decomposition of a rectangular matrix.}\details{The singular value decomposition plays an important role in manystatistical techniques. \code{svd} and \code{La.svd} provide twoslightly different interfaces. The main functions used arethe LAPACK routines DGESDD and ZGESVD; \code{svd(LINPACK=TRUE)}provides an interface to the LINPACK routine DSVDC, purely forbackwards compatibility.Computing the singular vectors is the slow part for large matrices.Unsuccessful results from the underlying LAPACK code will result in anerror giving a positive error code: these can only be interpreted bydetailed study of the FORTRAN code.}\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 returned value is a list with components\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}, present if \code{nu > 0}}\item{v}{a matrix whose columns contain the right singular vectors of\code{x}, present if \code{nv > 0}.}For \code{La.svd} the return value replaces \code{v} by \code{vt}, the(conjugated if complex) transpose of \code{v}.}\references{Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)\emph{The New S Language}.Wadsworth \& Brooks/Cole.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 (1999)\emph{LAPACK Users' Guide}. Third Edition. SIAM.\crAvailable on-line at\url{http://www.netlib.org/lapack/lug/lapack_lug.html}.}\seealso{\code{\link{eigen}}, \code{\link{qr}}.\code{\link{capabilities}} to test for IEEE 754 arithmetic.}\examples{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}\keyword{algebra}\keyword{array}