Changeset 286 for bdm/estim/mixef.h

Show
Ignore:
Timestamp:
03/05/09 14:03:35 (15 years ago)
Author:
smidl
Message:

make mpdm work again

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • bdm/estim/mixef.h

    r278 r286  
    1919#include "../stat/emix.h" 
    2020 
    21 namespace bdm{ 
     21namespace bdm { 
    2222 
    2323enum MixEF_METHOD { EM = 0, QB = 1}; 
     
    5050        eprod* est; 
    5151        ////!Indeces of component rvc in common rvc 
    52          
     52 
    5353        //! Flag for a method that is used in the inference 
    5454        MixEF_METHOD method; 
    55          
     55 
    5656        //! Auxiliary function for use in constructors 
    5757        void build_est() { 
    58                 Array<const epdf*> epdfs ( n+1 ); 
    59                 for ( int i=0;i<Coms.length();i++ ) { 
     58                est = new eprod; 
     59                if ( n>0 ) { 
     60                        Array<const epdf*> epdfs ( n+1 ); 
     61                        for ( int i=0;i<Coms.length();i++ ) { 
    6062//                      it_assert_debug(!x,"MixEF::MixEF : Incompatible components"); 
    61                         epdfs ( i ) =& ( Coms ( i )->posterior() ); 
     63                                epdfs ( i ) =& ( Coms ( i )->posterior() ); 
     64                        } 
     65                        // last in the product is the weight 
     66                        epdfs ( n ) =& ( weights.posterior() ); 
     67                        est->set_parameters ( epdfs, false ); 
    6268                } 
    63                 // last in the product is the weight 
    64                 epdfs ( n ) =& ( weights.posterior() ); 
    65                 est = new eprod ( epdfs ); 
    6669        } 
    6770 
     
    6972        //! Full constructor 
    7073        MixEF ( const Array<BMEF*> &Coms0, const vec &alpha0 ) : 
    71                         BMEF (  ), n ( Coms0.length() ), Coms ( n ), 
    72                         weights (), method(QB) { 
    73         //      it_assert_debug ( n>0,"MixEF::MixEF : Empty Component list" ); 
     74                        BMEF ( ), n ( Coms0.length() ), Coms ( n ), 
     75                        weights (), method ( QB ) { 
     76                //      it_assert_debug ( n>0,"MixEF::MixEF : Empty Component list" ); 
    7477 
    7578                for ( int i=0;i<n;i++ ) {Coms ( i ) = ( BMEF* ) Coms0 ( i )->_copy_();} 
     
    7982        MixEF () : 
    8083                        BMEF ( ), n ( 0 ), Coms ( 0 ), 
    81                         weights (),method(QB) {build_est();} 
     84                        weights (),method ( QB ) {build_est();} 
    8285        //! Copy constructor 
    83         MixEF(const MixEF &M2): BMEF ( ), n ( M2.n ), Coms ( n ), 
    84                    weights ( M2.weights ), method(M2.method) { 
    85         //      it_assert_debug ( n>0,"MixEF::MixEF : Empty Component list" ); 
     86        MixEF ( const MixEF &M2 ) : BMEF ( ), n ( M2.n ), Coms ( n ), 
     87                        weights ( M2.weights ), method ( M2.method ) { 
     88                //      it_assert_debug ( n>0,"MixEF::MixEF : Empty Component list" ); 
    8689 
    87                            for ( int i=0;i<n;i++ ) {Coms ( i ) = M2.Coms ( i )->_copy_();} 
    88                            build_est(); 
    89                    } 
     90                for ( int i=0;i<n;i++ ) {Coms ( i ) = M2.Coms ( i )->_copy_();} 
     91                build_est(); 
     92        } 
    9093        //! Initializing the mixture by a random pick of centroids from data 
    9194        //! \param Com0 Initial component - necessary to determine its type. 
     
    108111        emix* epredictor() const; 
    109112        //! Flatten the density as if it was not estimated from the data 
    110         void flatten(const BMEF* M2); 
     113        void flatten ( const BMEF* M2 ); 
    111114        //! Access function 
    112         BMEF* _Coms(int i){return Coms(i);} 
    113          
     115        BMEF* _Coms ( int i ) {return Coms ( i );} 
     116 
    114117        //!Set which method is to be used 
    115         void set_method(MixEF_METHOD M){method=M;} 
     118        void set_method ( MixEF_METHOD M ) {method=M;} 
    116119}; 
    117120