Rev 78982 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/base/man/svd.Rd% Part of the R package, https://www.R-project.org% Copyright 1995-2020 R Core Team% Distributed under GPL 2 or later\name{svd}\alias{svd}\alias{La.svd}\title{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), LINPACK = FALSE)La.svd(x, nu = min(n, p), nv = min(n, p))}\arguments{\item{x}{a numeric or complex matrix whose SVD decompositionis to be computed. Logical matrices are coerced to numeric.}\item{nu}{the number of left singular vectors to be computed.This must between \code{0} and \code{n = nrow(x)}.}\item{nv}{the number of right singular vectors to be computed.This must be between \code{0} and \code{p = ncol(x)}.}\item{LINPACK}{logical. Defunct and ignored with a warning.}}\details{The singular value decomposition plays an important role in manystatistical techniques. \code{svd} and \code{La.svd} provide twointerfaces which differ in their return values.Computing the singular vectors is the slow part for large matrices.The computation will be more efficient if both \code{nu <= min(n, p)}and \code{nv <= min(n, p)}, and even more so if both are zero.Unsuccessful results from the underlying LAPACK code will result in anerror giving a positive error code (most often \code{1}): these canonly be interpreted by detailed study of the FORTRAN code but meanthat the algorithm failed to converge.}\value{The SVD decomposition of the matrix as computed by LAPACK, \deqn{\bold{X = U D V'},} where \eqn{\bold{U}} and \eqn{\bold{V}} areorthogonal, \eqn{\bold{V'}} means \emph{V transposed} (and conjugatedfor complex input), and \eqn{\bold{D}} is a diagonal matrix with the(non-negative) singular values \eqn{D_{ii}}{D[i,i]} in decreasingorder. Equivalently, \eqn{\bold{D = U' X V}}, which is verified inthe examples.The returned value is a list with components\item{d}{a vector containing the singular values of \code{x}, oflength \code{min(n, p)}, sorted decreasingly.}\item{u}{a matrix whose columns contain the left singular vectors of\code{x}, present if \code{nu > 0}. Dimension \code{c(n, nu)}.}\item{v}{a matrix whose columns contain the right singular vectors of\code{x}, present if \code{nv > 0}. Dimension \code{c(p, nv)}.}Recall that the singular vectors are only defined up to sign (aconstant of modulus one in the complex case). If a left singularvector has its sign changed, changing the sign of the correspondingright vector gives an equivalent decomposition.For \code{La.svd} the return value replaces \code{v} by \code{vt}, the(conjugated if complex) transpose of \code{v}.}\source{The main functions used are the LAPACK routines \code{DGESDD} and\code{ZGESDD}.LAPACK is from \url{https://www.netlib.org/lapack/} and its guide islisted in the references.}\references{Anderson. E. and ten others (1999)\emph{LAPACK Users' Guide}. Third Edition. SIAM.\crAvailable on-line at\url{https://www.netlib.org/lapack/lug/lapack_lug.html}.The \href{https://en.wikipedia.org/wiki/Singular-value_decomposition}{%\sQuote{Singular-value decomposition}} Wikipedia article.Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)\emph{The New S Language}.Wadsworth & Brooks/Cole.}\seealso{\code{\link{eigen}}, \code{\link{qr}}.}\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}