36 ERRMSG(
"Give parameters: <width> <n> <lxmin> <lxmax> <dlx> <fwhm> <dim>");
39 const double width = atof(argv[1]);
40 const int n = atoi(argv[2]);
41 const double lxmin = atof(argv[3]);
42 const double lxmax = atof(argv[4]);
43 const double dlx = atoi(argv[5]);
44 const double fwhm = atof(argv[6]);
45 const int dim = atoi(argv[7]);
48 gsl_vector *c = gsl_vector_alloc((
size_t) dim);
49 gsl_matrix *cov = gsl_matrix_alloc((
size_t) dim, (
size_t) dim);
50 gsl_multifit_linear_workspace *work
51 = gsl_multifit_linear_alloc((
size_t) n, (
size_t) dim);
52 gsl_matrix *X = gsl_matrix_alloc((
size_t) n, (
size_t) dim);
53 gsl_vector *xvec = gsl_vector_alloc((
size_t) n);
54 gsl_vector *yvec = gsl_vector_alloc((
size_t) n);
55 gsl_vector *yfit = gsl_vector_alloc((
size_t) n);
58 for (
double lx = lxmin; lx <= lxmax; lx += dlx) {
65 for (
double phi = 0; phi < 2 * M_PI; phi += M_PI / 180) {
68 double var = 0, var2 = 0, wsum = 0;
71 for (
int i = 0; i < n; i++) {
72 gsl_vector_set(xvec, (
size_t) i, width / (n - 1.0) * i - width / 2.);
73 gsl_vector_set(yvec, (
size_t) i,
74 sin(2 * M_PI / lx * gsl_vector_get(xvec, (
size_t) i) +
77 double w = gsl_ran_gaussian_pdf(gsl_vector_get(xvec, (
size_t) i),
79 gsl_vector_set(yvec, (
size_t) i,
80 w * gsl_vector_get(yvec, (
size_t) i));
85 gsl_vector_scale(yvec, 1 / wsum);
88 for (
int i = 0; i < n; i++)
89 for (
int i2 = 0; i2 < dim; i2++)
90 gsl_matrix_set(X, (
size_t) i, (
size_t) i2,
91 pow(gsl_vector_get(xvec, (
size_t) i), 1. * i2));
92 gsl_multifit_linear(X, yvec, c, cov, &chisq, work);
93 for (
int i = 0; i < n; i++)
94 gsl_vector_set(yfit, (
size_t) i, gsl_vector_get(yvec, (
size_t) i)
95 - gsl_poly_eval(c->data, (
int) dim,
96 gsl_vector_get(xvec, (
size_t) i)));
99 for (
int i = 0; i < n; i++) {
100 var += gsl_pow_2(gsl_vector_get(yfit, (
size_t) i)) / (double) n;
101 var2 += gsl_pow_2(gsl_vector_get(yvec, (
size_t) i)) / (double) n;
108 printf(
"%g %g\n", lx, 100 * vmean / vmean2);
#define ERRMSG(...)
Print error message and quit program.
AIRS Code Collection library declarations.
int main(int argc, char *argv[])