# ElasticPDMats

Efficient growing and shrinking of positive definite matrices thanks to preallocated memory.

## Usage

In addition to the functions defined in the common PDMats
interface,
`ElasticPDMat <: AbstractPDMat`

can grow with `append!`

a = rand(10, 10); m = a'a;
e = ElasticPDMat(m[1:8, 1:8))
append!(e, m[:, 9:10])

and shrink with `deleteat!`

deleteat!(e, [3, 8, 7])

Growing and shrinking is usually efficient, because no entries are recomputed
and (basically no) new memory needs to be allocated. `ElasticMat(capacity = 10^3, stepsize = 10^3)`

allocates `capacity x capacity`

matrices and creates
(initially `0`

-dimensional) views to represent positive definite matrices.
Whenever the current `capacity`

is reached, e.g. due to several `append!`

operations, the `capacity`

increases to `capacity += stepsize`

. *Caution:*
increasing the `capacity`

involves allocating new memory and copying old values,
which is slow. For optimal performance, the `capacity`

and the `stepsize`

should
be chosen wisely. For an already initialized `e = ElasticPDMat()`

they can be
set with the helper functions `setcapacity!(e, 100)`

and `setstepsize!(e, 100)`

.

Additionally to `ElasticPDMat`

this package exports view based elastic arrays of
any dimension `AllElasticArray`

, `ElasticSymmetricMatrix`

, `ElasticCholesky`

and
the helper functions `setcapacity!`

, `setstepsize!`

and `setdimension!`

.