| svd {base} | R Documentation | 
Compute the singular-value decomposition of a rectangular matrix.
svd(x, nu = min(n,p), nv = min(n,p))
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). | 
svd provides an interface to the LINPACK routine DSVDC.
The singular value decomposition plays an important role in many
statistical techniques.
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 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. | 
Dongarra, J. J., Bunch, J. R., Moler, C. B. and Stewart, G. W. (1978) LINPACK Users Guide. Philadelphia: SIAM Publications.
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
D <- diag(s$d)
all(abs(X - s$u %*% D %*% t(s$v)) < Eps)# TRUE:  X = U D V'
all(abs(D - t(s$u) %*% X %*% s$v) < Eps)# TRUE:  D = U' X V
X <- cbind(1, 1:7)
str(s <- svd(X)); D <- diag(s$d)
all(abs(X - s$u %*% D %*% t(s$v)) < Eps)# TRUE:  X = U D V'
all(abs(D - t(s$u) %*% X %*% s$v) < Eps)# TRUE:  D = U' X V