相信matlab的流行, 可以从盗版的速度以及盗版的覆盖率看出, 各大学校物理化学自动化实验室说没有matlab来辅助计算和模拟, 还真不能想象这个实验室规模.
matlab 提供了额外的库供大家存取他的数据文件mat, 该数据文件是二进制的, 有特殊的头和数据格式.
以下函数设计仅仅示范, 大家可以自创
unsigned int matrixLoadFromMat(float* A,char* Matfile,char* matrixName);
unsigned int matrixSaveToMat(float* A, char* matFile,char* matrixName,int m, int n);
两个函数返回值都是存或者取的数据总个数, 运行期间需要安装matlab, 并在系统path目录有matlab的dll 所在目录C:\Program Files\MATLAB\R2010a\bin\win64(这个是64位matlab安装目录) m 和 n 是矩阵的行列数, 注意一下矩阵存储在matlab下面是按照列来存储的.
头文件
#include
unsigned int matrixLoadFromMat(float* A,char* matFile,char* matrixName)
{
MATFile *pMatFile=NULL;
mxArray *pMxArray=NULL;
float* pFloat=NULL;
unsigned int numberOfElements=0;
pMatFile = matOpen(matFile, "r");
if (pMatFile == NULL) {
printf("Error reopening file %s\n", matFile);
return 0;
}
pMxArray = matGetVariable(pMatFile, matrixName);
if (pMxArray == NULL) {
printf("Error reading existing matrix from the %s file\n",matFile);
return 0;
}
pFloat=(float*)mxGetData(pMxArray);
numberOfElements=mxGetNumberOfElements(pMxArray);
for (unsigned int i=0;i {
A[i]=pFloat[i];
}
if (matClose(pMatFile) != 0) {
printf("Error closing file %s\n",matFile);
return 0;
}
mxDestroyArray(pMxArray);
return numberOfElements;
}
unsigned int matrixSaveToMat(float* A, char* matFile,char* matrixName,int m, int n)
{
MATFile *pMatFile=NULL;
mxArray *pMxArray=NULL;
double* pDouble=NULL;
int status;
unsigned int numberOfElements=0;
int i=0;
int j=0;
pMatFile = matOpen(matFile, "w");
pMxArray = mxCreateDoubleMatrix(m,n,mxREAL);
pDouble=(double*)malloc(m*n*sizeof(double));
for (int i=0;i {
pDouble[i]=A[i]; //转换成double, matlab默认数据格式double
}
if (pMxArray == NULL) {
printf("Unable to create mxArray.\n");
return 0;
}
memcpy((void*)(mxGetPr(pMxArray)), (void*)pDouble,m*n*mxGetElementSize (pMxArray));
status = matPutVariable(pMatFile, matrixName, pMxArray);
if (status != 0) {
printf("%s : Error using matPutVariable on line %d\n", __FILE__, __LINE__);
return 0;
}
mxDestroyArray(pMxArray);
free(pDouble);
if (matClose(pMatFile) != 0) {
printf("Error closing file %s\n",matFile);
return 0;
}
numberOfElements=mxGetNumberOfElements(pMxArray);
return numberOfElements;
}
代码相当简单, 基本上就是用指针来获取数据,相信大家都能看得懂, 有不懂的, 再来询问.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20259129/viewspace-662454/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/20259129/viewspace-662454/