外部程序接口

1.在Excel中使用MATLAB

Spreadsheet Link程序

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

  • 安装与启动
    打开Excel的文件菜单,打开选项。
    在这里插入图片描述
    单击左边的加载项,再单击右下角的转到按钮,弹出加载宏对话框。
    在这里插入图片描述
    在该对话框中单击浏览按钮,选择MATLAB安装目录下的toolbox下的exlink中的excllink.xlam文件。
    在这里插入图片描述
    单击确定按钮,返回到加载宏对话框。
    在这里插入图片描述
  • MATLAB命令组
    这时,开始菜单栏下多出了MATLAB选项,下拉菜单包含相应的功能。
    在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.MATLAB文件操作

文件的打开与关闭

(1)fopen函数
用于打开文件,其调用格式为:
fid=fopen(filename, permission)
其中,fid为文件识别号, filename为待操作的文件名, permission为对文件的允许使用方式。

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

(2)fcose函数
用于关闭已打开的文件,其调用格式为:
status=fclose(fid)
其中,fid是要关闭文件的标识号。如果fid为all,则关闭所有已打开的文件。

文本文件的读写

(1)fscanf函数和fprintf函数
fscant函数用于读取文本文件的内容,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 x n个数据。

在这里插入图片描述

二进制文件的读写

(1)fread函数和fwrite函数
fread函数用于读取二进制文件, fwrite函数将数据写入文件。这是函数的调用格式。
[A, count]=fread(fid, size, precision, skip)
count=fwrite(fid, A, precision)
其中,A用于存放读写的数据,count返回读写成功的数据个数。fid为文件识别号, precision指定读写数据的类型,sze用于指定A的大小,skip指定按比例周期性地跳过一些数据。
在这里插入图片描述

数据文件定位

(1)fseek函数
用于改变文件位置指针的位置,其调用格式为
fseek(fid, offset, origin)
其中,参数fid为文件识别号,offset表示位置指针相对移动的字节数, origin表示位置指针移动的参照位置。
origin的可取值:

  • 'cof’或0:表示文件指针的当前位置。
  • 'bof’或-1:表示文件的开始位置。
  • 'eof’或1:表示文件的结束位置。

(2)ftell函数
用于查询文件指针的当前位置,其调用格式为
position=ftell(fid)
返回值为从文件头到指针当前位置的字节数。若返回值为-1,表示获取文件当前位置失败。

(3)feo函数
用于判断当前的文件位置指针是否到达文件尾部,其调用格式为
status=feof(fid)
当到达文件结束位置时,返回值为1,否则为0。
在这里插入图片描述

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

文件的打开与关闭

MAT文件是MATLAB存储数据的标准格式。
在MATLAB中操作MAT文件

  • save命令
  • load命令

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

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

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

  • 定义指向MAT文件的指针
    MATFile *mfp
    其中,MATFile指定指针类型,mfp为指针变量。
  • 打开与关闭MAT文件
    mfp=matOpen(filename, mode)
    natClose(mfp)
    其中,mfp为 MATFile类型的指针, filename为待操作的文件名mode为对文件的使用方式。
    如果文件打开成功,则返回文件句柄,否则返回NULL
  • 读写MAT文件
    matPutVariable(mfp, name, mp)
    matGetVariable(mfp, name)
    其中,mfp是已经定义的MAT文件指针,name是指定存储数据的变量名,mp是指向 MATLAB工作区 mxArray类型变量的指针。

mxArray对象

MATLAB和其他应用软件或程序交换数据使用mxArray对象。操作mxArray对象要用到mx函数,mx函数有四类
(1)建立和清除 mxArray变量的函数

  • mxArray *mxCreateDoubleScalar(double value)
    其中,value用于初始化 mxArray变量
  • mxArray *mxCreateDoubleMatrix(mwSize m, mwSize n, mx Complexity CFlag):
    其中,m、n指定 mxArray矩阵的大小,CFlag指定成员值是否为复数,当CFlag为 mxREAL时,成员值是实数。
  • mxArray *mxCreate String(const char *str)
    其中,str指向的字符串用于初始化mxArray变量
  • void mxDestroyArray(mxArray *pm)
    其中,pm是指向 mxArray变量的指针。

(2)验证数据类型的函数
bool mxlsDouble(const mxArray *pm)
bool mxlsNumeric(const mx Array *pm)
其中,pm是指向 mxArray变量的指针。

(3)读写数据的函数
size_t mxGetM(const mxArray * pm)
void mxSetM(mxArray * pm, mwSize m)
double*mxGetPr(const mxArray *pm)
void mxSetPr(mxArray * pm, double *pr);
其中,pm是指向 mxArray变量的指针。

(4)转换类型的函数
char *mxArrayToString(const mxArray *pm)
其中,pm是指向 mxArray变量的指针。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

生成应用程序并运行

在这里插入图片描述

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

MEX库函数

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

常用MEX库函数:

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

MEX文件源程序的构成

(1)入口子程序
定义被 MATLAB调用的外部子程序的入口地址、 MATLAB系统和计算子程序传递的参数等。入口子程序的定义格式如下
void mexFunction(int nhs, mxArray *pIhs[], int nrhs, const mxArray *prhs[])
{

}
其中,nlhs定义输出结果的个数,plhs指向用于返回输出结果的对象,nrhs定义输入参数的个数,prhs指向存储输入参数的对象。

(2)计算子程序
包含所有完成计算功能的程序代码,由入口子程序调用。计算
子程序的定义格式如下:
返回值类型子程序名(输入形参表)
{

}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MEX文件的编译

在这里插入图片描述

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

MATLAB引擎的概念

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

  • 定义指向 MATLAB引擎对象的指针
    Engine *mep
    其中, Engine指定指针类型,mep为指针变量。
  • C++常用引擎函数包括
    Engine *engOpen(const char *startcmd);
    int engClose(Engine * ep);
    mxArray *engGetVariable(Engine *ep, const char *name);
    int engPutVariable(Engine *ep, const char *name, const mxArray *pm)
    int engEvalString(Engine *ep, const char * string);

MATLAB引擎的使用

  • 创建mxArray变量
    在这里插入图片描述

  • 给mxArray类型的变量赋值
    在这里插入图片描述
    其中, destinationPtr、 sourcePtr分别为指向目标矩阵、源矩阵的指针,num指定复制的数据个数(size_t是 engine. h中定义的 unsigned inn或 unsigned long的类型名)。

  • 将变量放入MATLAb引擎启动的工作区中。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MATLAB引擎程序的编译与运行

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唱戏先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值