Blame doc/examples/fitting.c

Packit 67cb25
#include <stdio.h>
Packit 67cb25
#include <gsl/gsl_fit.h>
Packit 67cb25
Packit 67cb25
int
Packit 67cb25
main (void)
Packit 67cb25
{
Packit 67cb25
  int i, n = 4;
Packit 67cb25
  double x[4] = { 1970, 1980, 1990, 2000 };
Packit 67cb25
  double y[4] = {   12,   11,   14,   13 };
Packit 67cb25
  double w[4] = {  0.1,  0.2,  0.3,  0.4 };
Packit 67cb25
Packit 67cb25
  double c0, c1, cov00, cov01, cov11, chisq;
Packit 67cb25
Packit 67cb25
  gsl_fit_wlinear (x, 1, w, 1, y, 1, n, 
Packit 67cb25
                   &c0, &c1, &cov00, &cov01, &cov11, 
Packit 67cb25
                   &chisq);
Packit 67cb25
Packit 67cb25
  printf ("# best fit: Y = %g + %g X\n", c0, c1);
Packit 67cb25
  printf ("# covariance matrix:\n");
Packit 67cb25
  printf ("# [ %g, %g\n#   %g, %g]\n", 
Packit 67cb25
          cov00, cov01, cov01, cov11);
Packit 67cb25
  printf ("# chisq = %g\n", chisq);
Packit 67cb25
Packit 67cb25
  for (i = 0; i < n; i++)
Packit 67cb25
    printf ("data: %g %g %g\n", 
Packit 67cb25
                   x[i], y[i], 1/sqrt(w[i]));
Packit 67cb25
Packit 67cb25
  printf ("\n");
Packit 67cb25
Packit 67cb25
  for (i = -30; i < 130; i++)
Packit 67cb25
    {
Packit 67cb25
      double xf = x[0] + (i/100.0) * (x[n-1] - x[0]);
Packit 67cb25
      double yf, yf_err;
Packit 67cb25
Packit 67cb25
      gsl_fit_linear_est (xf, 
Packit 67cb25
                          c0, c1, 
Packit 67cb25
                          cov00, cov01, cov11, 
Packit 67cb25
                          &yf, &yf_err);
Packit 67cb25
Packit 67cb25
      printf ("fit: %g %g\n", xf, yf);
Packit 67cb25
      printf ("hi : %g %g\n", xf, yf + yf_err);
Packit 67cb25
      printf ("lo : %g %g\n", xf, yf - yf_err);
Packit 67cb25
    }
Packit 67cb25
  return 0;
Packit 67cb25
}