首页 > 其他 > 详细

matlab文件操作

时间:2019-07-20 22:29:55      阅读:172      评论:0      收藏:0      [点我收藏+]

1.matlab文件打开与关闭

 文件的打开与关闭

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

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

技术分享图片

其中,fid为文件识别号,

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

打开不成功时,fid为-1

filename指定待操作的文件名

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

文件的使用方式

技术分享图片这是默认方式,如果指定的文件不存在,fopen的返回值为-1

技术分享图片如果指定的文件不存在,就创建一个文件再打开它;如果存在,就打开该文件,并清空原内容

技术分享图片

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

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

技术分享图片

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

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

文本文件的读写

技术分享图片

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

技术分享图片

A用于存放读写的数据,

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

fid为文件标识号

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

size用于指定A的大小

 技术分享图片

技术分享图片

技术分享图片

技术分享图片

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

技术分享图片

技术分享图片

技术分享图片

以读方式打开文件

技术分享图片

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

技术分享图片技术分享图片

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

 技术分享图片

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

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

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

技术分享图片

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

技术分享图片

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

技术分享图片

二进制文件的读写

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

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

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

函数调用格式:

技术分享图片

A用于存放读写的数据,

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

fid为文件识别

precision指定读写数据的类型

size用于指定A的大小

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

技术分享图片

以写方式打开文件

技术分享图片

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

技术分享图片

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

技术分享图片

技术分享图片

 

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

技术分享图片

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

2.matlab文件操作

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

技术分享图片

技术分享图片

技术分享图片

技术分享图片

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

技术分享图片

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

技术分享图片

ftell函数

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

技术分享图片

技术分享图片

技术分享图片

feof函数

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

技术分享图片

技术分享图片

技术分享图片

以读方式打开文件

技术分享图片

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

技术分享图片

创建变量,并初始化为空

技术分享图片

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

技术分享图片

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

  技术分享图片

技术分享图片

绘制图形,关闭文件

技术分享图片

技术分享图片

 

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

MAT文件

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

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

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

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

技术分享图片

save命令

load命令

技术分享图片

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

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

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

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

MATFile *mfp;

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

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

技术分享图片

关闭文件

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

r:只读模式(默认)

w:只写模式

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

读写MAT文件

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

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

技术分享图片

技术分享图片

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

 技术分享图片

技术分享图片

技术分享图片

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

技术分享图片

技术分享图片

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

技术分享图片

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

技术分享图片

mxDestroyArray用于清除

技术分享图片

技术分享图片

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

技术分享图片

技术分享图片

mxGetM获取变量大小

mxSetPr:获取变量地址

技术分享图片

技术分享图片

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

技术分享图片

技术分享图片

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

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

 技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

    技术分享图片   

  技术分享图片

打开失败

技术分享图片

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

技术分享图片

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

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

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

pa3指向一个字符变量

技术分享图片

技术分享图片

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

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

技术分享图片

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

 技术分享图片

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

技术分享图片

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

 技术分享图片

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

技术分享图片

技术分享图片

 

技术分享图片

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

技术分享图片

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

 技术分享图片

技术分享图片

技术分享图片

技术分享图片

工作区中会增加3个变量

技术分享图片

技术分享图片

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

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

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

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

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

技术分享图片

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

常用MEX库函数:

mexCallMATLAB函数:用于调用matlab函数

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

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

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

mex文件源程序的构成

1.入口子程序

默认标识名是mexFunction

技术分享图片

技术分享图片

技术分享图片

 入口子程序有四个参数

技术分享图片

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

 2.计算子程序

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

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

{

    ...

}

 技术分享图片

该mex文件

技术分享图片

新建一个c++源程序

技术分享图片

技术分享图片

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

技术分享图片

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

 技术分享图片

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

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

    技术分享图片

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

    技术分享图片

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

    技术分享图片

技术分享图片

 

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

技术分享图片

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

技术分享图片

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

技术分享图片

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

技术分享图片

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

技术分享图片

技术分享图片

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

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

技术分享图片

mxGetPr函数获取实参的地址

 技术分享图片

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

 技术分享图片

技术分享图片

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

方法:

技术分享图片

例如利用matlab编译器

>>mex MEXDemo.cpp

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

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

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

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

技术分享图片

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

并调用计算子程序

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

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

 matlab引擎的概念

技术分享图片

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

定义matlab引擎的格式

技术分享图片

技术分享图片

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

技术分享图片

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

技术分享图片

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

技术分享图片

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

技术分享图片

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

技术分享图片

matlab引擎的作用

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

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

技术分享图片

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

 技术分享图片

技术分享图片

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

技术分享图片

技术分享图片

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

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

技术分享图片

定义指针,操作引擎对象

技术分享图片

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

技术分享图片

定义存储数据的变量

技术分享图片

按给定表达式生成数据

技术分享图片

技术分享图片

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

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

技术分享图片

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

技术分享图片

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

技术分享图片

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

技术分享图片

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

技术分享图片

技术分享图片

生成可执行程序文件

技术分享图片

-client指定生成客户端程序

engine,计算时加入matlab引擎库

 运行结果

技术分享图片

 

matlab文件操作

原文:https://www.cnblogs.com/fanglijiao/p/11215879.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!