
Hi Aleksey, On Jul 5, 2004, at 9:34 PM, Aleksey Gurtovoy wrote:
A *linear algebra* algorithm will never need to be generalized in the fashion you advocate below.
On the contrary, I think one can come up with numerous examples proving the opposite. For instance:
The below algorithm is not a linear algebra algorithm in the sense that it is not defined in terms of linear algebra operations, such as addition and multiplication. The below algorithm operates at a slightly lower level of abstraction. I agree that for that level, it is sometimes convenient to ignore the row/column distinction. MTL-2 provides an alternative interface that provides for this capability. Note however, you've still only got 2 dimensions.
template< int i, int j, typename M > bool is_triangular( M const& m ) { for ( typename index_type<M,i>::type k(0); k < m.size(int_<i>()); ++k ) for ( typename index_type<M,j>::type l(0); l < value(k); ++l ) if ( m[k][l] != 0 ) return false;
return true; }
template< typename M > bool is_upper_triangular( M const& m ) { return is_triangular<0,1>( m ); }
template< typename M > bool is_lower_triangular( M const& m ) { return is_triangular<1,0>( m ); }
-- Aleksey Gurtovoy MetaCommunications Engineering
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
_______________________________________________ Jeremy Siek <jsiek@osl.iu.edu> http://www.osl.iu.edu/~jsiek Ph.D. Student, Indiana University Bloomington C++ Booster (http://www.boost.org) _______________________________________________