|
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 |
}
|