svd {base} R Documentation

## 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),
method = c("dgesdd", "dgesvd"))
```

### Arguments

 `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.

### Details

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.

### Value

The SVD decomposition of the matrix as computed by LINPACK,

X = U D V',

where U and V are orthogonal, V' means V transposed, and D is a diagonal matrix with the singular values D[i,i]. Equivalently, D = U' X V, which is verified in the examples, below.
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`.

### References

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.

`eigen`, `qr`.

`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
```

[Package base version 2.1.0 Index]