Fast matrix multiplication and division for Toeplitz, Hankel and circulant matrices in Julia

A Toeplitz matrix has constant diagonals. It can be constructed using

```
Toeplitz(vc,vr)
```

where `vc`

are the entries in the first column and `vr`

are the entries in the first row, where `vc[1]`

must equal `vr[1]`

. For example.

```
Toeplitz(1:3, [1.,4.,5.])
```

is a sparse representation of the matrix

```
[ 1.0 4.0 5.0
2.0 1.0 4.0
3.0 2.0 1.0 ]
```

A triangular Toeplitz matrix can be constructed using

```
TriangularToeplitz(ve,uplo)
```

where uplo is either `:L`

or `:U`

and `ve`

are the rows or columns, respectively. For example,

```
TriangularToeplitz([1.,2.,3.],:L)
```

is a sparse representation of the matrix

```
[ 1.0 0.0 0.0
2.0 1.0 0.0
3.0 2.0 1.0 ]
```

# Hankel

A Hankel matrix has constant anti-diagonals. It can be constructed using

```
Hankel(vc,vr)
```

where `vc`

are the entries in the first column and `vr`

are the entries in the last row, where `vc[end]`

must equal `vr[1]`

. For example.

```
Hankel([1.,2.,3.], 3:5)
```

is a sparse representation of the matrix

```
[ 1.0 2.0 3.0
2.0 3.0 4.0
3.0 4.0 5.0 ]
```

# Circulant

A circulant matrix is a special case of a Toeplitz matrix with periodic end conditions. It can be constructed using

```
Circulant(vc)
```

where `vc`

is a vector with the entries for the first column.
For example:

```
Circulant(1:3)
```

is a sparse representation of the matrix

```
[ 1.0 3.0 2.0
2.0 1.0 3.0
3.0 2.0 1.0 ]
```

09/17/2013

12 days ago

69 commits