#ifndef __CPEXTENSIONS__ALGORITHMS__KALMANFILTER__HXX__ #define __CPEXTENSIONS__ALGORITHMS__KALMANFILTER__HXX__ // ------------------------------------------------------------------------- template< typename T > template< class M > void cpExtensions::Algorithms::KalmanFilter< T >:: Kronecker( M& AkB, const M& A, const M& B ) { unsigned int m = A.rows( ); unsigned int n = A.cols( ); unsigned int p = B.rows( ); unsigned int q = B.cols( ); AkB.set_size( m * p, n * q ); for( unsigned int i = 1; i <= m; ++i ) { for( unsigned int j = 1; j <= n; ++j ) { for( unsigned int k = 1; k <= p; ++k ) { for( unsigned int l = 1; l <= q; ++l ) { unsigned int al = ( ( p * ( i - 1 ) ) + k ) - 1; unsigned int be = ( ( q * ( j - 1 ) ) + l ) - 1; AkB[ al ][ be ] = A[ i - 1 ][ j - 1 ] * B[ k - 1 ][ l - 1 ]; } // rof } // rof } // rof } // rof } #endif // __CPEXTENSIONS__ALGORITHMS__KALMANFILTER__HXX__ // eof - $RCSfile$