From: Hayati Ayguen (Ayguen_at_[hidden])
Date: 2001-08-20 08:20:11
> --- In boost_at_y..., Hayati Ayguen <Ayguen_at_b...> wrote:
> > Many aspects have to be considered when implementing efficient
> > matrix/vector classes. i'm unsure about development status of all
> > matrix class libraries out there, but i haven't seen any library
> > concerning all issues.
> However, if we wait for a matrix library that covers
> all these issues, we will never have a standard C++ matrix interface.
> > some of the important issues are:
> > i'm sure i forgot some important issues, so its to you to complete
> > list!
one of the forgotten issues are strides and submatrices.
> IMHO, what is needed most is a simple
> interface for rectangular, dense matrices,
> covering C-style layout.
> In a first step no operators, no expression templates,
> no transpose etc.
especially sparse matrices need access methods/iterators to the elements
of a matrix. declaring a too simple interface supporting only
rectangular, dense matrices is wrong. such a standard interface would
lead many people to write higher level code (matrix solver ...) for such
an interface. but you'll have to rewrite / throw away such code if other
issues require a new more sophisticated interface solving element access
in a more uniform manner.
all current issues have to be taken into account for specifying such an
i agree that we don't have to implement anything like operators,
expression templates, transpose, ... but we need proper interfaces for
such functions. take transpose() for example:
a) should it be a global function where
Matrix tansposed_mat = transpose( A );
b) a static member function
Matrix tansposed_mat = Matrix::transpose( A );
c) a member function modifying itself
Matrix tansposed_mat = A;
d) .. ?
or take a simple addition:
add( const Matrix& op1, const Matrix& op2, Matrix& op1res );
b) static member ...
c) or change the ordering of the arguments:
add( Matrix& op1res, const Matrix& op1, const Matrix& op2 );
or how to address heteregeneous operations:
add( Vector<double>& op1res, const Vector<int>& op1, const Vector<int>&
is it satisfactory to calculate internally with:
double = int + int;
and how about
divide( Vector<double>& op1res, const Vector<int>& op1, const
Vector<int>& op2 );
or call it div()
all this has to be considered!
> This is the minimum to get a standard interface
> for an OO usage of many legacy C libraries like IMSL.
> Every more sophisticated C++ library
> should follow the same basic interface,
> but clearly may add additional special purpose methods.
> > i'm also unsure of how many of the above issues are concerned in the
> > "mtl-3" which is mentioned to get part of boost.
> What is the actual state of MTL 3?
> If it is far enough, it might be a good idea
> to use the interface of MTL 3 as a basic matrix interface.
i don't know the status of MTL3 but MTL 2.1.2-xx can be found at
> > A cooperation with OON
> > group should be considered.
> I agree.
> But anyway, the emphasis of OON is more on implementation,
> while IMHO the emphasis of boost should be on interface.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk