基本信息
源码名称:HMM的C语言实现(有详细注释)
源码大小:7.87KB
文件格式:.rar
开发语言:C/C++
更新时间:2019-04-01
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
//nrutil.cpp #include "StdAfx.h" #include <stdio.h> #include <stddef.h> #include <stdlib.h> //报告错误 void nrerror(char *error_text) { printf("Numerical Recipes run-time error...\n"); printf("%s\n",error_text); printf("...now exiting to system...\n"); exit(1); } /***************************************************************************** * 函数名称:vector * 功能:申请一个实数数组 * 参数:nl:数组的最低下标 * nh:数组的最高下标 * 返回:数组地址 */ float *vector(long nl,long nh) { float *v; v=(float *)calloc((unsigned) (nh-nl 1),sizeof(float)); if (!v) nrerror("allocation failure in vector()"); return v-nl; } /***************************************************************************** * 函数名称:ivector * 功能:申请一个整数数组 * 参数:nl:数组的最低下标 * nh:数组的最高下标 * 返回:数组地址 */ int *ivector(long nl,long nh) { int *v; v=(int *)calloc((unsigned) (nh-nl 1),sizeof(int)); if (!v) nrerror("allocation failure in ivector()"); return v-nl; } /***************************************************************************** * 函数名称:cvector * 功能:申请一个无符号字符数组 * 参数:nl:数组的最低下标 * nh:数组的最高下标 * 返回:数组地址 */ unsigned char *cvector(long nl,long nh) { unsigned char *v; v=(unsigned char *)calloc((unsigned) (nh-nl 1),sizeof(unsigned char)); if (!v) nrerror("allocation failure in cvector()"); return v-nl; } /***************************************************************************** * 函数名称:lvector * 功能:申请一个长整数型数组 * 参数:nl:数组的最低下标 * nh:数组的最高下标 * 返回:数组地址 */ unsigned long *lvector(long nl,long nh) { unsigned long *v; v=(unsigned long *)calloc((unsigned) (nh-nl 1),sizeof(unsigned long)); if (!v) nrerror("allocation failure in lvector()"); return v-nl; } /***************************************************************************** * 函数名称:dvector * 功能:申请一个双精度实数数组 * 参数:nl:数组的最低下标 * nh:数组的最高下标 * 返回:数组地址 */ double *dvector(long nl,long nh) { double *v; v=(double *)calloc((unsigned) (nh-nl 1),sizeof(double)); if (!v) nrerror("allocation failure in dvector()"); return v-nl; } /***************************************************************************** * 函数名称:matrix * 功能:申请一个实数二维数组(矩阵) * 参数:nrl:数组的行最低下标 * nrh:数组的行最高下标 * ncl:数组的列最低下标 * nch:数组的列最高下标 * 返回:数组地址 */ float **matrix(long nrl,long nrh,long ncl,long nch) { int i; float **m; m=(float **) calloc((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 *) calloc((unsigned) (nch-ncl 1),sizeof(float)); if (!m[i]) nrerror("allocation failure 2 in matrix()"); m[i] -= ncl; } return m; } /***************************************************************************** * 函数名称:dmatrix * 功能:申请一个双精度实数二维数组(矩阵) * 参数:nrl:数组的行最低下标 * nrh:数组的行最高下标 * ncl:数组的列最低下标 * nch:数组的列最高下标 * 返回:数组地址 */ double **dmatrix(long nrl,long nrh,long ncl,long nch) { int i; double **m; m=(double **) calloc((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 *) calloc((unsigned) (nch-ncl 1),sizeof(double)); if (!m[i]) nrerror("allocation failure 2 in dmatrix()"); m[i] -= ncl; } return m; } /***************************************************************************** * 函数名称:imatrix * 功能:申请一个整数二维数组(矩阵) * 参数:nrl:数组的行最低下标 * nrh:数组的行最高下标 * ncl:数组的列最低下标 * nch:数组的列最高下标 * 返回:数组地址 */ int **imatrix(long nrl,long nrh,long ncl,long nch) { int i,**m; m=(int **)calloc((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 *)calloc((unsigned) (nch-ncl 1),sizeof(int)); if (!m[i]) nrerror("allocation failure 2 in imatrix()"); m[i] -= ncl; } return m; } /***************************************************************************** * 函数名称:cmatrix * 功能:申请一个无符号字符型二维数组(矩阵) * 参数:nrl:数组的行最低下标 * nrh:数组的行最高下标 * ncl:数组的列最低下标 * nch:数组的列最高下标 * 返回:数组地址 */ unsigned char **cmatrix(long nrl,long nrh,long ncl,long nch) { int i; unsigned char **m; m=(unsigned char **) calloc((unsigned) (nrh-nrl 1),sizeof(unsigned char*)); if (!m) nrerror("allocation failure 1 in dmatrix()"); m -= nrl; for(i=nrl;i<=nrh;i ) { m[i]=(unsigned char *) calloc((unsigned) (nch-ncl 1),sizeof(unsigned char)); if (!m[i]) nrerror("allocation failure 2 in dmatrix()"); m[i] -= ncl; } return m; } /***************************************************************************** * 函数名称:submatrix * 功能:求一个二维矩阵的子矩阵 * 参数:a:二维矩阵的首地址 * oldrl:数组的行最低下标 * oldrh:数组的行最高下标 * oldcl:数组的列最低下标 * oldch:数组的列最高下标 * newrl:新数组的行最低下标 * newcl:新数组的列最低下标 * 返回:数组地址 */ float **submatrix(float **a,long oldrl,long oldrh,long oldcl,long oldch,long newrl,long newcl) { int i,j; float **m; m=(float **) calloc((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; } /***************************************************************************** * 函数名称:convert_matrix * 功能:将一个实数一维数组转化为二维数组(矩阵) * 参数:a:原一维数组 * nrl:数组的行最低下标 * nrh:数组的行最高下标 * ncl:数组的列最低下标 * nch:数组的列最高下标 * 返回:二维数组地址 */ float **convert_matrix(float *a,long nrl,long nrh,long ncl,long nch) { int i,j,nrow,ncol; float **m; nrow=nrh-nrl 1; ncol=nch-ncl 1; m = (float **) calloc((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; } /***************************************************************************** * 函数名称:free_vector * 功能:释放一个实数一维数组 * 参数:nl:数组的行最低下标 * nh:数组的行最高下标 * 无返回值 */ void free_vector(float *v,long nl,long nh) { free((char*) (v nl)); } /***************************************************************************** * 函数名称:free_dvector * 功能:释放一个整型一维数组 * 参数:nl:数组的行最低下标 * nh:数组的行最高下标 * 无返回值 */ void free_ivector(int *v,long nl,long nh) { free((char*) (v nl)); } /***************************************************************************** * 函数名称:free_vector * 功能:释放一个无符号字符型一维数组 * 参数:nl:数组的行最低下标 * nh:数组的行最高下标 * 无返回值 */ void free_cvector(unsigned char *v,long nl,long nh) { free((char*) (v nl)); } /***************************************************************************** * 函数名称:free_vector * 功能:释放一个长整型一维数组 * 参数:nl:数组的行最低下标 * nh:数组的行最高下标 * 无返回值 */ void free_lvector(unsigned long *v,long nl,long nh) { free((char*) (v nl)); } /***************************************************************************** * 函数名称:free_vector * 功能:释放一个双精度一维数组 * 参数:nl:数组的行最低下标 * nh:数组的行最高下标 * 无返回值 */ void free_dvector(double *v,long nl,long nh) { free((char*) (v nl)); } /***************************************************************************** * 函数名称:free_matrix * 功能:释放一个实数二维数组(矩阵) * 参数:m:原数组地址 * nrl:数组的行最低下标 * nrh:数组的行最高下标 * ncl:数组的列最低下标 * nch:数组的列最高下标 * 无返回值 */ void free_matrix(float **m,long nrl,long nrh,long ncl,long nch) { int i; for(i=nrh;i>=nrl;i--) free((char*) (m[i] ncl)); free((char*) (m nrl)); } /***************************************************************************** * 函数名称:free_dmatrix * 功能:释放一个双精度二维数组(矩阵) * 参数:m:原数组地址 * nrl:数组的行最低下标 * nrh:数组的行最高下标 * ncl:数组的列最低下标 * nch:数组的列最高下标 * 无返回值 */ void free_dmatrix(double **m,long nrl,long nrh,long ncl,long nch) { int i; for(i=nrh;i>=nrl;i--) free((char*) (m[i] ncl)); free((char*) (m nrl)); } /***************************************************************************** * 函数名称:free_imatrix * 功能:释放一个整型二维数组(矩阵) * 参数:m:原数组地址 * nrl:数组的行最低下标 * nrh:数组的行最高下标 * ncl:数组的列最低下标 * nch:数组的列最高下标 * 无返回值 */ void free_imatrix(int **m,long nrl,long nrh,long ncl,long nch) { int i; for(i=nrh;i>=nrl;i--) free((char*) (m[i] ncl)); free((char*) (m nrl)); } /***************************************************************************** * 函数名称:free_cmatrix * 功能:释放一个无符号字符二维数组(矩阵) * 参数:m:原数组地址 * nrl:数组的行最低下标 * nrh:数组的行最高下标 * ncl:数组的列最低下标 * nch:数组的列最高下标 * 无返回值 */ void free_cmatrix(unsigned char **m,long nrl,long nrh,long ncl,long nch) { int i; for(i=nrh;i>=nrl;i--) free((char*) (m[i] ncl)); free((char*) (m nrl)); } /***************************************************************************** * 函数名称:free_submatrix * 功能:释放一个子二维数组(矩阵) * 参数:b:原数组地址 * nrl:数组的行最低下标 * nrh:数组的行最高下标 * ncl:数组的列最低下标 * nch:数组的列最高下标 * 无返回值 */ void free_submatrix(float **b,long nrl,long nrh,long ncl,long nch) { free((char*) (b nrl)); } /***************************************************************************** * 函数名称:free_convert_matrix * 功能:释放转化后的二维数组(矩阵) * 参数:b:原数组地址 * nrl:数组的行最低下标 * nrh:数组的行最高下标 * ncl:数组的列最低下标 * nch:数组的列最高下标 * 无返回值 */ void free_convert_matrix(float **b,long nrl,long nrh,long ncl,long nch) { free((char*) (b nrl)); }