svd {base} | R Documentation |

Compute the singular-value decomposition of a rectangular matrix.

svd(x, nu = min(n, p), nv = min(n, p), LINPACK = FALSE) La.svd(x, nu = min(n, p), nv = min(n, p), method = c("dgesdd", "dgesvd"))

`x` |
a matrix whose SVD decomposition is to be computed. |

`nu` |
the number of left singular vectors to be computed.
This must be one of `0` , `nrow(x)` and `ncol(x)` ,
except for `method = "dgesdd"` . |

`nv` |
the number of right singular vectors to be computed.
This must be one of `0` and `ncol(x)` . |

`LINPACK` |
logical. Should LINPACK be used (for compatibility with
R < 1.7.0)? |

`method` |
The LAPACK routine to use in the real case. |

The singular value decomposition plays an important role in many
statistical techniques. `svd`

and `La.svd`

provide two
slightly different interfaces. The main functions used are
the LAPACK routines DGESDD and ZGESVD; `svd(LINPACK=TRUE)`

provides an interface to the LINPACK routine DSVDC, purely for
backwards compatibility.

`La.svd`

provides an interface to both the LAPACK routines
DGESVD and DGESDD. The latter is usually substantially faster
if singular vectors are required: see
http://www.cs.berkeley.edu/~demmel/DOE2000/Report0100.html.
Most benefit is seen with an optimized BLAS system.
Using `method="dgesdd"`

requires IEEE 754 arithmetic. Should
this not be supported on your platform, `method="dgesvd"`

is
used, with a warning.

Computing the singular vectors is the slow part for large matrices.

Unsuccessful results from the underlying LAPACK code will result in an error giving a positive error code: these can only be interpreted by detailed study of the FORTRAN code.

The SVD decomposition of the matrix as computed by LINPACK,

* X = U D V',*

where * U* and

The returned value is a list with components

`d` |
a vector containing the singular values of `x` . |

`u` |
a matrix whose columns contain the left singular vectors of
`x` , present if `nu > 0` |

`v` |
a matrix whose columns contain the right singular vectors of
`x` , present if `nv > 0` . |

For `La.svd`

the return value replaces `v`

by `vt`

, the
(conjugated if complex) transpose of `v`

.

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)
*The New S Language*.
Wadsworth & Brooks/Cole.

Dongarra, J. J., Bunch, J. R., Moler, C. B. and Stewart, G. W. (1978)
*LINPACK Users Guide.* Philadelphia: SIAM Publications.

Anderson. E. and ten others (1999)
*LAPACK Users' Guide*. Third Edition. SIAM.

Available on-line at
http://www.netlib.org/lapack/lug/lapack_lug.html.

`capabilities`

to test for IEEE 754 arithmetic.

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

[Package *base* version 2.1.0 Index]