c21-1 (779629), страница 6
Текст из файла (страница 6)
Further reproduction, or any copying of machinereadable files (including this one) to any servercomputer, is strictly prohibited. To order Numerical Recipes books,diskettes, or CDROMsvisit website http://www.nr.com or call 1-800-872-7423 (North America only),or send email to trade@cup.cam.ac.uk (outside North America).float *vector(long nl, long nh)/* allocate a float vector with subscript range v[nl..nh] */{float *v;944Appendix Bif (!m) nrerror("allocation failure 1 in matrix()");m += NR_END;m -= nrl;for(i=nrl+1;i<=nrh;i++) m[i]=m[i-1]+ncol;/* return pointer to array of pointers to rows */return m;}double **dmatrix(long nrl, long nrh, long ncl, long nch)/* allocate a double matrix with subscript range m[nrl..nrh][ncl..nch] */{long i, nrow=nrh-nrl+1,ncol=nch-ncl+1;double **m;/* allocate pointers to rows */m=(double **) malloc((size_t)((nrow+NR_END)*sizeof(double*)));if (!m) nrerror("allocation failure 1 in matrix()");m += NR_END;m -= nrl;/* allocate rows and set pointers to them */m[nrl]=(double *) malloc((size_t)((nrow*ncol+NR_END)*sizeof(double)));if (!m[nrl]) nrerror("allocation failure 2 in matrix()");m[nrl] += NR_END;m[nrl] -= ncl;for(i=nrl+1;i<=nrh;i++) m[i]=m[i-1]+ncol;/* return pointer to array of pointers to rows */return m;}int **imatrix(long nrl, long nrh, long ncl, long nch)/* allocate a int matrix with subscript range m[nrl..nrh][ncl..nch] */{long i, nrow=nrh-nrl+1,ncol=nch-ncl+1;int **m;/* allocate pointers to rows */m=(int **) malloc((size_t)((nrow+NR_END)*sizeof(int*)));if (!m) nrerror("allocation failure 1 in matrix()");m += NR_END;m -= nrl;/* allocate rows and set pointers to them */m[nrl]=(int *) malloc((size_t)((nrow*ncol+NR_END)*sizeof(int)));if (!m[nrl]) nrerror("allocation failure 2 in matrix()");m[nrl] += NR_END;m[nrl] -= ncl;for(i=nrl+1;i<=nrh;i++) m[i]=m[i-1]+ncol;/* return pointer to array of pointers to rows */return m;}Sample page from NUMERICAL RECIPES IN C: THE ART OF SCIENTIFIC COMPUTING (ISBN 0-521-43108-5)Copyright (C) 1988-1992 by Cambridge University Press.Programs Copyright (C) 1988-1992 by Numerical Recipes Software.Permission is granted for internet users to make one paper copy for their own personal use.
Further reproduction, or any copying of machinereadable files (including this one) to any servercomputer, is strictly prohibited. To order Numerical Recipes books,diskettes, or CDROMsvisit website http://www.nr.com or call 1-800-872-7423 (North America only),or send email to trade@cup.cam.ac.uk (outside North America)./* allocate rows and set pointers to them */m[nrl]=(float *) malloc((size_t)((nrow*ncol+NR_END)*sizeof(float)));if (!m[nrl]) nrerror("allocation failure 2 in matrix()");m[nrl] += NR_END;m[nrl] -= ncl;Utility Routines (nrutil.c)945float **submatrix(float **a, long oldrl, long oldrh, long oldcl, long oldch,long newrl, long newcl)/* point a submatrix [newrl..][newcl..] to a[oldrl..oldrh][oldcl..oldch] */{long i,j,nrow=oldrh-oldrl+1,ncol=oldcl-newcl;float **m;/* set pointers to rows */for(i=oldrl,j=newrl;i<=oldrh;i++,j++) m[j]=a[i]+ncol;/* return pointer to array of pointers to rows */return m;}float **convert_matrix(float *a, long nrl, long nrh, long ncl, long nch)/* allocate a float matrix m[nrl..nrh][ncl..nch] that points to the matrixdeclared in the standard C manner as a[nrow][ncol], where nrow=nrh-nrl+1and ncol=nch-ncl+1.
The routine should be called with the address&a[0][0] as the first argument. */{long i,j,nrow=nrh-nrl+1,ncol=nch-ncl+1;float **m;/* allocate pointers to rows */m=(float **) malloc((size_t) ((nrow+NR_END)*sizeof(float*)));if (!m)nrerror("allocation failure in convert_matrix()");m += NR_END;m -= nrl;/* set pointers to rows */m[nrl]=a-ncl;for(i=1,j=nrl+1;i<nrow;i++,j++) m[j]=m[j-1]+ncol;/* return pointer to array of pointers to rows */return m;}float ***f3tensor(long nrl, long nrh, long ncl, long nch, long ndl, long ndh)/* allocate a float 3tensor with range t[nrl..nrh][ncl..nch][ndl..ndh] */{long i,j,nrow=nrh-nrl+1,ncol=nch-ncl+1,ndep=ndh-ndl+1;float ***t;/* allocate pointers to pointers to rows */t=(float ***) malloc((size_t)((nrow+NR_END)*sizeof(float**)));if (!t) nrerror("allocation failure 1 in f3tensor()");t += NR_END;t -= nrl;/* allocate pointers to rows and set pointers to them */t[nrl]=(float **) malloc((size_t)((nrow*ncol+NR_END)*sizeof(float*)));if (!t[nrl]) nrerror("allocation failure 2 in f3tensor()");t[nrl] += NR_END;t[nrl] -= ncl;/* allocate rows and set pointers to them */t[nrl][ncl]=(float *) malloc((size_t)((nrow*ncol*ndep+NR_END)*sizeof(float)));if (!t[nrl][ncl]) nrerror("allocation failure 3 in f3tensor()");Sample page from NUMERICAL RECIPES IN C: THE ART OF SCIENTIFIC COMPUTING (ISBN 0-521-43108-5)Copyright (C) 1988-1992 by Cambridge University Press.Programs Copyright (C) 1988-1992 by Numerical Recipes Software.Permission is granted for internet users to make one paper copy for their own personal use.
Further reproduction, or any copying of machinereadable files (including this one) to any servercomputer, is strictly prohibited. To order Numerical Recipes books,diskettes, or CDROMsvisit website http://www.nr.com or call 1-800-872-7423 (North America only),or send email to trade@cup.cam.ac.uk (outside North America)./* allocate array of pointers to rows */m=(float **) malloc((size_t) ((nrow+NR_END)*sizeof(float*)));if (!m) nrerror("allocation failure in submatrix()");m += NR_END;m -= newrl;946Appendix Bt[nrl][ncl] += NR_END;t[nrl][ncl] -= ndl;/* return pointer to array of pointers to rows */return t;}void free_vector(float *v, long nl, long nh)/* free a float vector allocated with vector() */{free((FREE_ARG) (v+nl-NR_END));}void free_ivector(int *v, long nl, long nh)/* free an int vector allocated with ivector() */{free((FREE_ARG) (v+nl-NR_END));}void free_cvector(unsigned char *v, long nl, long nh)/* free an unsigned char vector allocated with cvector() */{free((FREE_ARG) (v+nl-NR_END));}void free_lvector(unsigned long *v, long nl, long nh)/* free an unsigned long vector allocated with lvector() */{free((FREE_ARG) (v+nl-NR_END));}void free_dvector(double *v, long nl, long nh)/* free a double vector allocated with dvector() */{free((FREE_ARG) (v+nl-NR_END));}void free_matrix(float **m, long nrl, long nrh, long ncl, long nch)/* free a float matrix allocated by matrix() */{free((FREE_ARG) (m[nrl]+ncl-NR_END));free((FREE_ARG) (m+nrl-NR_END));}void free_dmatrix(double **m, long nrl, long nrh, long ncl, long nch)/* free a double matrix allocated by dmatrix() */{free((FREE_ARG) (m[nrl]+ncl-NR_END));free((FREE_ARG) (m+nrl-NR_END));}void free_imatrix(int **m, long nrl, long nrh, long ncl, long nch)/* free an int matrix allocated by imatrix() */{free((FREE_ARG) (m[nrl]+ncl-NR_END));free((FREE_ARG) (m+nrl-NR_END));}Sample page from NUMERICAL RECIPES IN C: THE ART OF SCIENTIFIC COMPUTING (ISBN 0-521-43108-5)Copyright (C) 1988-1992 by Cambridge University Press.Programs Copyright (C) 1988-1992 by Numerical Recipes Software.Permission is granted for internet users to make one paper copy for their own personal use.
Further reproduction, or any copying of machinereadable files (including this one) to any servercomputer, is strictly prohibited. To order Numerical Recipes books,diskettes, or CDROMsvisit website http://www.nr.com or call 1-800-872-7423 (North America only),or send email to trade@cup.cam.ac.uk (outside North America).for(j=ncl+1;j<=nch;j++) t[nrl][j]=t[nrl][j-1]+ndep;for(i=nrl+1;i<=nrh;i++) {t[i]=t[i-1]+ncol;t[i][ncl]=t[i-1][ncl]+ncol*ndep;for(j=ncl+1;j<=nch;j++) t[i][j]=t[i][j-1]+ndep;}void free_convert_matrix(float **b, long nrl, long nrh, long ncl, long nch)/* free a matrix allocated by convert_matrix() */{free((FREE_ARG) (b+nrl-NR_END));}Sample page from NUMERICAL RECIPES IN C: THE ART OF SCIENTIFIC COMPUTING (ISBN 0-521-43108-5)Copyright (C) 1988-1992 by Cambridge University Press.Programs Copyright (C) 1988-1992 by Numerical Recipes Software.Permission is granted for internet users to make one paper copy for their own personal use. Further reproduction, or any copying of machinereadable files (including this one) to any servercomputer, is strictly prohibited.














