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引擎启动的工作区中。