// // Linear least squares fit. // // - Given n points in x and y arrays. // - Slope returned. // // This version makes two passes over each data set. // // 27-Oct-1999 tvb // #include double LineFit (long n, double *x, double *y) { long i; double dx, dy; double Sdx2, Sdxdy; double xmean, ymean; double _mean (double *x, long n); xmean = _mean(x, n); ymean = _mean(y, n); Sdx2 = Sdxdy = 0.0; for (i = 0; i < n; i += 1) { dx = x[i] - xmean; dy = y[i] - ymean; Sdx2 += dx * dx; Sdxdy += dx * dy; } return (Sdx2 == 0.0) ? 0.0 : (Sdxdy / Sdx2); } double _mean (double *x, long n) { long i; double sum; sum = 0.0; for (i = 0; i < n; i += 1) { sum += x[i]; } return (sum / n); }