|
1 | 1 | /* fitxyee.c */ |
2 | | -#include <math.h> |
3 | | -#include <stdio.h> |
4 | | -#include <stdlib.h> |
5 | | -#include <string.h> |
6 | | -#define PRECISION double |
7 | | -//#define NR_ACC 1e-7 |
8 | | -#define NR_ACC 1e-15 |
9 | | -#define NR_EPS 5e-15 |
10 | | -#define FOURFORMAT "%lf %lf %lf %lf" |
11 | | -#define TWOFORMAT "%lf %lf" |
12 | | - |
| 2 | +#include "hc.h" |
| 3 | +#define NR_ACC (HC_EPS_PREC*10) |
| 4 | +#define NR_EPS HC_EPS_PREC |
13 | 5 | /* |
14 | 6 |
|
15 | 7 | fit a line through x y data with uncertainties in both x and y |
16 | 8 |
|
17 | | - $Id: fitxyee.c,v 1.2 2005/07/04 16:47:43 becker Exp becker $ |
18 | | -
|
19 | | - From Numerical Recipes in C, p.668 |
| 9 | + Copyright Numerical Recipes in C, p.668, do not distribute without |
| 10 | + permission |
20 | 11 |
|
21 | 12 |
|
22 | | - major modifications: |
| 13 | + minor modifications: |
23 | 14 |
|
24 | 15 | - using data structure instead of x,y,sigx,sigy |
25 | 16 | - removed global variables and put those into fit structure |
26 | 17 |
|
27 | 18 | */ |
28 | | -static PRECISION _tmp_sqrarg; |
29 | | -#define SQUARE(a) ((((_tmp_sqrarg=(a))) == 0.0) ? (0.0) : (_tmp_sqrarg*_tmp_sqrarg)) |
30 | | -#define SIGN(a,b) ((b) >= 0.0 ? fabs(a) : -fabs(a)) |
31 | | -static PRECISION _tmp_maxarg1,_tmp_maxarg2; |
32 | | -#define FMAX(a,b) (_tmp_maxarg1=(a),_tmp_maxarg2=(b),(_tmp_maxarg1) > (_tmp_maxarg2) ?\ |
| 19 | +static HC_PREC _tmp_sqrarg; |
| 20 | +#define NR_SQUARE(a) ((((_tmp_sqrarg=(a))) == 0.0) ? (0.0) : (_tmp_sqrarg*_tmp_sqrarg)) |
| 21 | +#define NR_SIGN(a,b) ((b) >= 0.0 ? fabs(a) : -fabs(a)) |
| 22 | +static HC_PREC _tmp_maxarg1,_tmp_maxarg2; |
| 23 | +#define NR_FMAX(a,b) (_tmp_maxarg1=(a),_tmp_maxarg2=(b),(_tmp_maxarg1) > (_tmp_maxarg2) ? \ |
33 | 24 | (_tmp_maxarg1) : (_tmp_maxarg2)) |
34 | 25 | /* |
35 | 26 | data structure |
36 | 27 | */ |
37 | | -struct dp{ |
38 | | - PRECISION x,y,sigx,sigy; |
| 28 | +struct nr_dp{ |
| 29 | + HC_PREC x,y,sigx,sigy; |
39 | 30 | }; |
40 | 31 | /* |
41 | 32 | fit structure |
42 | 33 | */ |
43 | | -struct fits{ |
| 34 | +struct nr_fits{ |
44 | 35 | int nn; |
45 | | - PRECISION *xx,*yy,*sx,*sy,*ww,aa,offs; |
| 36 | + HC_PREC *xx,*yy,*sx,*sy,*ww,aa,offs; |
46 | 37 | }; |
47 | 38 |
|
48 | 39 |
|
49 | 40 |
|
50 | | -void fit(struct dp *, int, PRECISION *, PRECISION *, PRECISION *, PRECISION *, PRECISION *, PRECISION *); |
51 | | -void fitexy(struct dp *, int, PRECISION *, PRECISION *, PRECISION *, PRECISION *, PRECISION *, PRECISION *); |
52 | | -PRECISION brent(PRECISION, PRECISION, PRECISION, PRECISION (*)(void), struct fits *, PRECISION, PRECISION *); |
53 | | -PRECISION chixy(PRECISION, struct fits *); |
54 | | -PRECISION gammq(PRECISION, PRECISION); |
55 | | -void gcf(PRECISION *, PRECISION, PRECISION, PRECISION *); |
56 | | -void gser(PRECISION *, PRECISION, PRECISION, PRECISION *); |
57 | | -void nrerror(char []); |
58 | | -PRECISION *vector(long, long); |
59 | | -int *ivector(long, long); |
60 | | -unsigned char *cvector(long, long); |
61 | | -unsigned long *lvector(long, long); |
62 | | -PRECISION *dvector(long, long); |
63 | | -PRECISION **matrix(long, long, long, long); |
64 | | -PRECISION **dmatrix(long, long, long, long); |
65 | | -int **imatrix(long, long, long, long); |
66 | | -PRECISION **submatrix(PRECISION **, long, long, long, long, long, long); |
67 | | -PRECISION **convert_matrix(PRECISION *, long, long, long, long); |
68 | | -PRECISION ***f3tensor(long, long, long, long, long, long); |
69 | | -void free_vector(PRECISION *, long, long); |
70 | | -void free_ivector(int *, long, long); |
71 | | -void free_cvector(unsigned char *, long, long); |
72 | | -void free_lvector(unsigned long *, long, long); |
73 | | -void free_dvector(PRECISION *, long, long); |
74 | | -void free_matrix(PRECISION **, long, long, long, long); |
75 | | -void free_dmatrix(PRECISION **, long, long, long, long); |
76 | | -void free_imatrix(int **, long, long, long, long); |
77 | | -void free_submatrix(PRECISION **, long, long, long, long); |
78 | | -void free_convert_matrix(PRECISION **, long, long, long, long); |
79 | | -void free_f3tensor(PRECISION ***, long, long, long, long, long, long); |
80 | | -void avevar(struct dp *, unsigned long, PRECISION *, PRECISION *); |
81 | | -void fitline(PRECISION *, PRECISION *, int, PRECISION *, int, PRECISION *, PRECISION *, PRECISION *, PRECISION *, PRECISION *, PRECISION *); |
82 | | -void mnbrak(PRECISION *, PRECISION *, PRECISION *, PRECISION *, PRECISION *, PRECISION *, PRECISION (*)(void), struct fits *); |
83 | | -PRECISION zbrent(PRECISION (*)(void), struct fits *, PRECISION, PRECISION, PRECISION); |
84 | | -PRECISION gammln(PRECISION); |
85 | | -int comparef(struct dp *, struct dp *); |
| 41 | +void nr_fit(struct nr_dp *, int, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *); |
| 42 | +void nr_fitexy(struct nr_dp *, int, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *); |
| 43 | +HC_PREC nr_brent(HC_PREC, HC_PREC, HC_PREC, HC_PREC (*)(void), struct nr_fits *, HC_PREC, HC_PREC *); |
| 44 | +HC_PREC nr_chixy(HC_PREC, struct nr_fits *); |
| 45 | +HC_PREC nr_gammq(HC_PREC, HC_PREC); |
| 46 | +void nr_gcf(HC_PREC *, HC_PREC, HC_PREC, HC_PREC *); |
| 47 | +void nr_gser(HC_PREC *, HC_PREC, HC_PREC, HC_PREC *); |
| 48 | +void nr_error(char []); |
| 49 | +HC_PREC *nr_vector(long, long); |
| 50 | +int *nr_ivector(long, long); |
| 51 | +unsigned char *nr_cvector(long, long); |
| 52 | +unsigned long *nr_lvector(long, long); |
| 53 | +HC_PREC *nr_dvector(long, long); |
| 54 | +HC_PREC **nr_matrix(long, long, long, long); |
| 55 | +HC_PREC **nr_dmatrix(long, long, long, long); |
| 56 | +int **nr_imatrix(long, long, long, long); |
| 57 | +HC_PREC **nr_submatrix(HC_PREC **, long, long, long, long, long, long); |
| 58 | +HC_PREC **nr_convert_matrix(HC_PREC *, long, long, long, long); |
| 59 | +HC_PREC ***nr_f3tensor(long, long, long, long, long, long); |
| 60 | +void nr_free_vector(HC_PREC *, long, long); |
| 61 | +void nr_free_ivector(int *, long, long); |
| 62 | +void nr_free_cvector(unsigned char *, long, long); |
| 63 | +void nr_free_lvector(unsigned long *, long, long); |
| 64 | +void nr_free_dvector(HC_PREC *, long, long); |
| 65 | +void nr_free_matrix(HC_PREC **, long, long, long, long); |
| 66 | +void nr_free_dmatrix(HC_PREC **, long, long, long, long); |
| 67 | +void nr_free_imatrix(int **, long, long, long, long); |
| 68 | +void nr_free_submatrix(HC_PREC **, long, long, long, long); |
| 69 | +void nr_free_convert_matrix(HC_PREC **, long, long, long, long); |
| 70 | +void nr_free_f3tensor(HC_PREC ***, long, long, long, long, long, long); |
| 71 | +void nr_avevar(struct nr_dp *, unsigned long, HC_PREC *, HC_PREC *); |
| 72 | +void nr_fitline(HC_PREC *, HC_PREC *, int, HC_PREC *, int, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *); |
| 73 | +void nr_mnbrak(HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC *, HC_PREC (*)(void), struct nr_fits *); |
| 74 | +HC_PREC nr_zbrent(HC_PREC (*)(void), struct nr_fits *, HC_PREC, HC_PREC, HC_PREC); |
| 75 | +HC_PREC nr_gammln(HC_PREC); |
| 76 | +int nr_comparef(struct nr_dp *, struct nr_dp *); |
0 commit comments