# Compute a nonnegative definite matrix from its Singular Value Decomposition

### Description

The function computes a nonnegative definite matrix from its Singular Value Decomposition.

### Usage

1 | ```
dlmSvd2var(u, d)
``` |

### Arguments

`u` |
a square matrix, or a list of square matrices for a vectorized usage. |

`d` |
a vector, or a matrix for a vectorized usage. |

### Details

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
argument `d`

is a vector containing the diagonal elements of
*d*. For a vectorized usage, `u`

is a list of square
matrices, and `d`

is a matrix. The returned value in this case is
a list of matrices, with the element *i* being ```
u[[i]] %*%
diag(d[i,]^2) %*% t(u[[i]])
```

.

### Value

The function returns a nonnegative definite matrix, reconstructed from its SVD, or a list of such matrices (see details above).

### Author(s)

Giovanni Petris GPetris@uark.edu

### References

Horn and Johnson, Matrix analysis, Cambridge University Press (1985)

### Examples

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")
``` |

Want to suggest features or report bugs for rdrr.io? Use the GitHub issue tracker. Vote for new features on Trello.