
Perhaps it's my own bias, but I think an underutilized concept is that of a dual vector space and the corresponding contraction of a vector and a dual vector. If you assume the vector space is R^n, then of course you can identify the dual vector space with the original vector space and the contraction as just being the inner product. And since every vector space in a computer program is implemented as R^n (or F^n, F a field), I think people always assume that there is no point in designing an interface that expresses duality. However, in many situations you gain additional protection against mathematical and computation errors, if you treat vectors and dual vectors as being in different vector spaces and constrain the operations between them appropriately. I use this routinely in my hand calculations when doing my research. A simple example is the duality between position vectors and momentum vectors in physics. Any chance you would want to implement this, too? David Abrahams wrote:
MTL is aimed at linear algebra, whereas IIUC ublas is not.
There's a lot more to what's in the current plan than I can lay out here, but the focus will be on support for different kinds of matrices with combinations of these aspects
o Shape o Orientation o Symmetry o Sparsity o Blocking o Upper / Lower storage o Unit diagonal o Etc.
and operations like:
o scalar-vector (vector-scalar) multiplication o vector addition (and subtraction) o apply linear operator (left) o norm o inner product o triangular solve ...
with expression templates, and of course, zero abstraction penalty ;-)