Boost logo

Ublas :

From: Michael Stevens (mail_at_[hidden])
Date: 2005-10-19 13:33:39

On Wednesday, 19. October 2005 18:57, Shawn D. Pautz wrote:
> I think I understand now, thanks. But now that "Matrix" no longer
> appears in the template machinery, should I write
> E LU = A;
> rather than
> Matrix LU = A;
> Perhaps an equivalent question: Is E always a concrete matrix class?

E will NOT in general be a concrete Matrix class. In fact it will only be a
concrete matrix class in the case where 'determinant' is called with a
concrete matrix argument. This is because a Matrix class must be dervived
        class matrix : public matrix_container<matrix>
        template <class C>
        class matrix_container : public matrix_expression<C>

If you provide matrix_container overload of 'determinant' then E will never be
a concrete Matrix class.

I think this makes practical sense. You can provide an arbitary complex matrix
expression but to be able to do an inversion you need a concrete matrix to
provide working space. The best Matrix type to choose for this will have no
simple relationship with the particular expression. It is up to the user to


Michael Stevens Systems Engineering
34128 Kassel, Germany
Phone/Fax: +49 561 5218038
Navigation Systems, Estimation  and
                 Bayesian Filtering