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

我的计算机环境是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;
}






 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值