matlab-note-10
matlab-note-10
外部程序接口
在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.