matlib (version 0.9.6)

SVD: Singular Value Decomposition of a Matrix

Description

Compute the singular-value decomposition of a matrix \(X\) either by Jacobi rotations (the default) or from the eigenstructure of \(X'X\) using Eigen. Both methods are iterative. The result consists of two orthonormal matrices, \(U\), and \(V\) and the vector \(d\) of singular values, such that \(X = U diag(d) V'\).

Usage

SVD(
  X,
  method = c("Jacobi", "eigen"),
  tol = sqrt(.Machine$double.eps),
  max.iter = 100
)

Value

a list of three elements: d-- singular values, U-- left singular vectors, V-- right singular vectors

Arguments

X

a square symmetric matrix

method

either "Jacobi" (the default) or "eigen"

tol

zero and convergence tolerance

max.iter

maximum number of iterations

Author

John Fox and Georges Monette

Details

The default method is more numerically stable, but the eigenstructure method is much simpler. Singular values of zero are not retained in the solution.

See Also

svd, the standard svd function

Eigen

Examples

Run this code
C <- matrix(c(1,2,3,2,5,6,3,6,10), 3, 3) # nonsingular, symmetric
C
SVD(C)

# least squares by the SVD
data("workers")
X <- cbind(1, as.matrix(workers[, c("Experience", "Skill")]))
head(X)
y <- workers$Income
head(y)
(svd <- SVD(X))
VdU <- svd$V %*% diag(1/svd$d) %*%t(svd$U)
(b <- VdU %*% y)
coef(lm(Income ~ Experience + Skill, data=workers))

Run the code above in your browser using DataLab