| 注册 | 忘记密码
奇技淫巧 - 阅读主题
<<  <  1  >  >>

用VC6读写MATLAB的.mat文件

好(0) 差(0) 阅读(6509) 评论(0)
Wen 给 Wen 发消息 给 Wen 发email
作者头像
等级:◆◆◆◆◇◇◇

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

Share/Save/Bookmark
最后修改:Wen 于 2007-07-17 21:54:13

发表于 2006-03-05 16:30:17
奇技淫巧 - 阅读主题
<<  <  1  >  >>

Valid XHTML 1.0 | Valid CSS2 | WAI-A WCAG 1.0

Copyright 2005-2018 WEN'S Horizon [32/0.076]