用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);/**/
}

posted @ 2013-03-12 22:54  boys2012  阅读(580)  评论(0编辑  收藏  举报