matlib (version 0.9.2)

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)

Arguments

X

a square symmetric matrix

method

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

tol

zero and convergence tolerance

max.iter

maximum number of iterations

Value

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

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
# NOT RUN {
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