matlab-note-10

matlab-note-10

Charles Lv7

matlab-note-10

image-20230208173358976

外部程序接口

在EXCEL中使用MATLAB

Spreadsheet Link程序

Spreadsheet Link程序是MATLAB提供的Excel与MATLAB的接口 ,通过Spreadsheet Link,可以在Excel工作区和MATLAB工作区之间进行数据交换,也可以在Excel中调用MATLAB的函数。

将Excel表格中的数据导出到MATLAB工作空间中

操作步骤

①在Excel中选中5列,单击 “开始”选项卡工具栏“MATLAB”按钮,从下拉列表中选“Send data to MATLAB”命令。

②在弹出的对话框中填入变量名sale,单击“确定”按钮完成导出操作

从MATLAB工作空间导入数据到Excel表格中

在Excel中调用MATLAB函数进行运算

MATLAB文件操作

文件打开与关闭

fopen函数

用于打开文件,其调用格式为:$fid=fopen(filename,permission)$

其中,fid为文件识别号,打开文件成功时,fid返回一整数,用来标识该文件;打开文件不成功时,fid值为-1。filename为待操作的文件名,permission为对文件的允许使用方式。

文件的使用方式:

  • ‘r’:以读方式打开一个文件。
  • ‘w’:以写方式打开一个文件。
  • ‘a’:在该文件尾添加数据。
  • ‘r+’:以读和写方式打开一个文件。
fclose函数

用于关闭已打开的文件,其调用格式为:$status=fclose(fid)$

fid是要关闭文件的标识号。如果fid为all,则关闭所有已打开的文件,但标准文件除外,即屏幕、键盘。返回0表示关闭成功,返回-1则表示关闭不成功。

文本文件的读写

fscanf函数和fprintf函数

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

$[A,count]=fscanf(fid,fmt,size)$

$count=fprintf(fid,fmt,A)$

其中,A用于存放读写的数据,count返回成功读写的数据元素个数;参数fid为文件标识号,fmt用以控制读取的数据格式,size用于指定A的大小。

  • fmt由%加上格式符组成,常见的数值格式控制符如下:
    • ‘%d’:整数。
    • ‘%f’:小数形式的实数。
    • ‘%e’:科学计数法形式的实数。
    • ‘%c’:字符。
    • ‘%s’:字符串。
      在%之后还可以加上数据宽度。
  • size可取值:
    • n:指定读取n个数据。
    • Inf:指定读取文件中的所有数据。
    • [m,n]:指定读取m×n个数据,数据按列顺序存放到矩阵A。

二进制文件的读写

fread函数和fwrite函数

fread函数用于读取二进制文件,fwrite 函数将数据写入文件。这是函数的调用格式。

$[A,count]=fread(fid,size,precision,skip)$

$count=fwrite(fid,A,precision)$

其中,A用于存放读写的数据,count返回读写成功的数据个数。fid为文件识别号,precision指定读写数据的类型,size用于指定A的大小,skip指定按比例周期性地跳过一些数据。

数据文件定位

fseek函数

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

$fseek(fid, offset, origin)$

其中参数fid为文件识别号,offset表示位置指针相对移动的字节数;origin表示位置指针移动的参照位置。

  • origin的可取值:
    • 'cof '或0表示文件指针的当前位置

    • 'bof '或-1表示文件的开始位置

    • 'eof’或1表示文件的结束位置

ftell函数

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

$position=ftell(fid)$

返回值为从文件头到指针当前位置的字节数。若返回值为-1,表示获取文件当前位置失败。

feof函数

用于判断当前的文件位置指针是否到达文件尾部:

$status=feof(fid)$

当到达文件结束位置时,返回值为1,否则为0。

在其他语言程序中读写MATLAB的数据文件

MAT文件的概念

MAT文件是MATLAB存储数据的标准格式。MAT文件中不仅保存变量的值,而且保存变量的名称和类型等。

  • 在MATLAB中操作MAT文件:

    • save命令:将工作区的数据保存为MAT文件。

    • load命令:读取MAT文件中的数据并加载到工作区。

  • 操作MAT文件的API函数封装于两个标准库文件中:

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

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

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

在C++程序中,通过指向MAT文件的指针对文件进行操作,因此,首先需要申明一个文件指针.

定义指向MAT文件的指针

MATFile *mfp;

其中,MATFile指定指针类型,mfp为指针变量。

打开与关闭MAT文件

$mfp=matOpen(filename,mode)$

$matClose(mfp)$

其中,mfp为MATFile类型的指针,filename为待操作的文件名,mode为对文件的使用方式。如果文件打开成功,则返回文件句柄,否则返回NULL。

  • MAT文件的访问方式:
    • ‘r’:只读模式。
    • ‘w’:只写模式。
    • ‘u’:更新模式。
读写MAT文件

$matPutVariable(mfp,name,mp)$

$matGetVariable(mfp,name)$

其中,mfp是已经定义的MAT文件指针,name是指定存储数据的变量名,mp是指向MATLAB工作区mxArray类型变量的指针。

写文件,如果文件中存在与name同名的变量,那么将覆盖原来的值;如果不存在同名的变量,则在文件末尾添加该变量。函数执行成功,返回0,否则返回一个非零值。

mxArray对象

MATLAB和其他应用软件或程序交换数据使用mxArray对象。

生成应用程序并运行

在MATLAB中调用其他语言编写的程序

MEX库函数

用于MEX程序与MATLAB环境交换数据和从MATLAB工作空间获取相应信息。

常用MEX库函数
  • mexCallMATLAB:用于调用MATLAB函数。
  • mexErrMsgTxt:输出从MATLAB工作空间获取运行过程错误信息。
  • mexEvalString:用于在MATLAB环境中执行表达式。
  • mexGetVariable:用于MEX文件从MATLAB工作区获取指定变量。
  • mexPutVariable:用于MEX文件向MATLAB工作区输出指定变量。

MEX文件源程序的构成

MEX文件的编译

编译MEX程序
1
mex MEXDemo.cpp
调用MEX文件
1
rt=MEXDemo(11,13)

在其他语言程序中调用MATLAB函数

MATLAB引擎的概念

MATLAB引擎(engine)是用于和外部程序结合使用的一组函数和程序库,在其他语言程序中利用MATLAB引擎来调用MATLAB中的函数。

  • 定义指向MATLAB引擎对象的指针

    Engine *mep

    其中,Engine指定指针类型,mep为指针变量。

  • C++常用引擎函数包括:

    • Engine *engOpen(const char *startcmd);

      用于启动MATLAB计算引擎,打开一个MATLAB工作区,参数startcmd指定启动Matlab引擎的方式。

    • int engClose(Engine *ep);

      用于关闭计算引擎所打开的MATLAB工作区。

    • mxArray *engGetVariable(Engine *ep, const char *name);

      用于从MATLAB引擎工作区读取数据

    • int engPutVariable(Engine *ep, const char *name, const mxArray *pm);

      用于向MATLAB引擎工作区输出数据。

    • int engEvalString(Engine *ep, const char *string);

      用于执行MATLAB命令。

MATLAB引擎的使用

使用MATLAB的计算引擎,需要使用mxArray变量,用来在MATLAB的工作空间和其他应用程序交换数据。

  • 创建mxArray变量。

    mxArray *mxCreateDoubleMatrix(mwSize m, mwSize n,mxComplexity CFlag);

  • 给mxArray类型的变量赋值。

    void * memcpy ( void * destinationPtr, const void * sourcePtr, size_t num );

    其中,destinationPtr、sourcePtr分别为指向目标矩阵、源矩阵的指针,num指定复制的数据个数(size_t是engine.h中定义的unsigned int或unsigned long的类型名)。

  • 将变量放入MATLAB引擎所启动的工作区中

MATLAB引擎程序的编译与运行

使用mex命令对源程序文件进行编译.

1
mex -client engine Mengine.cpp
  • Title: matlab-note-10
  • Author: Charles
  • Created at : 2023-02-03 22:46:38
  • Updated at : 2023-08-17 09:48:31
  • Link: https://charles2530.github.io/2023/02/03/matlab-note-10/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments