📄 nrutil.c
字号:
/* nrutil.c - supplied by the Numerical Recipes folks; minor modifications made by David MacKay. Copyright remains with the Numerical Recipes authors */#include <stdlib.h>#include <stdio.h>#include "nrutil.h"void nrerror(const char error_text[]){ fprintf(stderr,"Numerical Recipes run-time error...\n"); fprintf(stderr,"%s\n",error_text); fprintf(stderr,"...now exiting to system...\n"); exit(1);}void myerror(const char error_text[]){ fprintf(stderr,"%s\n",error_text);}float *vector(int nl,int nh){ float *v; v=(float *)malloc((unsigned) (nh-nl+1)*sizeof(float)); if (!v) nrerror("allocation failure in vector()"); return v-nl;}int *ivector(int nl,int nh){ int *v; v=(int *)malloc((unsigned) (nh-nl+1)*sizeof(int)); if (!v) nrerror("allocation failure in ivector()"); return v-nl;}unsigned char *cvector(int nl,int nh){ unsigned char *v; v=(unsigned char *)malloc((unsigned) (nh-nl+1)*sizeof(unsigned char)); if (!v) nrerror("allocation failure in ivector()"); return v-nl;}double *dvector(int nl,int nh){ double *v; v=(double *)malloc((unsigned) (nh-nl+1)*sizeof(double)); if (!v) nrerror("allocation failure in dvector()"); return v-nl;}float **matrix(int nrl,int nrh,int ncl,int nch){ int i; float **m; m=(float **) malloc((unsigned) (nrh-nrl+1)*sizeof(float*)); if (!m) nrerror("allocation failure 1 in matrix()"); m -= nrl; for(i=nrl;i<=nrh;i++) { m[i]=(float *) malloc((unsigned) (nch-ncl+1)*sizeof(float)); if (!m[i]) nrerror("allocation failure 2 in matrix()"); m[i] -= ncl; } return m;}double **dmatrix(int nrl,int nrh,int ncl,int nch){ int i; double **m; m=(double **) malloc((unsigned) (nrh-nrl+1)*sizeof(double*)); if (!m) nrerror("allocation failure 1 in dmatrix()"); m -= nrl; for(i=nrl;i<=nrh;i++) { m[i]=(double *) malloc((unsigned) (nch-ncl+1)*sizeof(double)); if (!m[i]) nrerror("allocation failure 2 in dmatrix()"); m[i] -= ncl; } return m;}int **imatrix(int nrl,int nrh,int ncl,int nch){ int i,**m; m=(int **)malloc((unsigned) (nrh-nrl+1)*sizeof(int*)); if (!m) nrerror("allocation failure 1 in imatrix()"); m -= nrl; for(i=nrl;i<=nrh;i++) { m[i]=(int *)malloc((unsigned) (nch-ncl+1)*sizeof(int)); if (!m[i]) nrerror("allocation failure 2 in imatrix()"); m[i] -= ncl; } return m;}unsigned char **cmatrix(int nrl,int nrh,int ncl,int nch){ int i; unsigned char **m; m=(unsigned char **)malloc((unsigned) (nrh-nrl+1)*sizeof(unsigned char*)); if (!m) nrerror("allocation failure 1 in cmatrix()"); m -= nrl; for(i=nrl;i<=nrh;i++) { m[i]=(unsigned char *)malloc((unsigned) (nch-ncl+1)*sizeof(unsigned char)); if (!m[i]) nrerror("allocation failure 2 in cmatrix()"); m[i] -= ncl; } return m;}float **submatrix(float **a, int oldrl,int oldrh,int oldcl,int oldch, int newrl,int newcl){ int i,j; float **m; m=(float **) malloc((unsigned) (oldrh-oldrl+1)*sizeof(float*)); if (!m) nrerror("allocation failure in submatrix()"); m -= newrl; for(i=oldrl,j=newrl;i<=oldrh;i++,j++) m[j]=a[i]+oldcl-newcl; return m;}/*void free_vector(float *v,int nl,int nh){ free((char*) (v+nl));}*/void free_cvector(unsigned char *v,int nl,int nh){ free((char*) (v+nl));}void free_ivector(int *v,int nl,int nh){ free((char*) (v+nl));}void free_dvector(double *v,int nl,int nh){ free((char*) (v+nl));}void free_matrix(float **m,int nrl,int nrh,int ncl,int nch){ int i; for(i=nrh;i>=nrl;i--) free((char*) (m[i]+ncl)); free((char*) (m+nrl));}void free_dmatrix(double **m,int nrl,int nrh,int ncl,int nch){ int i; for(i=nrh;i>=nrl;i--) free((char*) (m[i]+ncl)); free((char*) (m+nrl));}void free_cmatrix(unsigned char **m,int nrl,int nrh,int ncl,int nch){ int i; for(i=nrh;i>=nrl;i--) free((char*) (m[i]+ncl)); free((char*) (m+nrl));}void free_imatrix(int **m,int nrl,int nrh,int ncl,int nch){ int i; for(i=nrh;i>=nrl;i--) free((char*) (m[i]+ncl)); free((char*) (m+nrl));}void free_submatrix(float **b,int nrl,int nrh,int ncl,int nch){ free((char*) (b+nrl));}float **convert_matrix(float *a,int nrl,int nrh,int ncl,int nch){ int i,j,nrow,ncol; float **m; nrow=nrh-nrl+1; ncol=nch-ncl+1; m = (float **) malloc((unsigned) (nrow)*sizeof(float*)); if (!m) nrerror("allocation failure in convert_matrix()"); m -= nrl; for(i=0,j=nrl;i<=nrow-1;i++,j++) m[j]=a+ncol*i-ncl; return m;}void free_convert_matrix(float **b,int nrl,int nrh,int ncl,int nch){ free((char*) (b+nrl));}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -