## A program to fit straight lines to data

`#include <math.h>#include <stdio.h>#include <assert.h>/*  Michael Ashley / UNSW / 06-Jun-2004*/void linfit(double x[], double y[], double sy[], int n, 	    double *a, double *b, double *sa, double *sb) {  /*    Fits a straight line y = a + bx to the n data pairs (x,y).    sy is the standard deviation of y. The standard deviations    of a and b are also returned.  */  double S=0.0, Sx=0.0, Sy=0.0, Stt=0.0, Sty=0.0;  double t;  int i;  assert(n > 1);  for (i = 0; i < n; i++) {    double ss;    ss = sy[i]*sy[i];    S += 1/ss;    Sx += x[i]/ss;    Sy += y[i]/ss;  }  for (i = 0; i < n; i++) {    t = (x[i]-Sx/S)/sy[i];    Stt += t*t;    Sty += t*y[i]/sy[i];  }  *b = Sty / Stt;  *a = (Sy - Sx* *b)/S;  *sa = sqrt((1+(Sx*Sx)/(S*Stt))/S);  *sb = sqrt(1/Stt);}int main(void) {  double x[3]={1.0, 2.0, 3.0};  double y[3]={1.1, 2.3, 3.5};  double sy[3]={0.01, 0.01, 0.01};  double a, b, sa, sb;    linfit(x, y, sy, (sizeof x)/(sizeof x[0]), &a, &b, &sa, &sb);  printf("y = (%lf+/-%lf) + (%lf+/-%lf) * x\n", a, sa, b, sb);  return 0;}`