matlab文件操作

1.matlab文件打开与关闭

 文件的打开与关闭

对一个文件操作以前,必须先打开这个文件

fopen函数:用于打开文件,调用格式为

matlab文件操作

其中,fid为文件识别号,

成功打开文件时,fid返回一个整数,用来标识该文件

打开不成功时,fid为-1

filename指定待操作的文件名

permission为对文件的允许使用方式

文件的使用方式

matlab文件操作这是默认方式,如果指定的文件不存在,fopen的返回值为-1

matlab文件操作如果指定的文件不存在,就创建一个文件再打开它;如果存在,就打开该文件,并清空原内容

matlab文件操作

当文件操作结束后,应该关闭文件,

fclose函数,用于关闭已打开的文件,调用格式为

matlab文件操作

fid是要关闭文件的标识号,如果fid为all,则关闭所有已打开的文件(但是标准文件除外,屏幕,键盘)

返回0,表示关闭成功 ; 返回-1,表示关闭不成功

文本文件的读写

matlab文件操作

fscanf函数用于读取文本文件的内容,fprintf函数用于将数据写入文本文件中,调用格式为

matlab文件操作

A用于存放读写的数据,

count返回成功读写的数据单元元素个数

fid为文件标识号

fmt用以控制读取的数据格式

size用于指定A的大小

 matlab文件操作

matlab文件操作

matlab文件操作

matlab文件操作

size:用于存放返回数据变量a的大小

matlab文件操作

matlab文件操作

matlab文件操作

以读方式打开文件

matlab文件操作

读入标题行,指定按字符串格式读取数据,6指定读取6个字符串

matlab文件操作matlab文件操作

定义用于存放数据的变量qxsj,并初始化为空

 matlab文件操作

用循环结构读取前十行数据,因为每一行既有文本类型的数据,又有数字类型的数据,所以用单元数组读入存储的数据

%s指定读取时采用字符串格式

%f指定读取时采用小数形式

matlab文件操作

第1,2,6列为字符型数据

matlab文件操作

读取完成之后,调用fclose函数释放内存空间

matlab文件操作

二进制文件的读写

如加密或者压缩的文件,多媒体文件,

matlab函数提供了fread函数和fwrite函数

fread函数用于读取二进制文件,fwrite函数将数据写入文件

函数调用格式:

matlab文件操作

A用于存放读写的数据,

count返回读写成功的数据个数

fid为文件识别

precision指定读写数据的类型

size用于指定A的大小

skip成为循环因子,指定按比例周期性地跳过一些数据,默认为0

matlab文件操作

以写方式打开文件

matlab文件操作

根据给定的数学表达式求取y变量,每个变量有100个元素

matlab文件操作

将这个变量以双精度格式写入文件,最后关闭文件

matlab文件操作

matlab文件操作

 

然后运行,生成大小1600字节的文件

matlab文件操作

文件的大小跟文件个数和数据类型有关

2.matlab文件操作

 fseek函数,用于改变文件指针的位置,调用格式为

matlab文件操作

matlab文件操作

matlab文件操作

matlab文件操作

指定指针从当前位置移动到文件头

matlab文件操作

指定指针移动到文件的倒数第五个字节

matlab文件操作

ftell函数

用于查询文件指针的当前位置,调用格式为

matlab文件操作

matlab文件操作

matlab文件操作

feof函数

用于判断当前的文件位置指针是否到达文件尾部,调用格式

matlab文件操作

matlab文件操作

matlab文件操作

以读方式打开文件

matlab文件操作

调用fseek函数改变文件位置,每组有两个数据,每个数据是双精度型,占8个字节

matlab文件操作

创建变量,并初始化为空

matlab文件操作

里用循环结构读取数据,feof表示未到文件尾

matlab文件操作

  每次读取一个双精度数据,添加到x,y中,直到文件末尾

  matlab文件操作

matlab文件操作

绘制图形,关闭文件

matlab文件操作

matlab文件操作

 

3.在其他语言程序中读写matlab的数据文件

MAT文件

MAT文件是matlab村塾数据的标准格式,

MAT中不仅保存变量的值,而且保存变量的名称和类型

MAT分为标志和数据两个部分

标志:包含数据类型,数据大小

matlab文件操作

save命令

load命令

matlab文件操作

libmat.lib:包含对MAT文件的操作函数

libmx.lib:包含对MAT文件中mxArray矩阵的操作函数

C++程序中MAT文件的基本操作

首先定义指向MAT文件的指针

MATFile *mfp;

MATFile指定指针类型,mfp为指针变量

对MAT文件进行操作前必须先打开这个文件

matlab文件操作

关闭文件

matlab文件操作

matlab文件操作

matlab文件操作

matlab文件操作

matlab文件操作

r:只读模式(默认)

w:只写模式

u:更新模式,既可以从文件中读取数据,又可以写

读写MAT文件

matPutVariable(mfp,name,mp) :向文件中写入数据

matGetVariable(mfp,name):向文件中读取数据。导入内存

matlab文件操作

matlab文件操作

函数执行成功,返回0,否则返回一个非0值

 matlab文件操作

matlab文件操作

matlab文件操作

mxCreateDoubleScalar:用于创建一个数字标量

matlab文件操作

matlab文件操作

mxCreateDoubleMatrix:用于创建存储数值数据的mxArray矩阵

matlab文件操作

mxCreateString:创建存储变量的mxArray变量

matlab文件操作

mxDestroyArray用于清除

matlab文件操作

matlab文件操作

mxlsDouble判断存储的数据是否为实数

matlab文件操作

matlab文件操作

mxGetM获取变量大小

mxSetPr:获取变量地址

matlab文件操作

matlab文件操作

mxArrayToString:将mxArray内容转换成字符串

matlab文件操作

matlab文件操作

在文件头mat.h中包含了对matfile类型的定义和MAT文件的操作方法

因此,在文件首加入宏命令,

 matlab文件操作

matlab文件操作

matlab文件操作

matlab文件操作

matlab文件操作

matlab文件操作

matlab文件操作

    matlab文件操作   

  matlab文件操作

打开失败

matlab文件操作

文件打开成功,继续操作文件

matlab文件操作

双精度标量,pa1指向这个对象

pa2指向双精度实型数,大小3*3矩阵

利用memcpy将data数组中的值复制给pa2所指向矩阵的元素

pa3指向一个字符变量

matlab文件操作

matlab文件操作

调用matPutVariable函数将pa1所指变量写入文件,变量名为LocalDouble

在写的时候如果发生错误,就输出相应的提示,中断程序

matlab文件操作

调用matPutVariableAsGlobal,将pa2所指变量写入文件,指定对象GlobalDouble为全局变量

 matlab文件操作

 调用matPutVariable,将pa3所指变量写入文件

matlab文件操作

数据输出操作完成后,清除矩阵,并关闭mat文件,释放读写占用的内存资源

 matlab文件操作

原程序编写好之后,需要生成应用程序

matlab文件操作

matlab文件操作

 

matlab文件操作

在matlab命令行窗口输入以下命令

matlab文件操作

编译成功生成一个可执行文件

 matlab文件操作

matlab文件操作

matlab文件操作

matlab文件操作

工作区中会增加3个变量

matlab文件操作

matlab文件操作

在matlab和c++之间交换数据

4.在matlab中调用其它语言编写的程序

 如何在matlab中调用其它语言编写的程序

 MEX是matlab Executable的缩写,是matlab提供的调用其他语言的子程序的接口

用其它语言编写的程序经过编译,可以生成mex文件,作文matlab的扩展函数

matlab文件操作

MEX库函数:用于mex程序与matlab环境交换数据和从matlab工作空间获取相应信息

常用MEX库函数:

mexCallMATLAB函数:用于调用matlab函数

mexErrMsgTxt函数:用于输出matlab工作空间获取运行过程错误信息。

mexEvalString函数:用于matlab环境中执行表达式

mexGetVariable函数:用于MEX文件从matlab工作区获取变量

mex文件源程序的构成

1.入口子程序

默认标识名是mexFunction

matlab文件操作

matlab文件操作

matlab文件操作

 入口子程序有四个参数

matlab文件操作

c++程序与matlab交换数据,须使用mxArray对象

 2.计算子程序

包含所有完成计算功能的程序代码,由入口子程序调用。计算子程序的定义格式如下:

返回值类型 子程序名(输入形参表)

{

    ...

}

 matlab文件操作

该mex文件

matlab文件操作

新建一个c++源程序

matlab文件操作

matlab文件操作

判断两个数是否互质,函数的返回值为bool型,函数有两个双精度型参数

matlab文件操作

首先定义两个变量x,y,存储指针所指对象的值

 matlab文件操作

然后用辗转相除法求两个数最大公约数的值

首先将较大值放入x,将小值放入y

    matlab文件操作

然后x除以y得余数tmp,如果余数不为0,将tmp作为新的y,继续求余数,直到余数为0

    matlab文件操作

若最大公约数为1,说明两个数互质

    matlab文件操作

matlab文件操作

 

 然后检查入口函数,检查输入输出时是否符合要求

matlab文件操作

调用时,虚参plhs指向z,实参prhs指向y,首先检查调用mex文件时输入实参是否有两个

matlab文件操作

然后检查输入实参是否是一个

matlab文件操作

然后逐个获取输入实参的行数和列数

matlab文件操作

检查每一个实参是否为单个的数

matlab文件操作

matlab文件操作

如果调用时输入与输出实参符合要求,则在matlab工作区建立一个矩阵

矩阵的大小与输入实参的大小相同

matlab文件操作

mxGetPr函数获取实参的地址

 matlab文件操作

如果isCoprime函数为true,返回时,输出参数为1,否则为0

 matlab文件操作

matlab文件操作

将编辑好的源程序进行编译,生成MEX文件

方法:

matlab文件操作

例如利用matlab编译器

>>mex MEXDemo.cpp

编译成功,将生成一个mex文件:MEXDemo.mexw64

.mexw64表示生成的是可以在windows64位系统下运行的文件

 调用mex文件的方法和m文件的方法相同

例如判断11和13互质,判断15和33不互质

matlab文件操作

MEX文件源程序由入口子程序和计算子程序构成,入口子程序在c++和matlab之间传递数据,

并调用计算子程序

MEX文件源程序生成MEX文件,成为matlab的一个函数

5.在其它语言中调用matlab函数

 matlab引擎的概念

matlab文件操作

在c++程序中通过指向matlab引擎对象的指针操作matlab引擎对象

定义matlab引擎的格式

matlab文件操作

matlab文件操作

engOpen,启动matlab计算引擎,打开一个matlab工作区;starcmd指定打开引擎的方式,在windows系统中只能为空,启动成功返回引擎句柄,否则返回空

matlab文件操作

关闭一个matlab工作区,ep是Engine类型的指针

matlab文件操作

从matlab工作区读取数据,name指定变量,返回值是指向name的指针

matlab文件操作

从matlab工作区输出数据,name指定写入工作区的变量名

matlab文件操作

 engEvalString执行matlab命令,返回值为0,表示执行成功,1表示执行失败

matlab文件操作

matlab引擎的作用

使用matlab引擎需要使用mxArray变量,用来在matlab和其他应用空间交换数据

第一步:创建mxArray变量,(利用mxCreateDoubleMatrix创建m行n列的矩阵,存储实数)

matlab文件操作

第二步:给mxArray变量赋值,例如,

 matlab文件操作

matlab文件操作

第三步:将变量放入到matlab引擎所启动的工作区中

matlab文件操作

matlab文件操作

engine.h,包含了头文件引擎库的定义

iostream,包含了输入输出流的定义

matlab文件操作

定义指针,操作引擎对象

matlab文件操作

mxArray类型的指针用来指向matlab输入的对象

matlab文件操作

定义存储数据的变量

matlab文件操作

按给定表达式生成数据

matlab文件操作

matlab文件操作

建立一个矩阵,其成员用于存放实数数据,赋值给T;将数组t赋值给指针T;

向引擎工作区放入矩阵命名为T

matlab文件操作

同样的方法将数组R的内容放入引擎R

matlab文件操作

放入引擎后,利用polar函数绘制极坐标图

matlab文件操作

利用title函数给图形添加标题

matlab文件操作

完成数据传递和计算后,system让操作系统暂停该执行,但图形窗口不关闭,提示是否继续执行程序,mxDestroyArray释放占用的内存空间,engClose函数关闭计算引擎

matlab文件操作

matlab文件操作

生成可执行程序文件

matlab文件操作

-client指定生成客户端程序

engine,计算时加入matlab引擎库

 运行结果

matlab文件操作