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