/* chronyd/chronyc - Programs for keeping computer clocks accurate. ********************************************************************** * Copyright (C) Richard P. Curnow 1997-2002 * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ********************************************************************** ======================================================================= Header file for regression routine(s) */ #ifndef GOT_REGRESS_H #define GOT_REGRESS_H extern void RGR_WeightedRegression (double *x, /* independent variable */ double *y, /* measured data */ double *w, /* weightings (large => data less reliable) */ int n, /* number of data points */ /* And now the results */ double *b0, /* estimated y axis intercept */ double *b1, /* estimated slope */ double *s2, /* estimated variance (weighted) of data points */ double *sb0, /* estimated standard deviation of intercept */ double *sb1 /* estimated standard deviation of slope */ /* Could add correlation stuff later if required */ ); /* Return the weighting to apply to the standard deviation to get a given size of confidence interval assuming a T distribution */ extern double RGR_GetTCoef(int dof); /* Return the value to apply to the variance to make an upper one-sided test assuming a chi-square distribution. */ extern double RGR_GetChi2Coef(int dof); /* Maximum ratio of number of points used for runs test to number of regression points */ #define REGRESS_RUNS_RATIO 2 /* Minimum number of samples for regression */ #define MIN_SAMPLES_FOR_REGRESS 3 /* Return a status indicating whether there were enough points to carry out the regression */ extern int RGR_FindBestRegression (double *x, /* independent variable */ double *y, /* measured data */ double *w, /* weightings (large => data less reliable) */ int n, /* number of data points */ int m, /* number of extra samples in x and y arrays (negative index) which can be used to extend runs test */ int min_samples, /* minimum number of samples to be kept after changing the starting index to pass the runs test */ /* And now the results */ double *b0, /* estimated y axis intercept */ double *b1, /* estimated slope */ double *s2, /* estimated variance of data points */ double *sb0, /* estimated standard deviation of intercept */ double *sb1, /* estimated standard deviation of slope */ int *new_start, /* the new starting index to make the residuals pass the two tests */ int *n_runs, /* number of runs amongst the residuals */ int *dof /* degrees of freedom in statistics (needed to get confidence intervals later) */ ); int RGR_FindBestRobustRegression (double *x, double *y, int n, double tol, double *b0, double *b1, int *n_runs, int *best_start); int RGR_MultipleRegress (double *x1, /* first independent variable */ double *x2, /* second independent variable */ double *y, /* measured data */ int n, /* number of data points */ /* The results */ double *b2 /* estimated second slope */ ); /* Return the median value from an array */ extern double RGR_FindMedian(double *x, int n); #endif /* GOT_REGRESS_H */