[801] | 1 | // Dominique YVON, CEA/DAPNIA/SPP 02/2000
|
---|
| 2 |
|
---|
| 3 | #include <stdio.h>
|
---|
| 4 | #include <stddef.h>
|
---|
| 5 | #include <stdlib.h>
|
---|
| 6 |
|
---|
| 7 | #include "numrecipes.h"
|
---|
| 8 |
|
---|
| 9 | // En tete du fichier nrutil.h
|
---|
| 10 |
|
---|
| 11 | static float sqrarg;
|
---|
| 12 | #define SQR(a) ((sqrarg=(a)) == 0.0 ? 0.0 : sqrarg*sqrarg)
|
---|
| 13 |
|
---|
| 14 | static double dsqrarg;
|
---|
| 15 | #define DSQR(a) ((dsqrarg=(a)) == 0.0 ? 0.0 : dsqrarg*dsqrarg)
|
---|
| 16 |
|
---|
| 17 | static double dmaxarg1,dmaxarg2;
|
---|
| 18 | #define DMAX(a,b) (dmaxarg1=(a),dmaxarg2=(b),(dmaxarg1) > (dmaxarg2) ?\
|
---|
| 19 | (dmaxarg1) : (dmaxarg2))
|
---|
| 20 |
|
---|
| 21 | static double dminarg1,dminarg2;
|
---|
| 22 | #define DMIN(a,b) (dminarg1=(a),dminarg2=(b),(dminarg1) < (dminarg2) ?\
|
---|
| 23 | (dminarg1) : (dminarg2))
|
---|
| 24 |
|
---|
| 25 | static float maxarg1,maxarg2;
|
---|
| 26 | #define FMAX(a,b) (maxarg1=(a),maxarg2=(b),(maxarg1) > (maxarg2) ?\
|
---|
| 27 | (maxarg1) : (maxarg2))
|
---|
| 28 |
|
---|
| 29 | static float minarg1,minarg2;
|
---|
| 30 | #define FMIN(a,b) (minarg1=(a),minarg2=(b),(minarg1) < (minarg2) ?\
|
---|
| 31 | (minarg1) : (minarg2))
|
---|
| 32 |
|
---|
| 33 | static long lmaxarg1,lmaxarg2;
|
---|
| 34 | #define LMAX(a,b) (lmaxarg1=(a),lmaxarg2=(b),(lmaxarg1) > (lmaxarg2) ?\
|
---|
| 35 | (lmaxarg1) : (lmaxarg2))
|
---|
| 36 |
|
---|
| 37 | static long lminarg1,lminarg2;
|
---|
| 38 | #define LMIN(a,b) (lminarg1=(a),lminarg2=(b),(lminarg1) < (lminarg2) ?\
|
---|
| 39 | (lminarg1) : (lminarg2))
|
---|
| 40 |
|
---|
| 41 | static int imaxarg1,imaxarg2;
|
---|
| 42 | #define IMAX(a,b) (imaxarg1=(a),imaxarg2=(b),(imaxarg1) > (imaxarg2) ?\
|
---|
| 43 | (imaxarg1) : (imaxarg2))
|
---|
| 44 |
|
---|
| 45 | static int iminarg1,iminarg2;
|
---|
| 46 | #define IMIN(a,b) (iminarg1=(a),iminarg2=(b),(iminarg1) < (iminarg2) ?\
|
---|
| 47 | (iminarg1) : (iminarg2))
|
---|
| 48 |
|
---|
| 49 | #define SIGN(a,b) ((b) >= 0.0 ? fabs(a) : -fabs(a))
|
---|
| 50 |
|
---|
| 51 |
|
---|
| 52 | #define NR_END 1
|
---|
| 53 | #define FREE_ARG char*
|
---|
| 54 |
|
---|
| 55 |
|
---|
| 56 | void NumRecipes::nrerror(char error_text[])
|
---|
| 57 | /* Numerical Recipes standard error handler */
|
---|
| 58 | {
|
---|
| 59 | fprintf(stderr,"Numerical Recipes run-time error...\n");
|
---|
| 60 | fprintf(stderr,"%s\n",error_text);
|
---|
| 61 | fprintf(stderr,"...now exiting to system...\n");
|
---|
| 62 | exit(1);
|
---|
| 63 | }
|
---|
| 64 |
|
---|
| 65 | float* NumRecipes::vector(long nl, long nh)
|
---|
| 66 | /* allocate a float vector with subscript range v[nl..nh] */
|
---|
| 67 | {
|
---|
| 68 | float *v;
|
---|
| 69 |
|
---|
| 70 | v=(float *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(float)));
|
---|
| 71 | if (!v) nrerror("allocation failure in vector()");
|
---|
| 72 | return v-nl+NR_END;
|
---|
| 73 | }
|
---|
| 74 |
|
---|
| 75 | int* NumRecipes::ivector(long nl, long nh)
|
---|
| 76 | /* allocate an int vector with subscript range v[nl..nh] */
|
---|
| 77 | {
|
---|
| 78 | int *v;
|
---|
| 79 |
|
---|
| 80 | v=(int *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(int)));
|
---|
| 81 | if (!v) nrerror("allocation failure in ivector()");
|
---|
| 82 | return v-nl+NR_END;
|
---|
| 83 | }
|
---|
| 84 |
|
---|
| 85 | unsigned char* NumRecipes::cvector(long nl, long nh)
|
---|
| 86 | /* allocate an unsigned char vector with subscript range v[nl..nh] */
|
---|
| 87 | {
|
---|
| 88 | unsigned char *v;
|
---|
| 89 |
|
---|
| 90 | v=(unsigned char *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(unsigned char)));
|
---|
| 91 | if (!v) nrerror("allocation failure in cvector()");
|
---|
| 92 | return v-nl+NR_END;
|
---|
| 93 | }
|
---|
| 94 |
|
---|
| 95 | unsigned long * NumRecipes::lvector(long nl, long nh)
|
---|
| 96 | /* allocate an unsigned long vector with subscript range v[nl..nh] */
|
---|
| 97 | {
|
---|
| 98 | unsigned long *v;
|
---|
| 99 |
|
---|
| 100 | v=(unsigned long *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(long)));
|
---|
| 101 | if (!v) nrerror("allocation failure in lvector()");
|
---|
| 102 | return v-nl+NR_END;
|
---|
| 103 | }
|
---|
| 104 |
|
---|
| 105 | double* NumRecipes::dvector(long nl, long nh)
|
---|
| 106 | /* allocate a double vector with subscript range v[nl..nh] */
|
---|
| 107 | {
|
---|
| 108 | double *v;
|
---|
| 109 |
|
---|
| 110 | v=(double *)malloc((size_t) ((nh-nl+1+NR_END)*sizeof(double)));
|
---|
| 111 | if (!v) nrerror("allocation failure in dvector()");
|
---|
| 112 | return v-nl+NR_END;
|
---|
| 113 | }
|
---|
| 114 |
|
---|
| 115 | float ** NumRecipes::matrix(long nrl, long nrh, long ncl, long nch)
|
---|
| 116 | /* allocate a float matrix with subscript range m[nrl..nrh][ncl..nch] */
|
---|
| 117 | {
|
---|
| 118 | long i, nrow=nrh-nrl+1,ncol=nch-ncl+1;
|
---|
| 119 | float **m;
|
---|
| 120 |
|
---|
| 121 | /* allocate pointers to rows */
|
---|
| 122 | m=(float **) malloc((size_t)((nrow+NR_END)*sizeof(float*)));
|
---|
| 123 | if (!m) nrerror("allocation failure 1 in matrix()");
|
---|
| 124 | m += NR_END;
|
---|
| 125 | m -= nrl;
|
---|
| 126 |
|
---|
| 127 | /* allocate rows and set pointers to them */
|
---|
| 128 | m[nrl]=(float *) malloc((size_t)((nrow*ncol+NR_END)*sizeof(float)));
|
---|
| 129 | if (!m[nrl]) nrerror("allocation failure 2 in matrix()");
|
---|
| 130 | m[nrl] += NR_END;
|
---|
| 131 | m[nrl] -= ncl;
|
---|
| 132 |
|
---|
| 133 | for(i=nrl+1;i<=nrh;i++) m[i]=m[i-1]+ncol;
|
---|
| 134 |
|
---|
| 135 | /* return pointer to array of pointers to rows */
|
---|
| 136 | return m;
|
---|
| 137 | }
|
---|
| 138 |
|
---|
| 139 | double ** NumRecipes::dmatrix(long nrl, long nrh, long ncl, long nch)
|
---|
| 140 | /* allocate a double matrix with subscript range m[nrl..nrh][ncl..nch] */
|
---|
| 141 | {
|
---|
| 142 | long i, nrow=nrh-nrl+1,ncol=nch-ncl+1;
|
---|
| 143 | double **m;
|
---|
| 144 |
|
---|
| 145 | /* allocate pointers to rows */
|
---|
| 146 | m=(double **) malloc((size_t)((nrow+NR_END)*sizeof(double*)));
|
---|
| 147 | if (!m) nrerror("allocation failure 1 in matrix()");
|
---|
| 148 | m += NR_END;
|
---|
| 149 | m -= nrl;
|
---|
| 150 |
|
---|
| 151 | /* allocate rows and set pointers to them */
|
---|
| 152 | m[nrl]=(double *) malloc((size_t)((nrow*ncol+NR_END)*sizeof(double)));
|
---|
| 153 | if (!m[nrl]) nrerror("allocation failure 2 in matrix()");
|
---|
| 154 | m[nrl] += NR_END;
|
---|
| 155 | m[nrl] -= ncl;
|
---|
| 156 |
|
---|
| 157 | for(i=nrl+1;i<=nrh;i++) m[i]=m[i-1]+ncol;
|
---|
| 158 |
|
---|
| 159 | /* return pointer to array of pointers to rows */
|
---|
| 160 | return m;
|
---|
| 161 | }
|
---|
| 162 |
|
---|
| 163 | int ** NumRecipes::imatrix(long nrl, long nrh, long ncl, long nch)
|
---|
| 164 | /* allocate a int matrix with subscript range m[nrl..nrh][ncl..nch] */
|
---|
| 165 | {
|
---|
| 166 | long i, nrow=nrh-nrl+1,ncol=nch-ncl+1;
|
---|
| 167 | int **m;
|
---|
| 168 |
|
---|
| 169 | /* allocate pointers to rows */
|
---|
| 170 | m=(int **) malloc((size_t)((nrow+NR_END)*sizeof(int*)));
|
---|
| 171 | if (!m) nrerror("allocation failure 1 in matrix()");
|
---|
| 172 | m += NR_END;
|
---|
| 173 | m -= nrl;
|
---|
| 174 |
|
---|
| 175 |
|
---|
| 176 | /* allocate rows and set pointers to them */
|
---|
| 177 | m[nrl]=(int *) malloc((size_t)((nrow*ncol+NR_END)*sizeof(int)));
|
---|
| 178 | if (!m[nrl]) nrerror("allocation failure 2 in matrix()");
|
---|
| 179 | m[nrl] += NR_END;
|
---|
| 180 | m[nrl] -= ncl;
|
---|
| 181 |
|
---|
| 182 | for(i=nrl+1;i<=nrh;i++) m[i]=m[i-1]+ncol;
|
---|
| 183 |
|
---|
| 184 | /* return pointer to array of pointers to rows */
|
---|
| 185 | return m;
|
---|
| 186 | }
|
---|
| 187 |
|
---|
| 188 | float** NumRecipes::submatrix(float **a, long oldrl, long oldrh, long oldcl, long oldch,
|
---|
| 189 | long newrl, long newcl)
|
---|
| 190 | /* point a submatrix [newrl..][newcl..] to a[oldrl..oldrh][oldcl..oldch] */
|
---|
| 191 | {
|
---|
| 192 | long i,j,nrow=oldrh-oldrl+1,ncol=oldcl-newcl;
|
---|
| 193 | float **m;
|
---|
| 194 |
|
---|
| 195 | /* allocate array of pointers to rows */
|
---|
| 196 | m=(float **) malloc((size_t) ((nrow+NR_END)*sizeof(float*)));
|
---|
| 197 | if (!m) nrerror("allocation failure in submatrix()");
|
---|
| 198 | m += NR_END;
|
---|
| 199 | m -= newrl;
|
---|
| 200 |
|
---|
| 201 | /* set pointers to rows */
|
---|
| 202 | for(i=oldrl,j=newrl;i<=oldrh;i++,j++) m[j]=a[i]+ncol;
|
---|
| 203 |
|
---|
| 204 | /* return pointer to array of pointers to rows */
|
---|
| 205 | return m;
|
---|
| 206 | }
|
---|
| 207 |
|
---|
| 208 | float** NumRecipes::convert_matrix(float *a, long nrl, long nrh, long ncl, long nch)
|
---|
| 209 | /* allocate a float matrix m[nrl..nrh][ncl..nch] that points to the matrix
|
---|
| 210 | declared in the standard C manner as a[nrow][ncol], where nrow=nrh-nrl+1
|
---|
| 211 | and ncol=nch-ncl+1. The routine should be called with the address
|
---|
| 212 | &a[0][0] as the first argument. */
|
---|
| 213 | {
|
---|
| 214 | long i,j,nrow=nrh-nrl+1,ncol=nch-ncl+1;
|
---|
| 215 | float **m;
|
---|
| 216 |
|
---|
| 217 | /* allocate pointers to rows */
|
---|
| 218 | m=(float **) malloc((size_t) ((nrow+NR_END)*sizeof(float*)));
|
---|
| 219 | if (!m) nrerror("allocation failure in convert_matrix()");
|
---|
| 220 | m += NR_END;
|
---|
| 221 | m -= nrl;
|
---|
| 222 |
|
---|
| 223 | /* set pointers to rows */
|
---|
| 224 | m[nrl]=a-ncl;
|
---|
| 225 | for(i=1,j=nrl+1;i<nrow;i++,j++) m[j]=m[j-1]+ncol;
|
---|
| 226 | /* return pointer to array of pointers to rows */
|
---|
| 227 | return m;
|
---|
| 228 | }
|
---|
| 229 |
|
---|
| 230 | float *** NumRecipes::f3tensor(long nrl, long nrh, long ncl, long nch, long ndl, long ndh)
|
---|
| 231 | /* allocate a float 3tensor with range t[nrl..nrh][ncl..nch][ndl..ndh] */
|
---|
| 232 | {
|
---|
| 233 | long i,j,nrow=nrh-nrl+1,ncol=nch-ncl+1,ndep=ndh-ndl+1;
|
---|
| 234 | float ***t;
|
---|
| 235 |
|
---|
| 236 | /* allocate pointers to pointers to rows */
|
---|
| 237 | t=(float ***) malloc((size_t)((nrow+NR_END)*sizeof(float**)));
|
---|
| 238 | if (!t) nrerror("allocation failure 1 in f3tensor()");
|
---|
| 239 | t += NR_END;
|
---|
| 240 | t -= nrl;
|
---|
| 241 |
|
---|
| 242 | /* allocate pointers to rows and set pointers to them */
|
---|
| 243 | t[nrl]=(float **) malloc((size_t)((nrow*ncol+NR_END)*sizeof(float*)));
|
---|
| 244 | if (!t[nrl]) nrerror("allocation failure 2 in f3tensor()");
|
---|
| 245 | t[nrl] += NR_END;
|
---|
| 246 | t[nrl] -= ncl;
|
---|
| 247 |
|
---|
| 248 | /* allocate rows and set pointers to them */
|
---|
| 249 | t[nrl][ncl]=(float *) malloc((size_t)((nrow*ncol*ndep+NR_END)*sizeof(float)));
|
---|
| 250 | if (!t[nrl][ncl]) nrerror("allocation failure 3 in f3tensor()");
|
---|
| 251 | t[nrl][ncl] += NR_END;
|
---|
| 252 | t[nrl][ncl] -= ndl;
|
---|
| 253 |
|
---|
| 254 | for(j=ncl+1;j<=nch;j++) t[nrl][j]=t[nrl][j-1]+ndep;
|
---|
| 255 | for(i=nrl+1;i<=nrh;i++) {
|
---|
| 256 | t[i]=t[i-1]+ncol;
|
---|
| 257 | t[i][ncl]=t[i-1][ncl]+ncol*ndep;
|
---|
| 258 | for(j=ncl+1;j<=nch;j++) t[i][j]=t[i][j-1]+ndep;
|
---|
| 259 | }
|
---|
| 260 |
|
---|
| 261 | /* return pointer to array of pointers to rows */
|
---|
| 262 | return t;
|
---|
| 263 | }
|
---|
| 264 |
|
---|
| 265 | void NumRecipes::free_vector(float *v, long nl, long nh)
|
---|
| 266 | /* free a float vector allocated with vector() */
|
---|
| 267 | {
|
---|
| 268 | free((FREE_ARG) (v+nl-NR_END));
|
---|
| 269 | }
|
---|
| 270 |
|
---|
| 271 | void NumRecipes::free_ivector(int *v, long nl, long nh)
|
---|
| 272 | /* free an int vector allocated with ivector() */
|
---|
| 273 | {
|
---|
| 274 | free((FREE_ARG) (v+nl-NR_END));
|
---|
| 275 | }
|
---|
| 276 |
|
---|
| 277 | void NumRecipes::free_cvector(unsigned char *v, long nl, long nh)
|
---|
| 278 | /* free an unsigned char vector allocated with cvector() */
|
---|
| 279 | {
|
---|
| 280 | free((FREE_ARG) (v+nl-NR_END));
|
---|
| 281 | }
|
---|
| 282 |
|
---|
| 283 | void NumRecipes::free_lvector(unsigned long *v, long nl, long nh)
|
---|
| 284 | /* free an unsigned long vector allocated with lvector() */
|
---|
| 285 | {
|
---|
| 286 | free((FREE_ARG) (v+nl-NR_END));
|
---|
| 287 | }
|
---|
| 288 |
|
---|
| 289 | void NumRecipes::free_dvector(double *v, long nl, long nh)
|
---|
| 290 | /* free a double vector allocated with dvector() */
|
---|
| 291 | {
|
---|
| 292 | free((FREE_ARG) (v+nl-NR_END));
|
---|
| 293 | }
|
---|
| 294 |
|
---|
| 295 | void NumRecipes::free_matrix(float **m, long nrl, long nrh, long ncl, long nch)
|
---|
| 296 | /* free a float matrix allocated by matrix() */
|
---|
| 297 | {
|
---|
| 298 | free((FREE_ARG) (m[nrl]+ncl-NR_END));
|
---|
| 299 | free((FREE_ARG) (m+nrl-NR_END));
|
---|
| 300 | }
|
---|
| 301 |
|
---|
| 302 | void NumRecipes::free_dmatrix(double **m, long nrl, long nrh, long ncl, long nch)
|
---|
| 303 | /* free a double matrix allocated by dmatrix() */
|
---|
| 304 | {
|
---|
| 305 | free((FREE_ARG) (m[nrl]+ncl-NR_END));
|
---|
| 306 | free((FREE_ARG) (m+nrl-NR_END));
|
---|
| 307 | }
|
---|
| 308 |
|
---|
| 309 | void NumRecipes::free_imatrix(int **m, long nrl, long nrh, long ncl, long nch)
|
---|
| 310 | /* free an int matrix allocated by imatrix() */
|
---|
| 311 | {
|
---|
| 312 | free((FREE_ARG) (m[nrl]+ncl-NR_END));
|
---|
| 313 | free((FREE_ARG) (m+nrl-NR_END));
|
---|
| 314 | }
|
---|
| 315 |
|
---|
| 316 | void NumRecipes::free_submatrix(float **b, long nrl, long nrh, long ncl, long nch)
|
---|
| 317 | /* free a submatrix allocated by submatrix() */
|
---|
| 318 | {
|
---|
| 319 | free((FREE_ARG) (b+nrl-NR_END));
|
---|
| 320 | }
|
---|
| 321 |
|
---|
| 322 | void NumRecipes::free_convert_matrix(float **b, long nrl, long nrh, long ncl, long nch)
|
---|
| 323 | /* free a matrix allocated by convert_matrix() */
|
---|
| 324 | {
|
---|
| 325 | free((FREE_ARG) (b+nrl-NR_END));
|
---|
| 326 | }
|
---|
| 327 |
|
---|
| 328 | void NumRecipes::free_f3tensor(float ***t, long nrl, long nrh, long ncl, long nch,
|
---|
| 329 | long ndl, long ndh)
|
---|
| 330 | /* free a float f3tensor allocated by f3tensor() */
|
---|
| 331 | {
|
---|
| 332 | free((FREE_ARG) (t[nrl][ncl]+ndl-NR_END));
|
---|
| 333 | free((FREE_ARG) (t[nrl]+ncl-NR_END));
|
---|
| 334 | free((FREE_ARG) (t+nrl-NR_END));
|
---|
| 335 | }
|
---|
| 336 |
|
---|
| 337 | //_____________________________ Fichier hunt.c _________________________________________
|
---|
| 338 |
|
---|
| 339 | void NumRecipes::hunt(float xx[], unsigned long n, float x, unsigned long *jlo)
|
---|
| 340 | {
|
---|
| 341 | unsigned long jm,jhi,inc;
|
---|
| 342 | int ascnd;
|
---|
| 343 |
|
---|
| 344 | ascnd=(xx[n] > xx[1]);
|
---|
| 345 | if (*jlo <= 0 || *jlo > n) {
|
---|
| 346 | *jlo=0;
|
---|
| 347 | jhi=n+1;
|
---|
| 348 | } else {
|
---|
| 349 | inc=1;
|
---|
| 350 | if (x >= xx[*jlo] == ascnd) {
|
---|
| 351 | if (*jlo == n) return;
|
---|
| 352 | jhi=(*jlo)+1;
|
---|
| 353 | while (x >= xx[jhi] == ascnd) {
|
---|
| 354 | *jlo=jhi;
|
---|
| 355 | inc += inc;
|
---|
| 356 | jhi=(*jlo)+inc;
|
---|
| 357 | if (jhi > n) {
|
---|
| 358 | jhi=n+1;
|
---|
| 359 | break;
|
---|
| 360 | }
|
---|
| 361 | }
|
---|
| 362 | } else {
|
---|
| 363 | if (*jlo == 1) {
|
---|
| 364 | *jlo=0;
|
---|
| 365 | return;
|
---|
| 366 | }
|
---|
| 367 | jhi=(*jlo)--;
|
---|
| 368 | while (x < xx[*jlo] == ascnd) {
|
---|
| 369 | jhi=(*jlo);
|
---|
| 370 | inc <<= 1;
|
---|
| 371 | if (inc >= jhi) {
|
---|
| 372 | *jlo=0;
|
---|
| 373 | break;
|
---|
| 374 | }
|
---|
| 375 | else *jlo=jhi-inc;
|
---|
| 376 | }
|
---|
| 377 | }
|
---|
| 378 | }
|
---|
| 379 | while (jhi-(*jlo) != 1) {
|
---|
| 380 | jm=(jhi+(*jlo)) >> 1;
|
---|
| 381 | if (x > xx[jm] == ascnd)
|
---|
| 382 | *jlo=jm;
|
---|
| 383 | else
|
---|
| 384 | jhi=jm;
|
---|
| 385 | }
|
---|
| 386 | }
|
---|
| 387 | // __________________________Fichier polint.c___________________________________
|
---|
| 388 |
|
---|
| 389 | void NumRecipes::polint(float xa[], float ya[], int n, float x, float *y, float *dy)
|
---|
| 390 | {
|
---|
| 391 | int i,m,ns=1;
|
---|
| 392 | float den,dif,dift,ho,hp,w;
|
---|
| 393 | float *c,*d;
|
---|
| 394 |
|
---|
| 395 | dif=fabs(x-xa[1]);
|
---|
| 396 | c=vector(1,n);
|
---|
| 397 | d=vector(1,n);
|
---|
| 398 | for (i=1;i<=n;i++) {
|
---|
| 399 | if ( (dift=fabs(x-xa[i])) < dif) {
|
---|
| 400 | ns=i;
|
---|
| 401 | dif=dift;
|
---|
| 402 | }
|
---|
| 403 | c[i]=ya[i];
|
---|
| 404 | d[i]=ya[i];
|
---|
| 405 | }
|
---|
| 406 | *y=ya[ns--];
|
---|
| 407 | for (m=1;m<n;m++) {
|
---|
| 408 | for (i=1;i<=n-m;i++) {
|
---|
| 409 | ho=xa[i]-x;
|
---|
| 410 | hp=xa[i+m]-x;
|
---|
| 411 | w=c[i+1]-d[i];
|
---|
| 412 | if ( (den=ho-hp) == 0.0) nrerror("Error in routine polint");
|
---|
| 413 | den=w/den;
|
---|
| 414 | d[i]=hp*den;
|
---|
| 415 | c[i]=ho*den;
|
---|
| 416 | }
|
---|
| 417 | *y += (*dy=(2*ns < (n-m) ? c[ns+1] : d[ns--]));
|
---|
| 418 | }
|
---|
| 419 | free_vector(d,1,n);
|
---|
| 420 | free_vector(c,1,n);
|
---|
| 421 |
|
---|
| 422 | }
|
---|
| 423 |
|
---|
| 424 | // ________________________Fichier polin2.c_______________________________________
|
---|
| 425 |
|
---|
| 426 | void NumRecipes::polin2(float x1a[], float x2a[], float **ya, int m, int n, float x1,
|
---|
| 427 | float x2, float *y, float *dy)
|
---|
| 428 | {
|
---|
| 429 |
|
---|
| 430 | int j;
|
---|
| 431 | float *ymtmp;
|
---|
| 432 |
|
---|
| 433 | ymtmp=vector(1,m);
|
---|
| 434 | for (j=1;j<=m;j++) {
|
---|
| 435 | polint(x2a,ya[j],n,x2,&ymtmp[j],dy);
|
---|
| 436 | }
|
---|
| 437 | polint(x1a,ymtmp,m,x1,y,dy);
|
---|
| 438 | free_vector(ymtmp,1,m);
|
---|
[798] | 439 | } |
---|