#include #include #include using namespace itpp; //These lines are needed for use of cout and endl using std::cout; using std::endl; void disp(const vec &tmu, const mat &tR,const mat &Smp){ int N = Smp.cols(); vec Emu = Smp*ones(N) /N ; mat Er = (Smp*Smp.transpose())/N - outer_product(Emu,Emu); cout << "True mu:" << tmu < eN(x); eN.set_parameters(mu0,R); mat Smp = eN.sample(N); disp(mu0,R.to_mat(),Smp); cout << "====== MlNorm ====== " < ML(x,x); ML.set_parameters(I,R); Smp = ML.samplecond(mu0,lik,N); disp(mu0,R.to_mat(),Smp); cout << "====== EGamma ====== " < Coms(2); Coms(0) = &eG; Coms(1) = &eN; eMix.set_parameters(vec_2(0.5,0.5), Coms); vec smp = eMix.sample(); Smp = eMix.sampleN(N); disp(eMix.mean(),zeros(2),Smp); cout << "======= MEpdf ======== " << endl; mepdf meMix(eMix); Smp = meMix.samplecond(mu0,lik,N); disp(eMix.mean(),zeros(2),Smp); cout << "======= MMix ======== " << endl; mmix mMix(x,x); Array mComs(2); mComs(0) = &mG; eN.set_mu(vec_2(0.0,0.0)); mepdf mEnorm(eN); mComs(1) = &mEnorm; mMix.set_parameters(vec_2(0.5,0.5),mComs); Smp = mMix.samplecond(mu0,lik,N); disp(mMix._epdf().mean(),zeros(2),Smp); cout << "======= EProd ======== " << endl; // we have to change eG.rv to y egamma eGy(x); eGy.set_parameters(a,b); //create array Array A(2); mepdf meN(eN); mepdf meG(eGy); A(0) = &meN; A(1) = &meG; mprod eP(A); mat epV=zeros(4,4); epV.set_submatrix(0,0,V0); epV.set_submatrix(2,2,diag(g_var)); vec v0=vec(0); Smp = eP.samplecond(v0,lik,N); disp(concat(eN.mean(),eGy.mean()), epV,Smp); //Exit program: return 0; }