00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 00024 00025 #ifndef _NR_H_ 00026 #define _NR_H_ 00027 00028 static eusfloat_t sqrarg; 00029 #define SQR(a) ((sqrarg=(a)) == 0.0 ? 0.0 : sqrarg*sqrarg) 00030 00031 static eusfloat_t maxarg1, maxarg2; 00032 #define FMAX(a,b) (maxarg1=(a),maxarg2=(b),(maxarg1) > (maxarg2) ? (maxarg1) : (maxarg2)) 00033 00034 static int iminarg1, iminarg2; 00035 #define IMIN(a,b) (iminarg1=(a),iminarg2=(b),(iminarg1) < (iminarg2) ? (iminarg1) : (iminarg2)) 00036 00037 #define SIGN(a,b) ((b) >= 0.0 ? fabs(a) : -fabs(a)) 00038 #define SWAP(g,h) {y=(g);(g)=(h);(h)=y;} 00039 00040 #define NR_END 1 00041 #define FREE_ARG char* 00042 00043 void nrerror(char error_text[]); 00044 eusfloat_t *nr_vector(int nl, int nh); 00045 eusfloat_t **nr_matrix(int nrl, int nrh, int ncl, int nch); 00046 void free_nr_vector(eusfloat_t *v, int nl, int nh); 00047 void free_nr_matrix(eusfloat_t **m, int nrl, int nrh, int ncl, int nch); 00048 00049 #define TINY 1.0e-20 00050 void lubksb(eusfloat_t **a, int n, int *indx, eusfloat_t b[]); 00051 int ludcmp(eusfloat_t **a, int n, int *indx, eusfloat_t *d); 00052 00053 int svdsolve(eusfloat_t **a, int m, int n, eusfloat_t *b, eusfloat_t *x); 00054 void svbksb(eusfloat_t **u, eusfloat_t *w, eusfloat_t **v, int m, int n, eusfloat_t *b, eusfloat_t *x); 00055 int svdcmp(eusfloat_t **a, int m, int n, eusfloat_t *w, eusfloat_t **v); 00056 00057 eusfloat_t pythag(eusfloat_t a, eusfloat_t b); 00058 00059 static copymat(dest,src,size) 00060 pointer dest,src; 00061 register int size; 00062 { register int i; 00063 register eusfloat_t *rv=dest->c.ary.entity->c.fvec.fv; 00064 register eusfloat_t *mv=src->c.ary.entity->c.fvec.fv; 00065 size=size*size; 00066 for (i=0; i<size; i++) rv[i]=mv[i]; } 00067 00068 #endif //_NR_H_