Added script front-end for primer-design code
[htsworkflow.git] / htswanalysis / MACS / lib / gsl / gsl-1.11 / doc / examples / fitting2.c
1 #include <stdio.h>
2 #include <gsl/gsl_multifit.h>
3
4 int
5 main (int argc, char **argv)
6 {
7   int i, n;
8   double xi, yi, ei, chisq;
9   gsl_matrix *X, *cov;
10   gsl_vector *y, *w, *c;
11
12   if (argc != 2)
13     {
14       fprintf (stderr,"usage: fit n < data\n");
15       exit (-1);
16     }
17
18   n = atoi (argv[1]);
19
20   X = gsl_matrix_alloc (n, 3);
21   y = gsl_vector_alloc (n);
22   w = gsl_vector_alloc (n);
23
24   c = gsl_vector_alloc (3);
25   cov = gsl_matrix_alloc (3, 3);
26
27   for (i = 0; i < n; i++)
28     {
29       int count = fscanf (stdin, "%lg %lg %lg",
30                           &xi, &yi, &ei);
31
32       if (count != 3)
33         {
34           fprintf (stderr, "error reading file\n");
35           exit (-1);
36         }
37
38       printf ("%g %g +/- %g\n", xi, yi, ei);
39       
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);
43       
44       gsl_vector_set (y, i, yi);
45       gsl_vector_set (w, i, 1.0/(ei*ei));
46     }
47
48   {
49     gsl_multifit_linear_workspace * work 
50       = gsl_multifit_linear_alloc (n, 3);
51     gsl_multifit_wlinear (X, w, y, c, cov,
52                           &chisq, work);
53     gsl_multifit_linear_free (work);
54   }
55
56 #define C(i) (gsl_vector_get(c,(i)))
57 #define COV(i,j) (gsl_matrix_get(cov,(i),(j)))
58
59   {
60     printf ("# best fit: Y = %g + %g X + %g X^2\n", 
61             C(0), C(1), C(2));
62
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);
71   }
72
73   gsl_matrix_free (X);
74   gsl_vector_free (y);
75   gsl_vector_free (w);
76   gsl_vector_free (c);
77   gsl_matrix_free (cov);
78
79   return 0;
80 }