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.