// Versatile Fitting Routine #include #include #include #include int OUTPUT=1; // Print output on screen (1 = yes; 0 = no) int ERRCOMP=0; // Set reduced Chi-Squared to unity (1 = yes; 0 = no) int dsmin(double **,double *,int,double,double (*func)(double *)); double **simplex(int,double *,double *); void simplex_free(double **,int); double parabolic_root(double,double,double,double); // Versafit fitting routine // // Inputs: // m: number of datapoints // n: number of parameters // a: parameters // da: expected spread in parameters // func: function to fit (Chi-squared function) // dchisq difference in Chi-squared // tol: tolerance // opt: options // - n: no output void versafit(int m,int n,double *a,double *da,double (*func)(double *),double dchisq,double tol,char *opt) { int i,j,k,l,nfunk,kmax=50; double chisqmin; double *b,*db; double **p,*y; double d[2],errcomp; // Decode options if (strchr(opt,'n')!=NULL) OUTPUT=0; if (strchr(opt,'e')!=NULL) ERRCOMP=1; // Intialize y y=(double *) malloc(sizeof(double) * (n+1)); if (dchisq>=0.) { // Compute simplex and minimize function p=simplex(n,a,da); nfunk=dsmin(p,y,n,tol,func); // Average parameters for (i=0;i