double sampleGaussian(double sigma, unsigned long int S) { /* static gsl_rng * r = NULL; if(r==NULL) { gsl_rng_env_setup(); r = gsl_rng_alloc (gsl_rng_default); } */ if (S!=0) { //gsl_rng_set(r, S); srand48(S); } if (sigma==0) return 0; //return gsl_ran_gaussian (r,sigma); return pf_ran_gaussian (sigma); }
// Generate a sample from the the pdf. pf_vector_t pf_pdf_gaussian_sample(pf_pdf_gaussian_t *pdf) { int i, j; pf_vector_t r; pf_vector_t x; // Generate a random vector for (i = 0; i < 3; i++) { //r.v[i] = gsl_ran_gaussian(pdf->rng, pdf->cd.v[i]); r.v[i] = pf_ran_gaussian(pdf->cd.v[i]); } for (i = 0; i < 3; i++) { x.v[i] = pdf->x.v[i]; for (j = 0; j < 3; j++) x.v[i] += pdf->cr.m[i][j] * r.v[j]; } return x; }