#include #include #include using namespace itpp; //These lines are needed for use of cout and endl using std::cout; using std::endl; int main() { RNG_randomize(); RV y ( "{y }","1" ); RV u1 ( "{u1 }","1" ); RV u2 ( "{u2 }","1" ); RV all = y; all.add ( u1 ); all.add ( u2 ); mlnorm f1 ( y , u1 ); mlnorm f2 ( y , u2 ); //Differneces in constant term are essential f1.set_parameters ( "0.4","1",mat ( "0.04" ) ); f2.set_parameters ( "0.2","-1",mat ( "0.08" ) ); Array A ( 2 ); A ( 0 ) =&f1; A ( 1 ) =&f2; merger M ( A ); enorm g0 ( all ); g0.set_parameters ( vec ( "1 -1 1" ),3*eye ( 3 ));// +1*ones ( 3,3 ) ); M.set_parameters ( 1.2,1000,1 ); int Ntrials=100; vec A1s ( Ntrials ); vec A2s ( Ntrials ); vec R1s ( Ntrials ); vec R2s ( Ntrials ); vec C1s ( Ntrials ); vec C2s ( Ntrials ); for ( int it=0;itpredictor ( all ); RV yu1 = y; yu1.add ( u1 ); RV yu2 = y; yu2.add ( u2 ); enorm* P1m= ( enorm* ) MP->marginal ( yu1 ); enorm* P2m= ( enorm* ) MP->marginal ( yu2 ); mlnorm* P1c= ( mlnorm* ) ( P1m->condition ( y ) ); mlnorm* P2c= ( mlnorm* ) ( P2m->condition ( y ) ); A1s(it) = P1c->_A()(0,0); A2s(it) = P2c->_A()(0,0); R1s(it) = P1c->_R()(0,0); R2s(it) = P2c->_R()(0,0); C1s(it) = P1c->_mu_const()(0); C2s(it) = P2c->_mu_const()(0); } double A1mean = sum(A1s)/Ntrials; double A2mean = sum(A2s)/Ntrials; double C1mean = sum(C1s)/Ntrials; double C2mean = sum(C2s)/Ntrials; double R1mean = sum(R1s)/Ntrials; double R2mean = sum(R2s)/Ntrials; cout << "A1: " << A1mean << " +- " << 2*(sum_sqr(A1s)/Ntrials-A1mean*A1mean) <