MATLAB程序设计综合教程(第二版)第12章MATLAB外部接口技术_第1页
MATLAB程序设计综合教程(第二版)第12章MATLAB外部接口技术_第2页
MATLAB程序设计综合教程(第二版)第12章MATLAB外部接口技术_第3页
MATLAB程序设计综合教程(第二版)第12章MATLAB外部接口技术_第4页
MATLAB程序设计综合教程(第二版)第12章MATLAB外部接口技术_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MATLAB程序设计综合教程(第二版)第12章 MATLAB外部接口技术 MATLAB与Microsoft Office的混合使用 MATLAB数据接口 MATLAB应用程序接口12.1 MATLAB与Microsoft Office的混合使用1Notebook的安装与启动Notebook的安装notebook -setupNotebook的启动在MATLAB的命令窗口中输入命令: notebook或notebook 文件名在Word窗口的“文件”菜单中选择“新建”或“打开”命令,选择新建或打开一个M-Book文档。 12.1.1 在Word中使用MATLAB2Notebook菜单项M-Boo

2、k模板定义了Word与MATLAB进行通信的宏指令、文档样式和工具栏。Notebook的许多操作都可以通过“Notebook”菜单项的命令来完成。3单元的使用在MATLAB Notebook中,凡是在Word与MATLAB之间进行传递的内容称为单元(Cell),它是Notebook与MATLAB交互的基本单位。(1)输入输出单元由M-Book文档传向MATLAB的命令称为输入单元(Input Cell)。在M-Book文档中任何合法的MATLAB命令都可以定义为输入单元,输入单元可以送到MATLAB环境中去执行,执行结果保存在MATLAB工作空间,同时送回Notebook,成为输出单元(Out

3、put Cell)。定义输入单元的方法是:首先选中所需命令,然后在Notebook菜单中选择Define Input Cell命令,被选中的MATLAB命令成为输入单元。为了执行输入单元,应选择Notebook菜单中的Evaluate Cell命令或直接按组合键Ctrl+Enter。(2)单元组Notebook允许把多行MATLAB命令当作一个整体来运行。在Notebook中,把多行输入单元或自初始化单元称为单元组(Cell Group)。 定义单元组有以下3种方法。 对连续输入的多行文本型MATLAB命令,用鼠标把它们同时选中,然后在Notebook菜单中选择Define Input Cel

4、l或Define AutoInit Cell命令,分别生成输入单元组或自初始化单元组。 对连续输入的多行文本型MATLAB命令,用鼠标把它们同时选中,然后在Notebook菜单中选择Evaluate Cell命令或按组合键Ctrl+Enter,则单元组被定义并执行。 把已有的多个独立输入单元或自初始化单元同时选中,然后在Notebook菜单中选择Group Cells命令,于是,便获得以第一个独立单元的性质组合而成的单元组。 4计算区计算区(Calc Zone)是一个由普通Word文本、输入单元和输出单元组成的连续区,用于描述某个具体的作业或问题。在计算区里,用户可以根据描述问题的需要,安排段

5、落、标题、分栏,而不受计算区外的有关格式的约束。 定义计算区的方法是:先选定包含普通Word文本、输入单元和输出单元的一个连续区,然后选择Notebook菜单中的Define Calc Zone命令。选择Evaluate Calc Zone命令即可执行计算区中的全部输入单元,且在每个输入单元后面以输出单元形式给出相应的计算结果。12.1.2 Spreadsheet Link的使用通过Spreadsheet Link,可以在Excel工作区和MATLAB工作空间之间进行数据交换,也可以使用插件方式在Excel中调用MATLAB的算法。1Spreadsheet Link的安装与启动版Spreads

6、heet Link的安装是在MATLAB安装过程中,选中组件Excel Link,随其他组件一起安装。安装完成后,还需要在Excel中进行一些设置后才能使用。2Spreadsheet Link的主要功能和操作Spreadsheet Link支持二维数值数组、一维字符数组和二维单元数组,不支持多维数组和结构。(1)将Excel表格中的数据导出到MATLAB工作空间中(2)从MATLAB工作空间导入数据到Excel表格中(3)调用MATLAB函数进行运算12.2 MATLAB数据接口MATLAB提供多种方法支持将磁盘文件和剪贴板中的数据导入到MATLAB的工作区,最简单的办法是使用数据导入向导(可

7、通过选择“File”菜单中的“Import data”命令或在命令窗口执行命令“uiimport”来激活它),而在M文件中则可以使用MATLAB输入/输出函数。12.2.1 文件输入/输出操作1文件打开与关闭(1)fopen函数fopen函数用于打开文件以供读写,其调用格式为fid = fopen (filename, permission)其中fid为文件识别号,filename为待操作的文件名,permission为对文件的允许使用方式。permission常用值有r、w、a、r+,默认为只读。打开文件成功时,fid返回一整数,用来标识该文件;打开文件不成功时,fid = 1。(2)fcl

8、ose函数fclose函数用于关闭已打开的文件,其调用格式为status = fclose(fid)关闭标识为fid的文件。如果fid为all,则关闭所有已打开的文件,但标准文件除外。返回0表示关闭成功,返回1则表示关闭不成功。2文本文件的读写操作(1)fscanf函数fscanf 函数用于读取文本文件的内容,并按指定格式存入矩阵。其调用格式为A, count= fscanf (fid, fmt, size)其中A用于存放读取的数据,count返回成功读取的数据元素个数,fid为文件识别号,fmt用以控制读取的数据格式,size指定读取多少数据。数据格式由%加上格式符组成,常见的格式符如表所示

9、,在%之后还可以加上数据宽度。例如,%3d,它控制读取的整型数据取3位数字;控制读取实型数据,取10个字符(含小数点),小数部分占3位。 (2)fprintf函数fprintf函数可以将数据按指定格式写入到文本文件中。其调用格式为count = fprintf (fid, fmt, A)其中fid和fmt的意义与fscanf函数相同,A存放要写入文件的数据,count返回成功输出的字节数。先按fmt指定的格式将数据矩阵A格式化,然后写入到fid所关联的文件。如果不指定fid,则默认输出到屏幕。3二进制文件的读写操作(1)fread函数从文件中读入二进制数据。其调用格式为A,count = fr

10、ead(fid,size,precision)其中A用于存放读取的数据,count返回所读取的数据元素个数,fid为文件识别号,size用于指定读入数据的元素数量(可取值与fscanf函数相同,省略时则读取整个文件内容),precision指定读写数据的类型,其默认值为uchar。(2)fwrite函数fwrite 函数按照指定的数据类型将矩阵中的元素写入到文件中。其调用格式为count = fwrite (fid, A, precision)其中count返回成功写入文件的数据元素个数,fid为文件句柄,A用来存放要写入文件的数据,precision用于控制所写数据的类型。4数据文件定位(1

11、)fseek函数用于定位文件位置指针,其调用格式为status = fseek(fid, offset, origin)其中fid为文件识别号;offset表示位置指针相对移动的字节数,若为正整数表示向文件尾方向移动,若为负整数表示向文件头方向移动;origin表示位置指针移动的参照位置,它的取值有3种可能:cof 或0表示文件的当前位置,bof 或1表示文件的开始位置,eof或1表示文件的结束位置。若定位成功,status返回值为0,否则返回值为1。(2)ftell函数用来查询文件指针的当前位置,其调用格式为position = ftell (fid)ftell函数的返回值为从文件头到指针当

12、前位置的字节数。若返回值为1,表示获取文件当前位置失败。(3)feof函数用来判断当前的文件位置指针是否到达文件尾部,其调用格式为 status = feof (fid)当到达文件结束位置时,测试结果为1,否则返回0。(4)ferror函数用来查询最近一次输入或输出操作中的出错信息,其调用格式为: message = ferror(fid)12.2.2 MAT文件与应用1MAT文件MATLAB的“save”命令可以将MATLAB系统内部数据保存为MAT文件,而“load”命令可以将磁盘上的MAT文件中的数据读入到MATLAB系统中。此外,为了有效地管理MAT文件,以及在MATLAB外部读取和创

13、建MAT文件,MATLAB提供了一个子程序库,用户可以在C/C+、FORTRAN程序中直接调用这些子程序来创建和读取MAT文件。MATLAB提供的用于操作MAT文件的API函数封装于两个标准库文件中:和。前者用于对MAT文件的操作,后者用于对MAT文件中矩阵的操作。2C语言MAT文件应用(1)常用MAT文件操作函数 打开MAT文件。MATFile *matOpen(const char *filename, const char *mode)其中,filename为要操作的文件;mode用来说明对文件的使用方式,它可取以下值: 关闭MAT文件。int matClose(MATFile *mfp

14、);其中,mfp指向要操作的MAT文件,如果函数执行成功,返回0,否则返回“EOF”。 向MAT文件中存入一个矩阵。int matPutVariable(MATFile *mfp, const char *name, const mxArray *mp);此函数将一个mp指向的mxArray结构体写入mfp所指向的MAT文件中。如果文件中存在同名的mxArray结构体,那么将覆盖原来的值;如果不存在同名的mxArray结构体,则将此结构体添加到文件末尾。函数执行成功,返回0,否则返回一个非零值。 向MAT文件中存入一个矩阵。matPutArrayAsGlobal(MATFile*mfp, co

15、nst mxArray*mp);执行此命令后,使得用load命令装入这个MAT文件时,该矩阵对应的变量成为全局变量。 获取MAT文件中的变量列表。char *matGetDir(MATFile *mfp, int *num); 获取MAT文件的C语言FILE句柄。FILE *matGetFp(MATFile *mfp);通过该句柄,用户可以使用C语言的库函数feof、ferror来判断错误原因。 从MAT文件中读取一个矩阵。mxArray *matGetVariable(MATFile *mfp, const char *name);MatGetDir、matGetFp、matGetVaria

16、ble函数通过mxCalloc函数分配内存,在程序结束时,必须使用mxFree函数释放内存。 从MAT文件中删除一个矩阵。int matDeleteVariable(MATFile *mfp, const char *name);其中name为要删除的矩阵。如果函数执行成功,将返回0,否则返回一个非零值。(2)mx-函数在C程序中使用MATLAB数据时还用到MATLAB提供的接口函数中的mx-函数,以完成对mxArray对象的操作。MATLAB的矩阵运算是以mxArray结构体(C+中是mwArray类)为核心构建的,mxArray结构体的定义在MATLAB的文件中。12.3 MATLAB与其

17、他语言的接口接口是MATLAB与其他语言程序相互调用各自函数的方法,MEX文件使MATLAB可以直接调用或链接C/C+语言编写的算法函数,而MATLAB引擎使C/C+语言可以调用MATLAB函数。12.3.1 MEX文件MEX(MATLAB Executable)动态链接函数接口是MATLAB调用其它语言编写的程序或算法的接口,通过mex命令将C、FORTRAN语言编写的算法函数编译成动态链接程序,使之成为MATLAB的一个扩展函数。在Windows系统中,MEX文件是DLL格式,使用DLL格式可以直接访问Windows系统的各种资源,生成图形用户界面,还可以利用Windows的动态数据交换能

18、力,与其他的Windows应用程序交换数据。1MEX函数MEX函数用于从MATLAB环境中获取必要的矩阵数据和相应信息。所有MEX函数均在MATLAB的子文件夹externinclude中的头文件得到声明。 2MEX文件的建立C语言的MEX文件的源程序由如下两个部分组成。(1)入口子程序mexFunction其作用是在MATLAB系统与被调用的外部子程序之间建立通信联系,定义被MATLAB调用的外部子程序的入口地址、MATLAB系统和子程序传递的参数等。入口子程序的构成如下:void mexFunction(int nlhs,mxArray*plhs,int nrhs,mxArray*prhs)函数中有4个参数nlhs、plhs、nrhs和prhs。nlhs是输出数据的个数,plhs是指向输出数据的指针,nrhs是输入数据的个数,prhs是指向输入数据的指针。 (2)计算子程序(Computational Routine)它包含所有完成计算功能的程序代码,由入口子程序调用。3MEX文件的编译MEX文件的编译需要具备两个条件:一是要求已经安装MATLAB应用程序接口组件及其相应的工具,另一个是要求有合适的C/C+语言编译器。MEX文件的编译使用mex命令,如果第一次使用,需要配置mex采用什么编译器。在MAT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论