LinAlg provides data types and operations for algebraic vectors and matrices.

Vector and Matrix elements can be of arbitrary type, provided that a factory for that element type is available. Currently, factories exist for `Double`

, `Float`

, `Long`

, `Int`

, `Short`

, `Byte`

and `Char`

.

Vector and matrix (row and column) indices can be any integer (to state more precisely, an index must be in the interval `[Mindex, Maxdex]`

, as defined in the `Index`

object). But only elements corresponding to a subset of that whole integer range actually are stored (the *concrete* elements), while all other elements by definition are zero (*virtual* elements).

This concept (which I got to value a long time ago with the ALGOL68 library prelude TORRIX) does not only provide a natural approach to operations with vectors and matrixes of different index ranges, but also prevents from index-out-of-bounds exceptions.

Concrete index ranges (those indices that correspond to concrete elements) implicitly or explicitly are assigned when a vector or matrix is created. By default, it starts at 1 and extends to the number of elements specified, but this is customizable.