Esempio n. 1
0
static void regression_analysis(int n,bool bXYdy,real *x,real **val)
{
  real S,chi2,a,b,da,db,r=0;

  printf("Fitting data to a function f(x) = ax + b\n");
  printf("Minimizing residual chi2 = Sum_i w_i [f(x_i) - y_i]2\n");
  printf("Error estimates will be given if w_i (sigma) values are given\n");
  printf("(use option -xydy).\n\n");
  if (bXYdy) 
    lsq_y_ax_b_error(n,x,val[0],val[1],&a,&b,&da,&db,&r,&S);
  else
    lsq_y_ax_b(n,x,val[0],&a,&b,&r,&S);
  chi2 = sqr((n-2)*S);
  printf("Chi2                    = %g\n",chi2);
  printf("S (Sqrt(Chi2/(n-2))     = %g\n",S);
  printf("Correlation coefficient = %.1f%%\n",100*r);
  printf("\n");
  if (bXYdy) {
    printf("a    = %g +/- %g\n",a,da);
    printf("b    = %g +/- %g\n",b,db);
  }
  else {
    printf("a    = %g\n",a);
    printf("b    = %g\n",b);
  }
}
Esempio n. 2
0
static void regression_analysis(int n, gmx_bool bXYdy,
                                real *x, int nset, real **val)
{
    real S, chi2, a, b, da, db, r = 0;
    int  ok;

    if (bXYdy || (nset == 1))
    {
        printf("Fitting data to a function f(x) = ax + b\n");
        printf("Minimizing residual chi2 = Sum_i w_i [f(x_i) - y_i]2\n");
        printf("Error estimates will be given if w_i (sigma) values are given\n");
        printf("(use option -xydy).\n\n");
        if (bXYdy)
        {
            if ((ok = lsq_y_ax_b_error(n, x, val[0], val[1], &a, &b, &da, &db, &r, &S)) != estatsOK)
            {
                gmx_fatal(FARGS, "Error fitting the data: %s",
                          gmx_stats_message(ok));
            }
        }
        else
        {
            if ((ok = lsq_y_ax_b(n, x, val[0], &a, &b, &r, &S)) != estatsOK)
            {
                gmx_fatal(FARGS, "Error fitting the data: %s",
                          gmx_stats_message(ok));
            }
        }
        chi2 = sqr((n-2)*S);
        printf("Chi2                    = %g\n", chi2);
        printf("S (Sqrt(Chi2/(n-2))     = %g\n", S);
        printf("Correlation coefficient = %.1f%%\n", 100*r);
        printf("\n");
        if (bXYdy)
        {
            printf("a    = %g +/- %g\n", a, da);
            printf("b    = %g +/- %g\n", b, db);
        }
        else
        {
            printf("a    = %g\n", a);
            printf("b    = %g\n", b);
        }
    }
    else
    {
        double chi2, *a, **xx, *y;
        int    i, j;

        snew(y, n);
        snew(xx, nset-1);
        for (j = 0; (j < nset-1); j++)
        {
            snew(xx[j], n);
        }
        for (i = 0; (i < n); i++)
        {
            y[i] = val[0][i];
            for (j = 1; (j < nset); j++)
            {
                xx[j-1][i] = val[j][i];
            }
        }
        snew(a, nset-1);
        chi2 = multi_regression(NULL, n, y, nset-1, xx, a);
        printf("Fitting %d data points in %d sets\n", n, nset-1);
        printf("chi2 = %g\n", chi2);
        printf("A =");
        for (i = 0; (i < nset-1); i++)
        {
            printf("  %g", a[i]);
            sfree(xx[i]);
        }
        printf("\n");
        sfree(xx);
        sfree(y);
        sfree(a);
    }
}