## Singular Value Decomposition of a Matrix

## Usage

    svd(x, nu=min(n,p), nv=min(n,p))

## Arguments

`x` | a matrix whose SVD decomposition is to be computed.
`nu` | the number of left eigenvectors to be computed. This must be one of `0`, `nrow(x)` and `ncol(x)`.
`nv` | the number of right eigenvectors to be computed. This must be one of `0`, and `ncol(x)`.

## Description

`svd` provides an interface to the LINPACK routine DSVDC. The singular value decompostion plays an important role in many statistical techniques.

## Value

The SVD decomposition of the matrix as computed by LINPACK,

X = U D V

, where U and V are orthogonal, and D is a diagonal matrix with the singular values D[i,i].

The components in the returned value correspond directly to the values returned by DSVDC.

`d` | a vector containing the singular values of `x`.
`u` | a matrix whose columns contain the left eigenvectors of `x`.
`v` | a matrix whose columns contain the right eigenvectors of `x`.

## References

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

## See Also

`eigen`, `qr`.

## Examples

    hilbert <- function(n) { i <- 1:n; 1 / outer(i - 1, i, "+") }
    str(X <- hilbert(9)[,1:6])
    str(s <- svd(X))
    Eps <- 10 * .Machine$double.eps

    all(abs(diag(s$d) - t(s$u)%*% X %*% s$v) < Eps)# TRUE:  D = U' X V

    X <- cbind(1,1:7)
    str(s <- svd(X))
    all(abs(diag(s$d) - t(s$u)%*% X %*% s$v) < Eps)# TRUE:  D = U' X V

[Package Contents]