# ldl

LDL decomposition.

## Syntax

[U,D,P] = ldl(A)

[U,D,P] = ldl(A,'upper')

[L,D,P] = ldl(A,'lower')

## Inputs

`A`- The Hermitian matrix to decompose, typically indefinite.

## Outputs

- U
- Upper triangular matrix.
- L
- Lower triangular matrix.
- D
- Diagonal or block diagonal matrix.
- P
- Permutation matrix.

## Example

```
A = [2, -1, 3; -1, 2, 2; 3, 2, 5]
[U,D,P] = ldl(A)
```

```
U = [Matrix] 3 x 3
1.00000 0.00000 0.60000
0.00000 1.00000 0.40000
0.00000 0.00000 1.00000
D = [Matrix] 3 x 3
0.20000 -2.20000 0.00000
-2.20000 1.20000 0.00000
0.00000 0.00000 5.00000
P = [Matrix] 3 x 3
1 0 0
0 1 0
0 0 1
```

## Comments

[U,D,P] = ldl(A,'upper') computes matrix U such that A = P*U*D*U'*P'

[L,D,P] = ldl(A,'lower') computes matrix L such that A = P*L*D*L'*P'

ldl uses the LAPACK routines 'dsytrf', 'dsyconv', 'zhetrf' and 'zsyconv'.

`A` is assumed to be real symmetric or Hermitian, with the second argument specifying
which triangle is used. The default is 'upper'.