文档库 最新最全的文档下载
当前位置:文档库 › C++创建和调用matlab的MAT文件

C++创建和调用matlab的MAT文件

C++创建和调用matlab的MAT文件
C++创建和调用matlab的MAT文件

C++创建和调用MATALB的MAT文件

所用软硬件平台:VS2008 sp1 matlab 2009b ,32位PC,XP系统

所用程序

//创建一个.mat文件,并在里面存储一个double型变量,并赋值初值

#include

#include/* For strcmp() */

#include/* For EXIT_FAILURE, EXIT_SUCCESS */

#include"mat.h"

using namespace std;

int main()

{

mxArray *pa1;

double data[1]={3.141592653};

MATFile *pmat;//定义一个MAT文件指针

const char*file="VS_MAT.mat";

cout<<"Creating file "<

pmat=matOpen(file,"w");//打开或创建一个MAT文件

if(pmat==NULL)

{

cout<<"创建失败"<

return(EXIT_FAILURE);

}

pa1=mxCreateDoubleMatrix(1,1,mxREAL);//mxREAL表示创建一个实数的*1的array

if(pa1==NULL)

{

cout<<"创建失败"<

return(EXIT_FAILURE);

}

//初始化变量pa1;向MAT文件中写入变量pa1,并命名为a;

memcpy( (void*)(mxGetPr(pa1)),(void*)data,sizeof(data));//mxGetPr与mxGetPi分别是得到double类型

//array的实部指针和虚部指针的API int status;

status=matPutVariable(pmat,"a",pa1);//向MAT文件中写入变量pa1,并命名为a;

if(status!=0)

{

cout<<"赋值失败"<

return(EXIT_FAILURE);

}

//清除矩阵

mxDestroyArray(pa1);

//关闭MAT文件

if(matClose(pmat)!=0)

{

cout<<"关闭mat文件失败"<

return(EXIT_FAILURE);

}

/******************************************************************/ //对VS_MAT.mat 中变量a 读取,并进行运算,后存储

pmat=matOpen(file,"u");//关键,u:表示读写方式打开,r,只读,我,只写,if(pmat==NULL)

{

cout<<"打开mat文件失败"<

return EXIT_FAILURE;

}

//在VS_MAT.mat中读取变量a

pa1=matGetVariable(pmat,"a");

if(pa1==NULL)

{

cout<<"读取变量失败"<

return EXIT_FAILURE;

}

//对a运算,平方

memcpy( (void*)data,(void*)mxGetPr(pa1),sizeof(data));

data[0]=data[0]*data[0];

//??????

memcpy( (void*)mxGetPr(pa1),(void*)data,sizeof(data));

status=matPutVariable(pmat,"a",pa1);//向MAT文件中写入变量pa1,并命名为a;

if(status!=0)

{

cout<<"赋值失败"<

return(EXIT_FAILURE);

}

//清除矩阵

mxDestroyArray(pa1);

//关闭MAT文件

if(matClose(pmat)!=0)

{

cout<<"关闭mat文件失败"<

return(EXIT_FAILURE);

}

cout<<"press any key to continue"<

cin.get();

return 0;

}

VS2008环境设置

第一步:通过菜单工具/选项,打开选项页,点击项目和解决方案,然后在页面右面“显示以下内容的目录”下拉列表框中选择“包含文件”,添加路径:"D:\Program files\MATLAB\R2009b\extern\include"。

第二步:选择“库文件”,添加路径:

D:\Program Files\MATLAB\R2009b\extern\lib\win32\microsoft

以上步骤1)、2)只需设置一次,因为是对VS2008整体工作环境的设置。

3) 右击工程/属性,打开项目属性页,选择链接器/输入,在附加依赖项编辑框中,添加文件名libmx.lib libmat.lib

4)如此设置后,能够正常编译,但运行时报错说找不到dll文件,如下

而libmx.dll是存在于D:\Program Files\MATLAB\R2009b\bin\win32文件夹中,而在Win7系统变量里Matlab在安装的时候时只写入了路径D:\Program Files\MATLAB\R2009b\bin,故系统不会自动到其子文件中找dll,从而报错说找不到文件,这也解释了为什么旧版本的Matlab无此问题,因为可能旧版本的Matlab中没有将这些dll分离放到win32子文件夹中。

所以只要在系统变量中包含路径D:\Program Files\MATLAB\R2009b\bin\win32即可。

设置路径:我的电脑->(右击)属性->高级->环境变量->新建

变量名:Path

变量值:D:\Program Files\MATLAB\R2009b\bin\win32

如果以上设置完成后,运行仍报错,可以尝试将VS2008关掉再启动,我就是这样,环境变量设置好后,仍然报错,重启电脑也解决不了问题,后尝试关掉工程,再启动运行就OK了!如果还出现下面问题:

如下设置:

最后VS_MAT.mat文件在当前project所在目录下可以找到

相关文档