Show
Ignore:
Timestamp:
11/25/09 18:02:21 (14 years ago)
Author:
mido
Message:

the rest of h to cpp movements, with exception of from_setting and validate to avoid conflicts with Sarka

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • library/bdm/stat/emix.cpp

    r737 r739  
    3434 
    3535        return Coms ( i )->sample(); 
     36} 
     37 
     38vec emix::mean() const { 
     39        int i; 
     40        vec mu = zeros ( dim ); 
     41        for ( i = 0; i < w.length(); i++ ) { 
     42                mu += w ( i ) * Coms ( i )->mean(); 
     43        } 
     44        return mu; 
     45} 
     46 
     47vec emix::variance() const { 
     48        //non-central moment 
     49        vec mom2 = zeros ( dim ); 
     50        for ( int i = 0; i < w.length(); i++ ) { 
     51                mom2 += w ( i ) * ( Coms ( i )->variance() + pow ( Coms ( i )->mean(), 2 ) ); 
     52        } 
     53        //central moment 
     54        return mom2 - pow ( mean(), 2 ); 
     55} 
     56 
     57double emix::evallog ( const vec &val ) const { 
     58        int i; 
     59        double sum = 0.0; 
     60        for ( i = 0; i < w.length(); i++ ) { 
     61                sum += w ( i ) * exp ( Coms ( i )->evallog ( val ) ); 
     62        } 
     63        if ( sum == 0.0 ) { 
     64                sum = std::numeric_limits<double>::epsilon(); 
     65        } 
     66        double tmp = log ( sum ); 
     67        bdm_assert_debug ( std::isfinite ( tmp ), "Infinite" ); 
     68        return tmp; 
     69} 
     70 
     71vec emix::evallog_mat ( const mat &Val ) const { 
     72        vec x = zeros ( Val.cols() ); 
     73        for ( int i = 0; i < w.length(); i++ ) { 
     74                x += w ( i ) * exp ( Coms ( i )->evallog_mat ( Val ) ); 
     75        } 
     76        return log ( x ); 
     77}; 
     78 
     79mat emix::evallog_coms ( const mat &Val ) const { 
     80        mat X ( w.length(), Val.cols() ); 
     81        for ( int i = 0; i < w.length(); i++ ) { 
     82                X.set_row ( i, w ( i ) *exp ( Coms ( i )->evallog_mat ( Val ) ) ); 
     83        } 
     84        return X; 
    3685} 
    3786 
     
    203252}; 
    204253 
     254double mprod::evallogcond ( const vec &val, const vec &cond ) { 
     255        int i; 
     256        double res = 0.0; 
     257        for ( i = pdfs.length() - 1; i >= 0; i-- ) { 
     258                /*                      if ( pdfs(i)->_rvc().count() >0) { 
     259                                                pdfs ( i )->condition ( dls ( i )->get_cond ( val,cond ) ); 
     260                                        } 
     261                                        // add logarithms 
     262                                        res += epdfs ( i )->evallog ( dls ( i )->pushdown ( val ) );*/ 
     263                res += pdfs ( i )->evallogcond ( 
     264                           dls ( i )->pushdown ( val ), 
     265                           dls ( i )->get_cond ( val, cond ) 
     266                       ); 
     267        } 
     268        return res; 
     269} 
     270 
     271vec mprod::evallogcond_mat ( const mat &Dt, const vec &cond ) { 
     272        vec tmp ( Dt.cols() ); 
     273        for ( int i = 0; i < Dt.cols(); i++ ) { 
     274                tmp ( i ) = evallogcond ( Dt.get_col ( i ), cond ); 
     275        } 
     276        return tmp; 
     277} 
     278 
     279vec mprod::evallogcond_mat ( const Array<vec> &Dt, const vec &cond ) { 
     280        vec tmp ( Dt.length() ); 
     281        for ( int i = 0; i < Dt.length(); i++ ) { 
     282                tmp ( i ) = evallogcond ( Dt ( i ), cond ); 
     283        } 
     284        return tmp; 
     285} 
     286 
    205287void mprod::set_elements ( const Array<shared_ptr<pdf> > &mFacs ) { 
    206288        pdfs = mFacs; 
     
    236318 
    237319        return Coms ( i )->samplecond ( cond ); 
     320} 
     321 
     322vec eprod::mean() const { 
     323        vec tmp ( dim ); 
     324        for ( int i = 0; i < epdfs.length(); i++ ) { 
     325                vec pom = epdfs ( i )->mean(); 
     326                dls ( i )->pushup ( tmp, pom ); 
     327        } 
     328        return tmp; 
     329} 
     330 
     331vec eprod::variance() const { 
     332        vec tmp ( dim ); //second moment 
     333        for ( int i = 0; i < epdfs.length(); i++ ) { 
     334                vec pom = epdfs ( i )->mean(); 
     335                dls ( i )->pushup ( tmp, pow ( pom, 2 ) ); 
     336        } 
     337        return tmp - pow ( mean(), 2 ); 
     338} 
     339vec eprod::sample() const { 
     340        vec tmp ( dim ); 
     341        for ( int i = 0; i < epdfs.length(); i++ ) { 
     342                vec pom = epdfs ( i )->sample(); 
     343                dls ( i )->pushup ( tmp, pom ); 
     344        } 
     345        return tmp; 
     346} 
     347double eprod::evallog ( const vec &val ) const { 
     348        double tmp = 0; 
     349        for ( int i = 0; i < epdfs.length(); i++ ) { 
     350                tmp += epdfs ( i )->evallog ( dls ( i )->pushdown ( val ) ); 
     351        } 
     352        bdm_assert_debug ( std::isfinite ( tmp ), "Infinite" ); 
     353        return tmp; 
    238354} 
    239355 
     
    267383//              } 
    268384//      }; 
     385