您的位置:首页 > 编程语言 > MATLAB

C++读写matlab数据.mat文件

2013-08-22 11:19 483 查看
我的计算机环境是win8 64位系统,VS2010,matlab R2010b

step1:

新建项目 项目属性设置:

VC++目录

->包含目录 添加:

MATLAB\R2010b\extern\include

MATLAB\R2010b\extern\include\win64

->库目录 添加:

MATLAB\R2010b\extern\lib\win64\microsoft

链接器

->输入->附加依赖库 添加:

libmat.lib

libmx.lib

libmex.lib

libeng.lib

step2:

计算机环境变量path 添加:

MATLAB\R2010b\bin\win64;

step3:

由于所安装的matlab为64位,要调用其函数,需要将工程转换为X64

vs2010菜单

生成->配置管理器->平台:X64

项目属性

链接器->高级->目标计算机:

MachineX64(/MACHINE:X64)

step4:

关闭vs2010重新打开项目,测试(顺便用了Eigen库)

// com_mat_read.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include "mat.h"

#include "Eigen/Dense"

#include "iostream"

using Eigen::MatrixXd;

using namespace Eigen;

using namespace std;

void readmat(const char *filename,const char *variablename,MatrixXd & matdata)

{

mwSize M,N;

double *initA;

const char *myfile;

MATFile *pmatFile = NULL;

mxArray *pMxArray = NULL;

myfile=filename;

pmatFile = matOpen(myfile,"r");

pMxArray = matGetVariable(pmatFile, variablename);

initA = (double*) mxGetData(pMxArray);

M = mxGetM(pMxArray);

N = mxGetN(pMxArray);

MatrixXd inputux(M,N);

printf("%d * %d matrix:datamat\n",M,N);

for (int i=0; i<M; i++)

for (int j=0; j<N; j++)

inputux(i,j) = initA[M*j+i];

matClose(pmatFile);

mxFree(initA);

matdata=inputux;

}

void test()

{

char filename[2][20]={"inputx.mat","inputP.mat"};

char variablename[2][20]={"inputx","inputP"};

MatrixXd A[2];

for(int i=0;i<2;++i)

{

readmat(filename[i],variablename[i],A[i]);

}

//cout<<A[0]<<endl<<A[1]<<endl;

}

int _tmain(int argc, _TCHAR* argv[])

{

test();

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: