Changeset 477 for library/tests/emix_test.cpp
- Timestamp:
- 08/05/09 14:40:03 (15 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
library/tests/emix_test.cpp
r461 r477 9 9 using std::endl; 10 10 11 double normcoef ( const epdf* ep, const vec &xb, const vec &yb, int Ngr=100 ) {12 mat PPdf ( Ngr +1,Ngr+1 );11 double normcoef ( const epdf* ep, const vec &xb, const vec &yb, int Ngr = 100 ) { 12 mat PPdf ( Ngr + 1, Ngr + 1 ); 13 13 vec rgr ( 2 ); 14 14 15 int i =0,j=0;16 double xstep = ( xb ( 1 )-xb ( 0 ) ) /Ngr;17 double ystep = ( yb ( 1 )-yb ( 0 ) ) /Ngr;15 int i = 0, j = 0; 16 double xstep = ( xb ( 1 ) - xb ( 0 ) ) / Ngr; 17 double ystep = ( yb ( 1 ) - yb ( 0 ) ) / Ngr; 18 18 19 for ( double x=xb ( 0 );x<=xb ( 1 );x+= xstep,i++ ) { 20 rgr ( 0 ) =x;j=0; 21 for ( double y=yb ( 0 );y<=yb ( 1 );y+=ystep,j++ ) { 22 rgr ( 1 ) =y; 23 PPdf ( i,j ) =exp ( ep->evallog ( rgr ) ); 19 for ( double x = xb ( 0 ); x <= xb ( 1 ); x += xstep, i++ ) { 20 rgr ( 0 ) = x; 21 j = 0; 22 for ( double y = yb ( 0 ); y <= yb ( 1 ); y += ystep, j++ ) { 23 rgr ( 1 ) = y; 24 PPdf ( i, j ) = exp ( ep->evallog ( rgr ) ); 24 25 } 25 26 } … … 32 33 RV x ( "{x }" ); 33 34 RV y ( "{y }" ); 34 RV xy=concat(x,y); 35 36 enorm<ldmat> E1; E1.set_rv ( xy ); 37 38 E1.set_parameters( "1.00054 1.0455" , mat ( "0.740142 -0.259015; -0.259015 1.0302" )); 39 enorm<ldmat> E2;E2.set_rv ( xy ); 40 E2.set_parameters( "-1.2 -0.1" , mat ( "1 0.4; 0.4 0.5" )); 35 RV xy = concat ( x, y ); 41 36 42 Array<epdf*> A1(1); 43 A1(0) = &E1; 44 45 emix M1; M1.set_rv(xy); 46 M1.set_parameters(vec("1"), A1, false); 47 cout << "======== test if ARX and emix with one ARX are the same ==="<<endl; 48 49 epdf* Mm = M1.marginal(y); 50 epdf* Am = E1.marginal(y); 51 mpdf* Mc = M1.condition(y); 52 mpdf* Ac = E1.condition(y); 53 54 cout << *((mlnorm<ldmat>*)Ac) <<endl; 55 56 cout << "Mix marg at 0: " << Mm->evallog(vec_1(0.0)) <<endl; 57 cout << "ARX marg at 0: " << Am->evallog(vec_1(0.0)) <<endl; 58 cout << "Mix cond at 0,0: " << Mc->evallogcond(vec_1(0.0),vec_1(0.0)) <<endl; 59 cout << "ARX cond at 0,0: " << Ac->evallogcond(vec_1(0.0),vec_1(0.0)) <<endl; 60 61 cout << "======== Mixture with two components ==="<<endl; 62 Array<epdf*> A2(2); 63 A2(0) = &E1; 64 A2(1) = &E2; 65 66 emix M2; M2.set_rv(xy); 67 M2.set_parameters(vec("1"), A2, false); 68 69 70 cout << "Mixture normalization: " << normcoef(&M2, vec("-3 3 "), vec("-3 3 ")) <<endl; 71 72 int N=3; 37 enorm<ldmat> E1; 38 E1.set_rv ( xy ); 39 40 E1.set_parameters ( "1.00054 1.0455" , mat ( "0.740142 -0.259015; -0.259015 1.0302" ) ); 41 enorm<ldmat> E2; 42 E2.set_rv ( xy ); 43 E2.set_parameters ( "-1.2 -0.1" , mat ( "1 0.4; 0.4 0.5" ) ); 44 45 Array<epdf*> A1 ( 1 ); 46 A1 ( 0 ) = &E1; 47 48 emix M1; 49 M1.set_rv ( xy ); 50 M1.set_parameters ( vec ( "1" ), A1, false ); 51 cout << "======== test if ARX and emix with one ARX are the same ===" << endl; 52 53 epdf* Mm = M1.marginal ( y ); 54 epdf* Am = E1.marginal ( y ); 55 mpdf* Mc = M1.condition ( y ); 56 mpdf* Ac = E1.condition ( y ); 57 58 cout << * ( ( mlnorm<ldmat>* ) Ac ) << endl; 59 60 cout << "Mix marg at 0: " << Mm->evallog ( vec_1 ( 0.0 ) ) << endl; 61 cout << "ARX marg at 0: " << Am->evallog ( vec_1 ( 0.0 ) ) << endl; 62 cout << "Mix cond at 0,0: " << Mc->evallogcond ( vec_1 ( 0.0 ), vec_1 ( 0.0 ) ) << endl; 63 cout << "ARX cond at 0,0: " << Ac->evallogcond ( vec_1 ( 0.0 ), vec_1 ( 0.0 ) ) << endl; 64 65 cout << "======== Mixture with two components ===" << endl; 66 Array<epdf*> A2 ( 2 ); 67 A2 ( 0 ) = &E1; 68 A2 ( 1 ) = &E2; 69 70 emix M2; 71 M2.set_rv ( xy ); 72 M2.set_parameters ( vec ( "1" ), A2, false ); 73 74 75 cout << "Mixture normalization: " << normcoef ( &M2, vec ( "-3 3 " ), vec ( "-3 3 " ) ) << endl; 76 77 int N = 3; 73 78 vec ll ( N ); 74 79 vec ll2 ( N ); 75 mat Smp=M2.sample_m ( N ); 76 ll = M2.evallog_m(Smp); 77 78 vec Emu = sum ( Smp,2 ) /N; 79 mat Er = ( Smp*Smp.transpose() ) /N - outer_product ( Emu,Emu ); 80 mat Smp = M2.sample_m ( N ); 81 ll = M2.evallog_m ( Smp ); 80 82 81 cout << "original empirical mean: " <<Emu <<endl;82 cout << "original empirical variance: " <<Er <<endl;83 vec Emu = sum ( Smp, 2 ) / N; 84 mat Er = ( Smp * Smp.transpose() ) / N - outer_product ( Emu, Emu ); 83 85 84 shared_ptr<epdf> Mg(dynamic_cast<epdf *>(M2.marginal(y)));85 mpdf* Cn = (mpdf*)M2.condition ( x );86 cout << "original empirical mean: " << Emu << endl; 87 cout << "original empirical variance: " << Er << endl; 86 88 87 it_file it("emix_test.it");88 it << Name("Smp") << Smp;89 shared_ptr<epdf> Mg ( dynamic_cast<epdf *> ( M2.marginal ( y ) ) ); 90 mpdf* Cn = ( mpdf* ) M2.condition ( x ); 89 91 90 cout<< "marginal mean: " << Mg->mean() <<endl; 92 it_file it ( "emix_test.it" ); 93 it << Name ( "Smp" ) << Smp; 91 94 92 cout << "========== putting them back together ======= "<<endl; 95 cout << "marginal mean: " << Mg->mean() << endl; 96 97 cout << "========== putting them back together ======= " << endl; 93 98 mepdf mMg ( Mg ); 94 99 Array<mpdf*> AA ( 2 ); … … 97 102 mprod mEp ( AA ); 98 103 99 for ( int j=0; j<N; j++){100 ll2 (j)=mEp.evallogcond (Smp.get_col(j), vec ( 0 ));104 for ( int j = 0; j < N; j++ ) { 105 ll2 ( j ) = mEp.evallogcond ( Smp.get_col ( j ), vec ( 0 ) ); 101 106 } 102 it << Name ("ll") << ll;103 it << Name ("ll2") << ll2;104 105 107 it << Name ( "ll" ) << ll; 108 it << Name ( "ll2" ) << ll2; 109 110 106 111 }