35 #ifndef AIMS_ESTIMATION_WLMS_ESTIMATOR_H 36 #define AIMS_ESTIMATION_WLMS_ESTIMATOR_H 51 bool verbose =
false )
52 :
MEstimator<D>(), _mfunc( mfunc ), _error( error ),
77 template <
int D >
inline 83 int N = y.
dimX(), n, k;
84 for ( n = 0; n < N; n++ )
86 error( n ) = y ( n ) - a;
87 for ( k = 0; k < D; k++ )
88 error( n ) -= b.
item( k ) * x( n ).item( k );
89 error( n ) = fabs( error( n ) );
95 return 1.4826 * errorbis( N / 2 );
118 for ( n = 0; n < N; n++ )
120 weight( n ) = _mfunc.weight( error( n ) );
121 mat( 0, 0 ) += weight( n );
124 for ( k = 1; k <= D; k++ )
126 for ( n = 0; n < N; n++ )
127 mat( k, 0 ) += weight( n ) * x( n ).item( k - 1 );
128 mat( 0, k ) = mat( k, 0 );
132 for ( k1 = 1; k1 <= D; k1++ )
133 for ( k2 = 1; k2 <= k1; k2++ )
135 for ( n = 0; n < N; n++ )
136 mat( k1, k2 ) += weight( n ) *
137 x( n ).item( k1 - 1 ) * x( n ).item( k2 - 1 );
138 mat( k2, k1 ) = mat( k1, k2 );
142 for ( n = 0; n < N; n++ )
144 vec( 0 ) += weight( n ) * y( n );
145 for ( k = 1; k <= D; k++ )
146 vec( k ) += weight( n ) * y( n ) * x( n ).item( k - 1 );
151 for ( k = 1; k <= D; k++ )
152 b.
item( k - 1 ) = res( k );
156 template <
int D >
inline 161 ASSERT( x.dimY() == 1 && x.dimZ() == 1 && x.dimT() == 1 );
171 lms.
doit( x, y, a, b );
181 _mfunc.setSigma( sigma( x, y, old_a,old_b, error ) );
182 step( x, y, a, b, error );
183 obja = fabs( a - old_a ) / ( fabs( a ) + fabs( old_a ) );
184 objb =
norm( b - old_b ) / (
norm( b ) +
norm( old_b ) );
187 <<
"Obja : " << obja <<
" " 188 <<
"Objb : " << objb <<
" " 189 <<
"a : " << a <<
" " 190 <<
"b : " << b << std::endl;
193 while ( obja > _error || objb > _error );
virtual void doit(const AimsData< AimsVector< float, D > > &, const AimsData< float > &, float &, AimsVector< float, D > &)
AIMSDATA_API AimsData< float > AimsLinearResolutionLU(const AimsData< float > &matrix, const AimsData< float > &b)
WLMSEstimator(MEstimatorFunc &mfunc, float error, bool verbose=false)
void doit(const AimsData< AimsVector< float, D > > &x, const AimsData< float > &y, float &a, AimsVector< float, D > &b)
void step(const AimsData< AimsVector< float, D > > &x, const AimsData< float > &y, float &a, AimsVector< float, D > &b, const AimsData< float > &error)
void incSorting(AimsData< T > &thing)
AimsData< float > clone() const
void doit(const AimsData< AimsVector< float, D > > &x, const AimsData< float > &y, float &a, AimsVector< float, D > &b)
float sigma(const AimsData< AimsVector< float, D > > &x, const AimsData< float > &y, float a, const AimsVector< float, D > &b, AimsData< float > &error)
AIMSDATA_API float norm(const Tensor &thing)
const T & item(int d) const