root/bdm/stat/emix.cpp @ 175

Revision 175, 1.7 kB (checked in by smidl, 16 years ago)

mprod is now based on compositepdf

  • 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/sum(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
25// mprod::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//                      rvsinrv ( 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 ( rvcinrv ( i ).length() >0 ) {independent = false;}
51//                      if ( rvcinds ( i ).length() >0 ) {independent = false;}*/
52//              }
53//      };
Note: See TracBrowser for help on using the browser.