#pragma once #include #include /* Parameters for bivariate * gaussian PDF */ struct par { double x0; // x mean double y0; // y mean double sigma_x; // x standard dev double sigma_y; // y standard dev double rho; // correlation: cov(x,y)/σx⋅σy }; /* A sample of N 2D points is an * N×2 matrix, with vectors as rows. */ typedef struct { struct par p; gsl_matrix *data; } sample_t; /* Create a sample of `n` points */ sample_t* sample_t_alloc(size_t n, struct par p); /* Delete a sample */ void sample_t_free(sample_t *x); /* `generate_normal(r, n, p)` will create * a sample of `n` points, distributed * according to a bivariate gaussian distribution * of parameters `p`. */ sample_t* generate_normal(gsl_rng *r, size_t n, struct par *p);