zoukankan      html  css  js  c++  java
  • matlab文件操作

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

     运行结果

  • 相关阅读:
    华为P20 无法投屏到电视
    configuration error – unknown item ‘umask’ (notify administrator)
    oracle不支持update from的语法
    SQL Server 中update的小计
    sqlplus连接oracle数据库--密码含特殊字符
    redhat 7.6安装oracle 11gR2遇到两个问题
    ORA-15032 ORA-15028
    ORA-07391 sftopen error unable to open text file
    ORA-01017 invalid username/password logon denied
    Oracle CRS/GI 进程介绍
  • 原文地址:https://www.cnblogs.com/fanglijiao/p/11215879.html
Copyright © 2011-2022 走看看