00001 00002 #include <malloc.h> 00003 #include <stdio.h> 00004 00005 void nrerror(error_text) 00006 char error_text[]; 00007 { 00008 void exit(); 00009 00010 fprintf(stderr,"Numerical Recipes run-time error...\n"); 00011 fprintf(stderr,"%s\n",error_text); 00012 fprintf(stderr,"...now exiting to system...\n"); 00013 exit(1); 00014 } 00015 00016 00017 00018 float *vector(nl,nh) 00019 int nl,nh; 00020 { 00021 float *v; 00022 00023 v=(float *)malloc((unsigned) (nh-nl+1)*sizeof(float)); 00024 if (!v) nrerror("allocation failure in vector()"); 00025 return v-nl; 00026 } 00027 00028 int *ivector(nl,nh) 00029 int nl,nh; 00030 { 00031 int *v; 00032 00033 v=(int *)malloc((unsigned) (nh-nl+1)*sizeof(int)); 00034 if (!v) nrerror("allocation failure in ivector()"); 00035 return v-nl; 00036 } 00037 00038 double *dvector(nl,nh) 00039 int nl,nh; 00040 { 00041 double *v; 00042 00043 v=(double *)malloc((unsigned) (nh-nl+1)*sizeof(double)); 00044 if (!v) nrerror("allocation failure in dvector()"); 00045 return v-nl; 00046 } 00047 00048 00049 00050 float **matrix(nrl,nrh,ncl,nch) 00051 int nrl,nrh,ncl,nch; 00052 { 00053 int i; 00054 float **m; 00055 00056 m=(float **) malloc((unsigned) (nrh-nrl+1)*sizeof(float*)); 00057 if (!m) nrerror("allocation failure 1 in matrix()"); 00058 m -= nrl; 00059 00060 for(i=nrl;i<=nrh;i++) { 00061 m[i]=(float *) malloc((unsigned) (nch-ncl+1)*sizeof(float)); 00062 if (!m[i]) nrerror("allocation failure 2 in matrix()"); 00063 m[i] -= ncl; 00064 } 00065 return m; 00066 } 00067 00068 double **dmatrix(nrl,nrh,ncl,nch) 00069 int nrl,nrh,ncl,nch; 00070 { 00071 int i; 00072 double **m; 00073 00074 m=(double **) malloc((unsigned) (nrh-nrl+1)*sizeof(double*)); 00075 if (!m) nrerror("allocation failure 1 in dmatrix()"); 00076 m -= nrl; 00077 00078 for(i=nrl;i<=nrh;i++) { 00079 m[i]=(double *) malloc((unsigned) (nch-ncl+1)*sizeof(double)); 00080 if (!m[i]) nrerror("allocation failure 2 in dmatrix()"); 00081 m[i] -= ncl; 00082 } 00083 return m; 00084 } 00085 00086 int **imatrix(nrl,nrh,ncl,nch) 00087 int nrl,nrh,ncl,nch; 00088 { 00089 int i,**m; 00090 00091 m=(int **)malloc((unsigned) (nrh-nrl+1)*sizeof(int*)); 00092 if (!m) nrerror("allocation failure 1 in imatrix()"); 00093 m -= nrl; 00094 00095 for(i=nrl;i<=nrh;i++) { 00096 m[i]=(int *)malloc((unsigned) (nch-ncl+1)*sizeof(int)); 00097 if (!m[i]) nrerror("allocation failure 2 in imatrix()"); 00098 m[i] -= ncl; 00099 } 00100 return m; 00101 } 00102 00103 00104 00105 float **submatrix(a,oldrl,oldrh,oldcl,oldch,newrl,newcl) 00106 float **a; 00107 int oldrl,oldrh,oldcl,oldch,newrl,newcl; 00108 { 00109 int i,j; 00110 float **m; 00111 00112 m=(float **) malloc((unsigned) (oldrh-oldrl+1)*sizeof(float*)); 00113 if (!m) nrerror("allocation failure in submatrix()"); 00114 m -= newrl; 00115 00116 for(i=oldrl,j=newrl;i<=oldrh;i++,j++) m[j]=a[i]+oldcl-newcl; 00117 00118 return m; 00119 } 00120 00121 00122 00123 void free_vector(v,nl,nh) 00124 float *v; 00125 int nl,nh; 00126 { 00127 free((char*) (v+nl)); 00128 } 00129 00130 void free_ivector(v,nl,nh) 00131 int *v,nl,nh; 00132 { 00133 free((char*) (v+nl)); 00134 } 00135 00136 void free_dvector(v,nl,nh) 00137 double *v; 00138 int nl,nh; 00139 { 00140 free((char*) (v+nl)); 00141 } 00142 00143 00144 00145 void free_matrix(m,nrl,nrh,ncl,nch) 00146 float **m; 00147 int nrl,nrh,ncl,nch; 00148 { 00149 int i; 00150 00151 for(i=nrh;i>=nrl;i--) free((char*) (m[i]+ncl)); 00152 free((char*) (m+nrl)); 00153 } 00154 00155 void free_dmatrix(m,nrl,nrh,ncl,nch) 00156 double **m; 00157 int nrl,nrh,ncl,nch; 00158 { 00159 int i; 00160 00161 for(i=nrh;i>=nrl;i--) free((char*) (m[i]+ncl)); 00162 free((char*) (m+nrl)); 00163 } 00164 00165 void free_imatrix(m,nrl,nrh,ncl,nch) 00166 int **m; 00167 int nrl,nrh,ncl,nch; 00168 { 00169 int i; 00170 00171 for(i=nrh;i>=nrl;i--) free((char*) (m[i]+ncl)); 00172 free((char*) (m+nrl)); 00173 } 00174 00175 00176 00177 void free_submatrix(b,nrl,nrh,ncl,nch) 00178 float **b; 00179 int nrl,nrh,ncl,nch; 00180 { 00181 free((char*) (b+nrl)); 00182 } 00183 00184 00185 00186 float **convert_matrix(a,nrl,nrh,ncl,nch) 00187 float *a; 00188 int nrl,nrh,ncl,nch; 00189 { 00190 int i,j,nrow,ncol; 00191 float **m; 00192 00193 nrow=nrh-nrl+1; 00194 ncol=nch-ncl+1; 00195 m = (float **) malloc((unsigned) (nrow)*sizeof(float*)); 00196 if (!m) nrerror("allocation failure in convert_matrix()"); 00197 m -= nrl; 00198 for(i=0,j=nrl;i<=nrow-1;i++,j++) m[j]=a+ncol*i-ncl; 00199 return m; 00200 } 00201 00202 00203 00204 void free_convert_matrix(b,nrl,nrh,ncl,nch) 00205 float **b; 00206 int nrl,nrh,ncl,nch; 00207 { 00208 free((char*) (b+nrl)); 00209 }