2 #include <gsl/gsl_multifit.h>
5 main (int argc, char **argv)
8 double xi, yi, ei, chisq;
10 gsl_vector *y, *w, *c;
14 fprintf (stderr,"usage: fit n < data\n");
20 X = gsl_matrix_alloc (n, 3);
21 y = gsl_vector_alloc (n);
22 w = gsl_vector_alloc (n);
24 c = gsl_vector_alloc (3);
25 cov = gsl_matrix_alloc (3, 3);
27 for (i = 0; i < n; i++)
29 int count = fscanf (stdin, "%lg %lg %lg",
34 fprintf (stderr, "error reading file\n");
38 printf ("%g %g +/- %g\n", xi, yi, ei);
40 gsl_matrix_set (X, i, 0, 1.0);
41 gsl_matrix_set (X, i, 1, xi);
42 gsl_matrix_set (X, i, 2, xi*xi);
44 gsl_vector_set (y, i, yi);
45 gsl_vector_set (w, i, 1.0/(ei*ei));
49 gsl_multifit_linear_workspace * work
50 = gsl_multifit_linear_alloc (n, 3);
51 gsl_multifit_wlinear (X, w, y, c, cov,
53 gsl_multifit_linear_free (work);
56 #define C(i) (gsl_vector_get(c,(i)))
57 #define COV(i,j) (gsl_matrix_get(cov,(i),(j)))
60 printf ("# best fit: Y = %g + %g X + %g X^2\n",
63 printf ("# covariance matrix:\n");
64 printf ("[ %+.5e, %+.5e, %+.5e \n",
65 COV(0,0), COV(0,1), COV(0,2));
66 printf (" %+.5e, %+.5e, %+.5e \n",
67 COV(1,0), COV(1,1), COV(1,2));
68 printf (" %+.5e, %+.5e, %+.5e ]\n",
69 COV(2,0), COV(2,1), COV(2,2));
70 printf ("# chisq = %g\n", chisq);
77 gsl_matrix_free (cov);