root/bdm/stat/emix.cpp @ 165

Revision 165, 1.6 kB (checked in by smidl, 16 years ago)

Switch from eprod to mprod, merger devel

  • Property svn:eol-style set to native
Line 
1#include "emix.h"
2
3using namespace itpp;
4
5void emix::set_parameters ( const vec &w0, const Array<epdf*> &Coms0 ) {
6        w = w0;
7        int i;
8        for ( i=0;i<w.length();i++ ) {
9                it_assert_debug ( rv.equal ( Coms0 ( i )->_rv() ),"RVs do not match!" );
10        }
11        Coms = Coms0;
12}
13
14vec emix::sample() const {
15        //Sample which component
16        vec cumDist = cumsum ( w );
17        double u0 = UniRNG.sample();
18
19        int i=0;
20        while ( ( cumDist ( i ) <u0 ) && ( i< ( w.length()-1 ) ) ) {i++;}
21
22        return Coms ( i )->sample();
23}
24
25mprod::mprod ( Array<mpdf*> mFacs, bool overlap) : mpdf ( RV(), RV() ), n ( mFacs.length() ), epdfs ( n ), mpdfs ( mFacs ), rvinds ( n ), rvcinrv ( n ), rvcinds ( n ) {
26                int i;
27                bool rvaddok;
28                // Create rv
29                for ( i = 0;i < n;i++ ) {
30                        rvaddok=rv.add ( mpdfs ( i )->_rv() ); //add rv to common rvs.
31                        // If rvaddok==false, mpdfs overlap => assert error.
32                        it_assert_debug(rvaddok||overlap,"mprod::mprod() input mpdfs overlap in rv!");
33                        epdfs ( i ) = & ( mpdfs ( i )->_epdf() ); // add pointer to epdf
34                };
35                // Create rvc
36                for ( i = 0;i < n;i++ ) {
37                        rvc.add ( mpdfs ( i )->_rvc().subt ( rv ) ); //add rv to common rvs.
38                };
39               
40                independent = true;
41                //test rvc of mpdfs and fill rvinds
42                for ( i = 0;i < n;i++ ) {
43                        // find ith rv in common rv
44                        rvinds ( i ) = mpdfs ( i )->_rv().dataind ( rv );
45                        // find ith rvc in common rv
46                        rvcinrv ( i ) = mpdfs ( i )->_rvc().dataind ( rv );
47                        // find ith rvc in common rv
48                        rvcinds ( i ) = mpdfs ( i )->_rvc().dataind ( rvc );
49                        //
50                        if ( rvcinds ( i ).length() >0 ) {independent = false;}
51                        if ( rvcinds ( i ).length() >0 ) {independent = false;}
52                }
53        };
Note: See TracBrowser for help on using the browser.