# Documentation

### This is machine translation

Translated by
Mouseover text to see original. Click the button below to return to the English verison of the page.

# cholcov

Cholesky-like covariance decomposition

## Syntax

```T = cholcov(SIGMA) [T,num] = cholcov(SIGMA) [T,num] = cholcov(SIGMA,0) ```

## Description

`T = cholcov(SIGMA)` computes `T` such that `SIGMA = T'*T`. `SIGMA` must be square, symmetric, and positive semi-definite. If `SIGMA` is positive definite, then `T` is the square, upper triangular Cholesky factor. If `SIGMA` is not positive definite, `T` is computed from an eigenvalue decomposition of `SIGMA`. `T` is not necessarily triangular or square in this case. Any eigenvectors whose corresponding eigenvalue is close to zero (within a small tolerance) are omitted. If any remaining eigenvalues are negative, `T` is empty.

`[T,num] = cholcov(SIGMA)` returns the number `num` of negative eigenvalues of `SIGMA`, and `T` is empty if `num` is positive. If `num` is zero, `SIGMA` is positive semi-definite. If `SIGMA` is not square and symmetric, `num` is `NaN` and `T` is empty.

`[T,num] = cholcov(SIGMA,0)` returns `num` equal to zero if `SIGMA` is positive definite, and `T` is the Cholesky factor. If `SIGMA` is not positive definite, `num` is a positive integer and `T` is empty. ```[...] = cholcov(SIGMA,1)``` is equivalent to `[...] = cholcov(SIGMA)`.

## Examples

The following 4-by-4 covariance matrix is rank-deficient:

```C1 = [2 1 1 2;1 2 1 2;1 1 2 2;2 2 2 3] C1 = 2 1 1 2 1 2 1 2 1 1 2 2 2 2 2 3 rank(C1) ans = 3```

Use `cholcov` to factor `C1`:

```T = cholcov(C1) T = -0.2113 0.7887 -0.5774 0 0.7887 -0.2113 -0.5774 0 1.1547 1.1547 1.1547 1.7321 C2 = T'*T C2 = 2.0000 1.0000 1.0000 2.0000 1.0000 2.0000 1.0000 2.0000 1.0000 1.0000 2.0000 2.0000 2.0000 2.0000 2.0000 3.0000```

Use `T` to generate random data with the specified covariance:

```C3 = cov(randn(1e6,3)*T) C3 = 1.9973 0.9982 0.9995 1.9975 0.9982 1.9962 0.9969 1.9956 0.9995 0.9969 1.9980 1.9972 1.9975 1.9956 1.9972 2.9951```