• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

matlab文件操作

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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引擎库

 运行结果

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi中Frame的使用发布时间:2022-07-18
下一篇:
Delphi编程中实现窗口分割发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap