Boost logo

Boost :

From: lums_at_[hidden]
Date: 2001-03-14 09:31:44


--- In boost_at_y..., "David Abrahams" <abrahams_at_m...> wrote:

> So, "Matrix Template Library" is a misnomer?

Touche'! Yes, the name was picked when I was still giddy after
learning about the STL and slowly learning about generic programming
general. It was also named before our concept hierarchy was very
well defined.

> Okay, but what use is a matrix library without easy-to-use/build
linear
> algebra operations? That is, why would anyone want to make an "array
> library" as you define the term?

Lots of uses I would imagine. C++ has built-in arrays (and
valarray), after all, that people use for lots of things. Some
scientific things would include representing regularly discretized
domains. What I was getting at here is that the empasis (in my mind)
of an array library is storage and data manipulation. The emphasis
in a linear algebra library is in the (abstract) linear algebra
operations. One would certainly build a linear algebra library on
top of an array library.

> > I have spent a good part of my professional career thinking about
> > these issues and they are quite non-trivial when you really start
> > digging into them. It does not seem difficult at first -- and
> > indeed, the world is full of not-very-good "matrix libraries"
because
> > they are so easy to construct. Most such libraries I would not
call
> > linear algebra libraries because most such libraries do not have
any
> > kind of conceptual analysis of the linear algebra problem domain
(so
> > I use the name "matrix library").
>
> Can you try to make this a bit more concrete? Examples
> illustrating/contrasting the strengths of each type of library
would help a
> lot.

An array library is primarily concerned with storage, data layout,
data manipulation. It's operations would primarily be geared towards
data access, providing views of the data, re-organizing the data.

A linear algebra library would be concerned with mathemetically based
concepts and linear algebra operations using those concepts. For
instance you would have an operation in a linear algebra library that
looks like:

template <class LinearOperator, class VectorSpaceX, class
VectorSpaceY>
apply(LinearOperator A, VectorSpace x, VectorSpace y)

where this realizes y <- A*x

This provides linear algebra functionality -- arrays are nowhere to
be found. In fact, if A is sparse, it will be a matrix, but it won't
be a rectangular 2D array. A might not be an explicitly represented
matrix of any kind -- it could simply be a function that returns the
result A*x without using a stored matrix (e.g., a matrix-free
operator).

Is this answering your question?

These definitions are just one attempt and there are certain to be
other interpretations.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk