整理VS_2010读写.mat文件

有时用到VS读写.mat文件,所以结合自己的操作过程,整理出如下的操作步骤

1.首先是环境变量Path的配置
  计算机->属性->高级系统设置->高级->环境变量
  在Path中已经存在D:\MATLAB_2011a\R2011a\bin\,但是D:\MATLAB_2011a\R2011a\bin\win32下有个重要的libmat.dll。如果不把D:\MATLAB_2011a\R2011a\bin\改为      D:\MATLAB_2011a\R2011a\bin\win32,程序无法运行。
  理论上D:\MATLAB_2011a\R2011a\bin\应该会向深一步检索到libmat.dll。坑爹的windows这一步并有去做。这步设置完成后要重启电脑。


2.VS 2010配置

  //新建一个工程,在属性管理器中选择 工程->属性->VC++目录。
  //设置  包含目录为:D:\MATLAB_2011a\extern\include
  //设置  库目录为:  D:\MATLAB_2011a\extern\lib\win32\microsoft

 上面的3条设置并不是必须的,所以用//表示出


1).工程属性->C/C++->常规->附加包含目录 添加:

    MATLAB\R2010b\extern\include

    MATLAB\R2010b\extern\include\win64

2).链接器->常规->附加库目录 添加:

    MATLAB\R2010b\extern\lib\win64\microsoft

    MATLAB\R2010b\extern\lib\win32\microsoft

3).链接器->输入->附加依赖库 添加:

     libmat.lib

     libmx.lib

     libmex.lib

     libeng.lib


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

4).(顶菜单)生成->配置管理器->平台:X64

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

    MachineX64(/MACHINE:X64)

6).计算机环境变量->path 添加:

    D:\...\MATLAB\R2010b\extern\lib\win64\microsoft;

    D:\...\MATLAB\R2010b\bin\win64;


利用MATLAB提供的有关mat文件的编程接口函数,MATLAB的库函数中包含了mat文件接口函数库,其中有各种对mat文件进行读写的函数,都是以mat开头的函数。

/*
这个文件代码是用VS_2010读写由MATLAB生成的.mat文件:
1.整个代码的实现是参考网上《C++读写.mat文件》的一篇博客
  网址为http://blog.csdn.net/left_la/article/details/8206645
2.首先对于VS_2010的整个配置是完全参照博客的内容
  配置时同时参考http://www.360doc.com/content/14/0408/16/15831056_367275320.shtml
  《使用VS2010调用matlab的mat格式文件》的文章,尤其注意此文章中的红色字体部分。
3.对于原博客内容中的第12行代码“Matrix<double> A(M,N);”编译通不过,对此作了修改,
  用了Eigen的结构,所以头文件部分也加入了一些
4.因为目前还用不到写.mat文件,所以没调试
*/

#include <yvals.h>
#include <iostream>
#if (_MSC_VER >= 1600)
#define __STDC_UTF_16__
#endif 

#include <mat.h>
#include <Eigen/Core>

int main()
{
	MATFile *pmatFile = NULL;
	mxArray *pMxArray = NULL;

	// 读取.mat文件(例:mat文件名为"initUrban.mat",其中包含"initA")
	double *initA;

	pmatFile = matOpen("B.mat","r");
	pMxArray = matGetVariable(pmatFile, "b");
	initA = (double*) mxGetData(pMxArray);
	int M = mxGetM(pMxArray);
        int N = mxGetN(pMxArray);
	Eigen::MatrixXd A(M,N);
	for (int i=0; i<M; i++)
	{
		for (int j=0; j<N; j++)
			A(i,j) = initA[M*j+i];
		
	}

	matClose(pmatFile);
	mxFree(initA);
	std::cout << M<<','<<N<< std::endl;
	std::cout << A << std::endl;

	/*
	// 生成.mat文件
	double *outA = new double[M*N];
	for (int i=0; i<M; i++)
		for (int j=0; j<N; j++)
			outA[M*j+i] = A(i,j);
	pmatFile = matOpen("A.mat","w");
	pMxArray = mxCreateDoubleMatrix(M, N, mxREAL);
	mxSetData(pMxArray, outA);
	matPutVariable(pmatFile, "A", pMxArray);
	matClose(pmatFile);
	*/
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值