用VC6读写MATLAB的.mat文件(转)
用VC6读写MATLAB的.mat文件(转)
选VC的菜单Tools->Options,在弹出对话框中点选Directories标签,在右方的下拉菜单中选择Include files,然后在下方列表中添加($MATLAB$)\extern\include;再在右方的下拉菜单中选择Library files,然后在下方列表中添加($MATLAB$)\extern\lib\win32\microsoft\msvc60。
注:上面的($MATLAB$)以计算机中MATLAB的安装位置替换;如果使用的VC版本是5.0,则把列表中添加路径中的msvc60替换成msvc50即可。
对于需要操作.mat文件的工程,选择菜单Project->Settings,在弹出对话框中点选Link标签,在Object/library modules中加入 libmx.lib libmat.lib。下面是程序中的调用,以例子说明用法。
写入.mat文件的示例:
#include "mat.h"
void main() {
MATFile *pMF; // mat文件
mxArray *pA; // 矩阵指针
double *A; // 数据指针
int i, j;
// 打开一个test.mat文件,只写,如果不存在就新建,否则删除重建
pMF = matOpen("test.mat", "w");
// 新建一个12*4的矩阵只有实部(在MATLAB里矩阵都是复矩阵)
pA = mxCreateDoubleMatrix(12, 4, mxREAL);
// 给这个矩阵命名为x
mxSetName(pA, "x");
// 让指针Array指向这个矩阵的数据
A = mxGetPr(pA);
// 在VC里数组是按行排放的,在MATLAB里矩阵是按列排放的,)
for (i = 0; i < 12; i++)
for (j = 0; j < 4; j++)
A[j * 12 + i] = i + 0.001 * j;
// 将矩阵写到文件test内
matPutArray(pMF, pA);
// 释放矩阵空间
mxDestroyArray(pA);
// 关闭文件
matClose(pMF);
}
读出.mat文件的示例:
#include <iostream.h>
#include "mat.h"
void main() {
MATFile *pMF; // mat文件
mxArray *pA; // 矩阵指针
double *A; // 数据指针
int i, j;
// 打开test.mat文件,只读(这里作为简单示例不做错误检查)
pMF = matOpen("d:\nick\test.mat", "r");
// 获得矩阵
pA = matGetArray(pMF, "x");
// 获得矩阵数据地址
A = mxGetPr(pA);
// 列印矩阵
for (i = 0; i < 12; i++) {
for (j = 0; j < 4; j++) cout << A[j * 12 + i] << ' ';
cout << endl;
}
// 释放矩阵空间
mxDestroyArray(pA);
// 关闭文件
matClose(pMF);/**/
}