35 #ifndef AIMS_ESTIMATION_LMS_ESTIMATOR_H
36 #define AIMS_ESTIMATION_LMS_ESTIMATOR_H
63 template <
int D >
inline
70 ASSERT( x->getSizeY() == 1 && x->getSizeZ() == 1 && x->getSizeT() == 1 );
71 ASSERT( y->getSizeY() == 1 && y->getSizeZ() == 1 && y->getSizeT() == 1 );
72 ASSERT( x->getSizeX() == y->getSizeX() );
74 int N = y->getSizeX();
80 mat( 0, 0 ) = float( N );
82 for ( k = 1; k <= D; k++ )
84 for ( n = 0; n < N; n++ )
85 mat( k, 0 ) += x->
at( n ).item( k - 1 );
86 mat( 0, k ) = mat( k, 0 );
90 for ( k1 = 1; k1 <= D; k1++ )
91 for ( k2 = 1; k2 <= k1; k2++ )
93 for ( n = 0; n < N; n++ )
94 mat( k1, k2 ) += x->
at( n ).item( k1 - 1 ) * x->at( n ).item( k2 - 1 );
95 mat( k2, k1 ) = mat( k1, k2 );
99 for ( n = 0; n < N; n++ )
101 vec( 0 ) += y->
at( n );
102 for ( k = 1; k <= D; k++ )
103 vec( k ) += y->
at( n ) * x->at( n ).item( k - 1 );
108 for ( k = 1; k <= D; k++ )
109 b.
item( k - 1 ) = res( k );
const T & item(int d) const
void doit(const carto::rc_ptr< carto::Volume< AimsVector< float, D > > > &x, const carto::rc_ptr< carto::Volume< float > > &y, float &a, AimsVector< float, D > &b)
const T & at(long x, long y=0, long z=0, long t=0) const
carto::VolumeRef< float > AimsLinearResolutionLU(const carto::VolumeRef< float > &matrix, const carto::VolumeRef< float > &b)