str(X <- hilbert(9)[,1:6])
str(s <- SVD(X))
Eps <- 100 * .Machine$double.eps
D <- diag(s$d)
stopifnot(abs(X - s$u %*% D %*% s$vt) < Eps)# X = U D V'
stopifnot(abs(D - t(s$u) %*% X %*% t(s$vt)) < Eps)# D = U' X V
X <- cbind(1, 1:7)
str(s <- SVD(X)); D <- diag(s$d)
stopifnot(abs(X - s$u %*% D %*% s$vt) < Eps)# X = U D V'
stopifnot(abs(D - t(s$u) %*% X %*% t(s$vt)) < Eps)# D = U' X V
Run the code above in your browser using DataLab