@ -30,13 +30,13 @@
# include "lls.h"
void av_init_lls ( LLSModel * m , int indep_count )
void avpriv _init_lls ( LLSModel * m , int indep_count )
{
memset ( m , 0 , sizeof ( LLSModel ) ) ;
m - > indep_count = indep_count ;
}
void av_update_lls ( LLSModel * m , double * var , double decay )
void avpriv _update_lls ( LLSModel * m , double * var , double decay )
{
int i , j ;
@ -48,7 +48,7 @@ void av_update_lls(LLSModel *m, double *var, double decay)
}
}
void av_solve_lls ( LLSModel * m , double threshold , int min_order )
void avpriv _solve_lls ( LLSModel * m , double threshold , int min_order )
{
int i , j , k ;
double ( * factor ) [ MAX_VARS + 1 ] = ( void * ) & m - > covariance [ 1 ] [ 0 ] ;
@ -105,7 +105,7 @@ void av_solve_lls(LLSModel *m, double threshold, int min_order)
}
}
double av_evaluate_lls ( LLSModel * m , double * param , int order )
double avpriv _evaluate_lls ( LLSModel * m , double * param , int order )
{
int i ;
double out = 0 ;
@ -116,6 +116,25 @@ double av_evaluate_lls(LLSModel *m, double *param, int order)
return out ;
}
# ifndef FF_API_LLS_PRIVATE
void av_init_lls ( LLSModel * m , int indep_count )
{
return avpriv_init_lls ( m , indep_count ) ;
}
void av_update_lls ( LLSModel * m , double * param , double decay )
{
return avpriv_update_lls ( m , param , decay ) ;
}
void av_solve_lls ( LLSModel * m , double threshold , int min_order )
{
return avpriv_solve_lls ( m , threshold , min_order ) ;
}
double av_evaluate_lls ( LLSModel * m , double * param , int order )
{
return avpriv_evaluate_lls ( m , param , order ) ;
}
# endif
# ifdef TEST
# include <stdio.h>
@ -129,7 +148,7 @@ int main(void)
AVLFG lfg ;
av_lfg_init ( & lfg , 1 ) ;
av_init_lls ( & m , 3 ) ;
avpriv _init_lls ( & m , 3 ) ;
for ( i = 0 ; i < 100 ; i + + ) {
double var [ 4 ] ;
@ -139,10 +158,10 @@ int main(void)
var [ 1 ] = var [ 0 ] + av_lfg_get ( & lfg ) / ( double ) UINT_MAX - 0.5 ;
var [ 2 ] = var [ 1 ] + av_lfg_get ( & lfg ) / ( double ) UINT_MAX - 0.5 ;
var [ 3 ] = var [ 2 ] + av_lfg_get ( & lfg ) / ( double ) UINT_MAX - 0.5 ;
av_update_lls ( & m , var , 0.99 ) ;
av_solve_lls ( & m , 0.001 , 0 ) ;
avpriv _update_lls ( & m , var , 0.99 ) ;
avpriv _solve_lls ( & m , 0.001 , 0 ) ;
for ( order = 0 ; order < 3 ; order + + ) {
eval = av_evaluate_lls ( & m , var + 1 , order ) ;
eval = avpriv _evaluate_lls ( & m , var + 1 , order ) ;
printf ( " real:%9f order:%d pred:%9f var:%f coeffs:%f %9f %9f \n " ,
var [ 0 ] , order , eval , sqrt ( m . variance [ order ] / ( i + 1 ) ) ,
m . coeff [ order ] [ 0 ] , m . coeff [ order ] [ 1 ] ,