--- /dev/null
+#ifndef __CPPLUGINS__EXTENSIONS__ALGORITHMS__KALMANFILTER__HXX__
+#define __CPPLUGINS__EXTENSIONS__ALGORITHMS__KALMANFILTER__HXX__
+
+// -------------------------------------------------------------------------
+template< typename T >
+template< class M >
+void cpPlugins::Extensions::Algorithms::KalmanFilter< T >::
+Kronecker( M& AkB, const M& A, const M& B )
+{
+ unsigned int Ar = A.rows( ); unsigned int Ac = A.cols( );
+ unsigned int Br = B.rows( ); unsigned int Bc = B.cols( );
+ AkB.set_size( Ar * Br, Ac * Bc );
+
+ for( unsigned int ar = 0; ar < Ar; ar++ )
+ {
+ for( unsigned int ac = 0; ac < Ac; ac++ )
+ {
+ typename M::element_type vA = A[ ar ][ ac ];
+ for( unsigned int br = 0; br < Br; br++ )
+ {
+ unsigned int rOff = ar + ( br * ( Br - 1 ) );
+ for( unsigned int bc = 0; bc < Bc; bc++ )
+ AkB[ rOff ][ ac + ( bc * ( Bc - 1 ) ) ] = vA * B[ br ][ bc ];
+
+ } // rof
+
+ } // rof
+
+ } // rof
+}
+
+#endif // __CPPLUGINS__EXTENSIONS__ALGORITHMS__KALMANFILTER__HXX__
+
+// eof - $RCSfile$