shared_ptr<arma::mat> mean_matrix(const ExampleIds& example_ids) { auto n_rows = param_matrices[0]->n_rows; auto n_cols = example_ids.size(); shared_ptr<arma::mat> mean_mat( new arma::mat(n_rows, n_cols) ); arma::uword ind = 0; for(auto j : example_ids) { for(arma::uword i=0; i<n_rows; ++i) { // TODO inline? (*mean_mat)(i, ind) = mean(i, j); } ++ind; } return mean_mat; }
arma::mat joint_transition_2moment(int j1, int k1, int j2, int k2,Rcpp::List eigen_decomp, double interval_len){ double t=interval_len; arma::cx_colvec v=Rcpp::as<arma::cx_colvec>(eigen_decomp["values"]); arma::mat Q=Rcpp::as<arma::mat>(eigen_decomp["rate"]); int size=v.n_elem; arma::mat mean_mat=arma::zeros<arma::mat>(size,size); arma::cx_mat out(size,size); if(j1==j2&k1==k2){ arma::mat regist_matrix=arma::zeros<arma::mat>(size,size); regist_matrix(j1,k1)=1; mean_mat=joint_mean_markov_jumps_cpp(eigen_decomp,regist_matrix, t); } for(int a = 0; a < size; a++){ for(int b = 0; b < size; b++){ out(a,b)=mean_mat(a,b)+Q(j1,k1)*Q(j2,k2)*(hobolth_fun(eigen_decomp, t, a,j1,k1,j2,k2,b)(0)+hobolth_fun(eigen_decomp, t, a,j2,k2,j1,k1,b)(0)); } } arma::mat real_out=arma::real(out); return(real_out); }