-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
285 additions
and
278 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,85 +1,76 @@ | ||
/* fitxyee.c */ | ||
#include <math.h> | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <string.h> | ||
#define PRECISION double | ||
//#define NR_ACC 1e-7 | ||
#define NR_ACC 1e-15 | ||
#define NR_EPS 5e-15 | ||
#define FOURFORMAT "%lf %lf %lf %lf" | ||
#define TWOFORMAT "%lf %lf" | ||
|
||
#include "hc.h" | ||
#define NR_ACC (HC_EPS_PREC*10) | ||
#define NR_EPS HC_EPS_PREC | ||
/* | ||
fit a line through x y data with uncertainties in both x and y | ||
$Id: fitxyee.c,v 1.2 2005/07/04 16:47:43 becker Exp becker $ | ||
From Numerical Recipes in C, p.668 | ||
Copyright Numerical Recipes in C, p.668, do not distribute without | ||
permission | ||
major modifications: | ||
minor modifications: | ||
- using data structure instead of x,y,sigx,sigy | ||
- removed global variables and put those into fit structure | ||
*/ | ||
static PRECISION _tmp_sqrarg; | ||
#define SQUARE(a) ((((_tmp_sqrarg=(a))) == 0.0) ? (0.0) : (_tmp_sqrarg*_tmp_sqrarg)) | ||
#define SIGN(a,b) ((b) >= 0.0 ? fabs(a) : -fabs(a)) | ||
static PRECISION _tmp_maxarg1,_tmp_maxarg2; | ||
#define FMAX(a,b) (_tmp_maxarg1=(a),_tmp_maxarg2=(b),(_tmp_maxarg1) > (_tmp_maxarg2) ?\ | ||
static HC_PREC _tmp_sqrarg; | ||
#define NR_SQUARE(a) ((((_tmp_sqrarg=(a))) == 0.0) ? (0.0) : (_tmp_sqrarg*_tmp_sqrarg)) | ||
#define NR_SIGN(a,b) ((b) >= 0.0 ? fabs(a) : -fabs(a)) | ||
static HC_PREC _tmp_maxarg1,_tmp_maxarg2; | ||
#define NR_FMAX(a,b) (_tmp_maxarg1=(a),_tmp_maxarg2=(b),(_tmp_maxarg1) > (_tmp_maxarg2) ? \ | ||
(_tmp_maxarg1) : (_tmp_maxarg2)) | ||
/* | ||
data structure | ||
*/ | ||
struct dp{ | ||
PRECISION x,y,sigx,sigy; | ||
struct nr_dp{ | ||
HC_PREC x,y,sigx,sigy; | ||
}; | ||
/* | ||
fit structure | ||
*/ | ||
struct fits{ | ||
struct nr_fits{ | ||
int nn; | ||
PRECISION *xx,*yy,*sx,*sy,*ww,aa,offs; | ||
HC_PREC *xx,*yy,*sx,*sy,*ww,aa,offs; | ||
}; | ||
|
||
|
||
|
||
void fit(struct dp *, int, PRECISION *, PRECISION *, PRECISION *, PRECISION *, PRECISION *, PRECISION *); | ||
void fitexy(struct dp *, int, PRECISION *, PRECISION *, PRECISION *, PRECISION *, PRECISION *, PRECISION *); | ||
PRECISION brent(PRECISION, PRECISION, PRECISION, PRECISION (*)(void), struct fits *, PRECISION, PRECISION *); | ||
PRECISION chixy(PRECISION, struct fits *); | ||
PRECISION gammq(PRECISION, PRECISION); | ||
void gcf(PRECISION *, PRECISION, PRECISION, PRECISION *); | ||
void gser(PRECISION *, PRECISION, PRECISION, PRECISION *); | ||
void nrerror(char []); | ||
PRECISION *vector(long, long); | ||
int *ivector(long, long); | ||
unsigned char *cvector(long, long); | ||
unsigned long *lvector(long, long); | ||
PRECISION *dvector(long, long); | ||
PRECISION **matrix(long, long, long, long); | ||
PRECISION **dmatrix(long, long, long, long); | ||
int **imatrix(long, long, long, long); | ||
PRECISION **submatrix(PRECISION **, long, long, long, long, long, long); | ||
PRECISION **convert_matrix(PRECISION *, long, long, long, long); | ||
PRECISION ***f3tensor(long, long, long, long, long, long); | ||
void free_vector(PRECISION *, long, long); | ||
void free_ivector(int *, long, long); | ||
void free_cvector(unsigned char *, long, long); | ||
void free_lvector(unsigned long *, long, long); | ||
void free_dvector(PRECISION *, long, long); | ||
void free_matrix(PRECISION **, long, long, long, long); | ||
void free_dmatrix(PRECISION **, long, long, long, long); | ||
void free_imatrix(int **, long, long, long, long); | ||
void free_submatrix(PRECISION **, long, long, long, long); | ||
void free_convert_matrix(PRECISION **, long, long, long, long); | ||
void free_f3tensor(PRECISION ***, long, long, long, long, long, long); | ||
void avevar(struct dp *, unsigned long, PRECISION *, PRECISION *); | ||
void fitline(PRECISION *, PRECISION *, int, PRECISION *, int, PRECISION *, PRECISION *, PRECISION *, PRECISION *, PRECISION *, PRECISION *); | ||
void mnbrak(PRECISION *, PRECISION *, PRECISION *, PRECISION *, PRECISION *, PRECISION *, PRECISION (*)(void), struct fits *); | ||
PRECISION zbrent(PRECISION (*)(void), struct fits *, PRECISION, PRECISION, PRECISION); | ||
PRECISION gammln(PRECISION); | ||
int comparef(struct dp *, struct dp *); | ||
void nr_fit(struct nr_dp *, int, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *); | ||
void nr_fitexy(struct nr_dp *, int, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *); | ||
HC_PREC nr_brent(HC_PREC, HC_PREC, HC_PREC, HC_PREC (*)(void), struct nr_fits *, HC_PREC, HC_PREC *); | ||
HC_PREC nr_chixy(HC_PREC, struct nr_fits *); | ||
HC_PREC nr_gammq(HC_PREC, HC_PREC); | ||
void nr_gcf(HC_PREC *, HC_PREC, HC_PREC, HC_PREC *); | ||
void nr_gser(HC_PREC *, HC_PREC, HC_PREC, HC_PREC *); | ||
void nr_error(char []); | ||
HC_PREC *nr_vector(long, long); | ||
int *nr_ivector(long, long); | ||
unsigned char *nr_cvector(long, long); | ||
unsigned long *nr_lvector(long, long); | ||
HC_PREC *nr_dvector(long, long); | ||
HC_PREC **nr_matrix(long, long, long, long); | ||
HC_PREC **nr_dmatrix(long, long, long, long); | ||
int **nr_imatrix(long, long, long, long); | ||
HC_PREC **nr_submatrix(HC_PREC **, long, long, long, long, long, long); | ||
HC_PREC **nr_convert_matrix(HC_PREC *, long, long, long, long); | ||
HC_PREC ***nr_f3tensor(long, long, long, long, long, long); | ||
void nr_free_vector(HC_PREC *, long, long); | ||
void nr_free_ivector(int *, long, long); | ||
void nr_free_cvector(unsigned char *, long, long); | ||
void nr_free_lvector(unsigned long *, long, long); | ||
void nr_free_dvector(HC_PREC *, long, long); | ||
void nr_free_matrix(HC_PREC **, long, long, long, long); | ||
void nr_free_dmatrix(HC_PREC **, long, long, long, long); | ||
void nr_free_imatrix(int **, long, long, long, long); | ||
void nr_free_submatrix(HC_PREC **, long, long, long, long); | ||
void nr_free_convert_matrix(HC_PREC **, long, long, long, long); | ||
void nr_free_f3tensor(HC_PREC ***, long, long, long, long, long, long); | ||
void nr_avevar(struct nr_dp *, unsigned long, HC_PREC *, HC_PREC *); | ||
void nr_fitline(HC_PREC *, HC_PREC *, int, HC_PREC *, int, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *); | ||
void nr_mnbrak(HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC (*)(void), struct nr_fits *); | ||
HC_PREC nr_zbrent(HC_PREC (*)(void), struct nr_fits *, HC_PREC, HC_PREC, HC_PREC); | ||
HC_PREC nr_gammln(HC_PREC); | ||
int nr_comparef(struct nr_dp *, struct nr_dp *); |
Oops, something went wrong.