Changeset 205 for bdm/estim/merger.h

Show
Ignore:
Timestamp:
11/10/08 15:40:30 (16 years ago)
Author:
smidl
Message:

merger posledni verze

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • bdm/estim/merger.h

    r198 r205  
    4343        //!Prior on the log-normal merging model 
    4444        double beta; 
     45        //! Projection to empirical density 
     46        eEmp eSmp; 
     47 
    4548public: 
    4649//!Default constructor 
    4750        merger ( const Array<mpdf*> &S ) : 
    4851                        compositepdf ( S ), epdf ( getrv ( false ) ), 
    49                         Mix ( Array<BMEF*> ( 0 ),vec ( 0 ) ), dls ( n ), rvzs ( n ), zdls ( n ) { 
     52                        Mix ( Array<BMEF*> ( 0 ),vec ( 0 ) ), dls ( n ), rvzs ( n ), zdls ( n ), eSmp(rv,0) { 
    5053                RV ztmp; 
    5154                // Extend rv by rvc! 
     
    6871        } 
    6972//! Set internal parameters used in approximation 
    70         void set_parameters ( double beta0, int Ns0, int Nc0 ) {        beta=beta0;Ns=Ns0;Nc=Nc0;} 
     73        void set_parameters ( double beta0, int Ns0, int Nc0 ) {beta=beta0;Ns=Ns0;Nc=Nc0;eSmp.set_n(Ns0,false);} 
    7174//!Initialize the proposal density. This function must be called before merge()! 
    7275        void init() { ////////////// NOT FINISHED 
     
    9093                return Mix.logpred ( dtf ); 
    9194        } 
    92         vec mean() const {return Mix._epdf().mean();} 
     95        vec mean() const { 
     96                const Vec<double> &w = eSmp._w(); 
     97                const Array<vec> &S = eSmp._samples(); 
     98                vec tmp=zeros ( rv.count() );  
     99                for ( int i=0; i<Ns; i++ ) { 
     100                        tmp+=w ( i ) *S ( i ); 
     101                } 
     102                return tmp; 
     103        } 
     104        mat variance() const { 
     105                const vec &w = eSmp._w(); 
     106                const Array<vec> &S = eSmp._samples(); 
     107                 
     108                vec mea = mean();  
     109                 
     110                cout << sum(w) << "," << w*w <<endl; 
     111                 
     112                mat Tmp=zeros(rv.count(), rv.count()); 
     113                for ( int i=0; i<Ns; i++ ) { 
     114                        Tmp+=w ( i ) *outer_product(S ( i ), S(i)); 
     115                } 
     116                return Tmp-outer_product(mea,mea); 
     117        } 
    93118//! for future use 
    94119        virtual ~merger() { 
     
    101126//! Access function 
    102127        MixEF& _Mix() {return Mix;} 
     128//! Access function 
     129        eEmp& _Smp() {return eSmp;} 
    103130}; 
    104131