#include "shared_ptr.h" #include "stat/exp_family.h" #include "stat/emix.h" using namespace bdm; //These lines are needed for use of cout and endl using std::cout; using std::endl; double normcoef ( const epdf* ep,const vec &xb, const vec &yb, int Ngr=100 ) { mat PPdf ( Ngr+1,Ngr+1 ); vec rgr ( 2 ); int i=0,j=0; double xstep= ( xb ( 1 )-xb ( 0 ) ) /Ngr; double ystep= ( yb ( 1 )-yb ( 0 ) ) /Ngr; for ( double x=xb ( 0 );x<=xb ( 1 );x+= xstep,i++ ) { rgr ( 0 ) =x;j=0; for ( double y=yb ( 0 );y<=yb ( 1 );y+=ystep,j++ ) { rgr ( 1 ) =y; PPdf ( i,j ) =exp ( ep->evallog ( rgr ) ); } } return sumsum ( PPdf ) *xstep*ystep; } int main() { RNG_randomize(); RV x ( "{x }" ); RV y ( "{y }" ); RV xy=concat(x,y); enorm E1; E1.set_rv ( xy ); E1.set_parameters( "1.00054 1.0455" , mat ( "0.740142 -0.259015; -0.259015 1.0302" )); enorm E2;E2.set_rv ( xy ); E2.set_parameters( "-1.2 -0.1" , mat ( "1 0.4; 0.4 0.5" )); Array A1(1); A1(0) = &E1; emix M1; M1.set_rv(xy); M1.set_parameters(vec("1"), A1, false); cout << "======== test if ARX and emix with one ARX are the same ==="<*)Ac) <evallog(vec_1(0.0)) <evallog(vec_1(0.0)) <evallogcond(vec_1(0.0),vec_1(0.0)) <evallogcond(vec_1(0.0),vec_1(0.0)) < A2(2); A2(0) = &E1; A2(1) = &E2; emix M2; M2.set_rv(xy); M2.set_parameters(vec("1"), A2, false); cout << "Mixture normalization: " << normcoef(&M2, vec("-3 3 "), vec("-3 3 ")) < Mg(dynamic_cast(M2.marginal(y))); mpdf* Cn = (mpdf*)M2.condition ( x ); it_file it("emix_test.it"); it << Name("Smp") << Smp; cout<< "marginal mean: " << Mg->mean() < AA ( 2 ); AA ( 0 ) = Cn; AA ( 1 ) = &mMg; mprod mEp ( AA ); for (int j=0; j