25typedef Eigen::VectorXd Vect;
49void rnorm_gen(
int no,
double mean,
double sd, Vect& x,
int seed){
51 std::default_random_engine generator(seed);
52 std::normal_distribution<double> distribution (mean, sd);
54 for (
int i=0; i< x.size(); ++i){
55 x[i] = distribution(generator);
61void generate_ex_regression_constr(
size_t nb,
size_t no,
double& tau, MatrixXd& D, Vect& e, MatrixXd& Prec, MatrixXd& B, Vect& b, Vect& y){
65 std::cout <<
"For now only SUM-TO-ZERO constraints possible!!" << std::endl;
70 MatrixXd M = MatrixXd::Random(nb,nb);
71 Prec = M*M.transpose();
73 LLT<MatrixXd> lltOfA(Prec);
74 MatrixXd L = lltOfA.matrixL();
78 rnorm_gen(nb, 0.0, 1.0, z, seed);
81 b = L.triangularView<Lower>().solve(z);
84 MatrixXd V = lltOfA.solve(D.transpose());
86 MatrixXd U = W.inverse()*V.transpose();
88 b = b - U.transpose()*c;
92 B << Vect::Ones(no), MatrixXd::Random(no, nb-1);
96 double sd = 1/sqrt(exp(tau));
98 rnorm_gen(no, 0.0, sd, noise_vec, seed+1);
107void generate_ex_regression(
size_t nb,
size_t no,
double& tau, Eigen::MatrixXd& B, Vect& b, Vect& y){
109 std::cout <<
"generates random sample" << std::endl;
115 Vect B_random(no*(nb-1));
116 rnorm_gen(no, 0.0, 1, B_random, 2);
119 B_tmp << Vect::Ones(no), B_random;
123 Eigen::Map<Eigen::MatrixXd> tmp(B_tmp.data(), no,nb);
130 b = 2*(Vect::Random(nb) + Vect::Ones(nb));
133 double sd = 1/sqrt(exp(tau));
136 rnorm_gen(no, mean, sd, noise_vec, 4);
140 std::cout <<
"b : " << b.transpose() << std::endl;
154void generate_ex_spatial_constr(
size_t ns,
size_t nb,
size_t no, Vect& theta, MatrixXd& Qs, SpMat& Ax, MatrixXd& Ds, Vect& e, MatrixXd& Prec, MatrixXd& B, Vect& b, Vect& u, Vect& y){
158 std::cout <<
"For now only SUM-TO-ZERO constraints possible!!" << std::endl;
164 MatrixXd M = MatrixXd::Random(nb,nb);
165 Prec = M*M.transpose();
167 LLT<MatrixXd> lltOfA(Prec);
168 MatrixXd L_b = lltOfA.matrixL();
172 rnorm_gen(nb, 0.0, 1.0, z_b, seed);
175 b = L_b.triangularView<Lower>().solve(z_b);
180 B << Vect::Ones(no), MatrixXd::Random(no, nb-1);
185 LLT<MatrixXd> lltOfQ(Qs);
186 MatrixXd L_s = lltOfQ.matrixL();
189 rnorm_gen(nb, 0.0, 1.0, z_s, seed+1);
192 u = L_s.triangularView<Lower>().solve(z_s);
194 MatrixXd V = lltOfQ.solve(Ds.transpose());
196 MatrixXd U = W.inverse()*V.transpose();
198 u = u - U.transpose()*c;
199 std::cout <<
"Ds*u = " << Ds*u << std::endl;
203 double sd = 1/sqrt(exp(theta[0]));
205 rnorm_gen(no, 0.0, sd, noise_vec, seed+2);
211 y = Ax*x + noise_vec;
217void generate_ex_spatial_temporal_constr(
size_t ns,
size_t nt,
size_t nb,
size_t no, Vect& theta, MatrixXd& Qst, SpMat& Ax, MatrixXd& Dst, Vect& e, MatrixXd& Prec, Vect& b, Vect& u, Vect& y){
221 std::cout <<
"For now only SUM-TO-ZERO constraints possible!!" << std::endl;
227 MatrixXd M = MatrixXd::Random(nb,nb);
228 Prec = M*M.transpose();
230 LLT<MatrixXd> lltOfA(Prec);
231 MatrixXd L_b = lltOfA.matrixL();
235 rnorm_gen(nb, 0.0, 1.0, z_b, seed);
238 b = L_b.triangularView<Lower>().solve(z_b);
244 LLT<MatrixXd> lltOfQ(Qst);
245 MatrixXd L_st = lltOfQ.matrixL();
248 rnorm_gen(nb, 0.0, 1.0, z_st, seed+1);
251 u = L_st.triangularView<Lower>().solve(z_st);
253 MatrixXd V = lltOfQ.solve(Dst.transpose());
255 MatrixXd U = W.inverse()*V.transpose();
257 u = u - U.transpose()*c;
258 if((Dst*u).norm() > 1e-10){
259 std::cout <<
"Dst*u = " << Dst*u << std::endl;
260 std::cout <<
"This should be zero?!" << std::endl;
266 double sd = 1/sqrt(exp(theta[0]));
268 rnorm_gen(no, 0.0, sd, noise_vec, seed+2);
274 y = Ax*x + noise_vec;