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.h

    r737 r739  
    129129 
    130130        vec sample() const; 
    131         vec mean() const { 
    132                 int i; 
    133                 vec mu = zeros ( dim ); 
    134                 for ( i = 0; i < w.length(); i++ ) { 
    135                         mu += w ( i ) * Coms ( i )->mean(); 
    136                 } 
    137                 return mu; 
    138         } 
    139         vec variance() const { 
    140                 //non-central moment 
    141                 vec mom2 = zeros ( dim ); 
    142                 for ( int i = 0; i < w.length(); i++ ) { 
    143                         mom2 += w ( i ) * ( Coms ( i )->variance() + pow ( Coms ( i )->mean(), 2 ) ); 
    144                 } 
    145                 //central moment 
    146                 return mom2 - pow ( mean(), 2 ); 
    147         } 
    148         double evallog ( const vec &val ) const { 
    149                 int i; 
    150                 double sum = 0.0; 
    151                 for ( i = 0; i < w.length(); i++ ) { 
    152                         sum += w ( i ) * exp ( Coms ( i )->evallog ( val ) ); 
    153                 } 
    154                 if ( sum == 0.0 ) { 
    155                         sum = std::numeric_limits<double>::epsilon(); 
    156                 } 
    157                 double tmp = log ( sum ); 
    158                 bdm_assert_debug ( std::isfinite ( tmp ), "Infinite" ); 
    159                 return tmp; 
    160         }; 
    161  
    162         vec evallog_mat ( const mat &Val ) const { 
    163                 vec x = zeros ( Val.cols() ); 
    164                 for ( int i = 0; i < w.length(); i++ ) { 
    165                         x += w ( i ) * exp ( Coms ( i )->evallog_mat ( Val ) ); 
    166                 } 
    167                 return log ( x ); 
    168         }; 
     131 
     132        vec mean() const; 
     133 
     134        vec variance() const; 
     135 
     136        double evallog ( const vec &val ) const; 
     137 
     138        vec evallog_mat ( const mat &Val ) const; 
    169139 
    170140        //! Auxiliary function that returns pdflog for each component 
    171         mat evallog_coms ( const mat &Val ) const { 
    172                 mat X ( w.length(), Val.cols() ); 
    173                 for ( int i = 0; i < w.length(); i++ ) { 
    174                         X.set_row ( i, w ( i ) *exp ( Coms ( i )->evallog_mat ( Val ) ) ); 
    175                 } 
    176                 return X; 
    177         }; 
     141        mat evallog_coms ( const mat &Val ) const; 
    178142 
    179143        shared_ptr<epdf> marginal ( const RV &rv ) const; 
     
    334298        void set_elements ( const Array<shared_ptr<pdf> > &mFacs ); 
    335299 
    336         double evallogcond ( const vec &val, const vec &cond ) { 
    337                 int i; 
    338                 double res = 0.0; 
    339                 for ( i = pdfs.length() - 1; i >= 0; i-- ) { 
    340                         /*                      if ( pdfs(i)->_rvc().count() >0) { 
    341                                                         pdfs ( i )->condition ( dls ( i )->get_cond ( val,cond ) ); 
    342                                                 } 
    343                                                 // add logarithms 
    344                                                 res += epdfs ( i )->evallog ( dls ( i )->pushdown ( val ) );*/ 
    345                         res += pdfs ( i )->evallogcond ( 
    346                                    dls ( i )->pushdown ( val ), 
    347                                    dls ( i )->get_cond ( val, cond ) 
    348                                ); 
    349                 } 
    350                 return res; 
    351         } 
    352         vec evallogcond_mat ( const mat &Dt, const vec &cond ) { 
    353                 vec tmp ( Dt.cols() ); 
    354                 for ( int i = 0; i < Dt.cols(); i++ ) { 
    355                         tmp ( i ) = evallogcond ( Dt.get_col ( i ), cond ); 
    356                 } 
    357                 return tmp; 
    358         }; 
    359         vec evallogcond_mat ( const Array<vec> &Dt, const vec &cond ) { 
    360                 vec tmp ( Dt.length() ); 
    361                 for ( int i = 0; i < Dt.length(); i++ ) { 
    362                         tmp ( i ) = evallogcond ( Dt ( i ), cond ); 
    363                 } 
    364                 return tmp; 
    365         }; 
    366  
     300        double evallogcond ( const vec &val, const vec &cond ); 
     301 
     302        vec evallogcond_mat ( const mat &Dt, const vec &cond ); 
     303 
     304        vec evallogcond_mat ( const Array<vec> &Dt, const vec &cond ); 
    367305 
    368306        //TODO smarter... 
     
    441379        } 
    442380 
    443         vec mean() const { 
    444                 vec tmp ( dim ); 
    445                 for ( int i = 0; i < epdfs.length(); i++ ) { 
    446                         vec pom = epdfs ( i )->mean(); 
    447                         dls ( i )->pushup ( tmp, pom ); 
    448                 } 
    449                 return tmp; 
    450         } 
    451         vec variance() const { 
    452                 vec tmp ( dim ); //second moment 
    453                 for ( int i = 0; i < epdfs.length(); i++ ) { 
    454                         vec pom = epdfs ( i )->mean(); 
    455                         dls ( i )->pushup ( tmp, pow ( pom, 2 ) ); 
    456                 } 
    457                 return tmp - pow ( mean(), 2 ); 
    458         } 
    459         vec sample() const { 
    460                 vec tmp ( dim ); 
    461                 for ( int i = 0; i < epdfs.length(); i++ ) { 
    462                         vec pom = epdfs ( i )->sample(); 
    463                         dls ( i )->pushup ( tmp, pom ); 
    464                 } 
    465                 return tmp; 
    466         } 
    467         double evallog ( const vec &val ) const { 
    468                 double tmp = 0; 
    469                 for ( int i = 0; i < epdfs.length(); i++ ) { 
    470                         tmp += epdfs ( i )->evallog ( dls ( i )->pushdown ( val ) ); 
    471                 } 
    472                 bdm_assert_debug ( std::isfinite ( tmp ), "Infinite" ); 
    473                 return tmp; 
    474         } 
     381        vec mean() const; 
     382 
     383        vec variance() const; 
     384 
     385        vec sample() const; 
     386 
     387        double evallog ( const vec &val ) const; 
     388 
    475389        //!access function 
    476390        const epdf* operator () ( int i ) const {