Compute a nonnegative definite matrix from its Singular Value Decomposition
The function computes a nonnegative definite matrix from its Singular Value Decomposition.
a square matrix, or a list of square matrices for a vectorized usage.
a vector, or a matrix for a vectorized usage.
The SVD of a nonnegative definite n by n square matrix
x can be written as u d^2 u', where u is an n
by n orthogonal matrix and d is a diagonal matrix. For a
single matrix, the function returns just u d^2 u'. Note that the
d is a vector containing the diagonal elements of
d. For a vectorized usage,
u is a list of square
d is a matrix. The returned value in this case is
a list of matrices, with the element i being
diag(d[i,]^2) %*% t(u[[i]]).
The function returns a nonnegative definite matrix, reconstructed from its SVD, or a list of such matrices (see details above).
Giovanni Petris GPetris@uark.edu
Horn and Johnson, Matrix analysis, Cambridge University Press (1985)
1 2 3 4 5 6 7 8 9 10 11 12
x <- matrix(rnorm(16),4,4) x <- crossprod(x) tmp <- La.svd(x) all.equal(dlmSvd2var(tmp$u, sqrt(tmp$d)), x) ## Vectorized usage x <- dlmFilter(Nile, dlmModPoly(1, dV=15099, dW=1469)) x$se <- sqrt(unlist(dlmSvd2var(x$U.C, x$D.C))) ## Level with 50% probability interval plot(Nile, lty=2) lines(dropFirst(x$m), col="blue") lines(dropFirst(x$m - .67*x$se), lty=3, col="blue") lines(dropFirst(x$m + .67*x$se), lty=3, col="blue")