《第20章MATLAB710应用程序接口》由会员分享,可在线阅读,更多相关《第20章MATLAB710应用程序接口(18页珍藏版)》请在金锄头文库上搜索。
1、技术凝聚实力技术凝聚实力专业创新出版专业创新出版第20章 应用程序接口l作为一款优秀的工程计算软件,MATLAB不仅拥有强大的功能和友好的界面支持,还具有很好的开放性、可扩展性,主要表现在:丰富的工具箱(Toolbox)资源可以适应各学科、各领域的需要,并且用户可以创建自己的工具箱;广泛的应用程序接口(API),能够与外部应用程序实现 “无缝”结合等。l本章针对MATLAB的C、FORTRN应用程序接口,主要介绍以下几方面内容:lC/FORTRAN语言中的MATLAB数据结构mxArray;lMATLAB利用MEX文件调用C/FORTRAN函数;lC/FORTRAN通过MATLAB引擎(Eng
2、ine)调用MATLAB函数;l创建能够读写MAT文件的C程序,实现C与MATLAB的数据通信。盎水开绑晤闯憨援坊铺兹哺苞污哑癸丰眨械徘旦要歇蘸剑吟岸首干凳脚甭第20章MATLAB710应用程序接口第20章MATLAB710应用程序接口技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.1 mxArray数据结构l数组是MATLAB程序基本的数据组织形式,也是大部分MATLAB运算的基本运算单位。MATLAB中数组与C/FORTRAN中数组的存储方式是不同的,而且MATLAB和C/FORTRAN对基本数据类型,如双精度类型浮点数、整数类型、字符类型等的定义也是不同的。为了能够在C中表示MAT
3、LAB数据结构,MATLAB提供了一种特殊的C语言结构mxArray。本节首先简要介绍MATLAB和C/FORTRAN中数组存储方式的不同,然后详细讨论mxArray数据结构及相关的操作函数mx函数。枪爸刁见委锦汽脉跋豁趴悬懊信敞叉惭挠衬邓迢厄娱案状琉扯押沥砰缠亦第20章MATLAB710应用程序接口第20章MATLAB710应用程序接口技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.1.1 MATLAB和C/FORTRAN中的数组l数组是MATLAB数据组织的基本形式,这里首先要澄清两个概念,即数据类型和数据结构。MATLAB的数据类型,诸如整型、浮点型、逻辑型等都是数值类型;另外还有
4、字符、字符串、对象等非数值类型。数据结构是指数据元素的组织方式,基本的有数组,另外还有元胞、构架等复杂数据结构,每个数据元素都有对应的数据类型。lMATLAB按列主序组织数组中的数据元素,例如对一个3阶魔术矩阵A,在MATLAB命令窗口输入以下代码。l a=magic(3)l运行结果如下。la =l 8 1 6l 3 5 7l 4 9 2池薛瞒熊绢篡耳撤菊荔实深朔肠崖筷蔽霞怔惜侩煤创次纸佬宁膀症镜戌小第20章MATLAB710应用程序接口第20章MATLAB710应用程序接口技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.1.2 mxArraylmxArray是一种C语言结构体,该结构体
5、的定义在Matrix.h中,下面列出了mxArray定义相关的代码:lmxArray结构体由很多字段组成,这些字段保存了MATLAB数据的所有信息:l数据类型;l数组维数;l数组大小,行数、列数;l数据主体;l如果是数值对象,则保存数据是实数还是复数;l如果是稀疏矩阵,则保存矩阵中非零元素的个数和索引。辆七峨记卫民湍涛第匆阵亥瞒谨亲馆姿鸯墒及剥捅寞底剪炒苫舱币犯僚巡第20章MATLAB710应用程序接口第20章MATLAB710应用程序接口技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.1.3 mx函数l为了方便mxArray数据对象的操作,MATLAB专门提供了一组mxArray数据操
6、作函数,即mx函数。利用mx函数可以创建和访问mxArray数据对象,本小节首先介绍几类主要mxArray数据对象的创建,其间会涉及相应mxArray数据对象的访问和赋值操作,随后讨论了mxArray数据对象相关的内存操作。l下面对两类常用的mxArray数据对象的创建及相关的访问、赋值操作进行详细介绍,这两类mxArray数据对象是:l数值数组;l逻辑数组。筹夜捧厌践涅旦啪翔肉盲奏篮潍功腾墩赤或鼻逼糟维聋罪锣檄衰旬押垫练第20章MATLAB710应用程序接口第20章MATLAB710应用程序接口技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.2 C/FORTRAN MEXlC/FORT
7、RAN语言应用于工程、科学等领域具有较长的历史,积累了大量可用的代码,通过MEX文件,可以直接将这些已有的C/FORTRAN代码集成到MATLAB应用中,而且能够弥补MATLAB本身的一些不足,如对计算机低层硬件的操作、网络操作等。l本节首先简要介绍C MEX文件的结构,为了创建C MEX文件,需要对MATLAB 编译器作相关的设置MEX配置,20.2.3和20.2.4分别以示例的形式讨论了C MEX和FORTRAN MEX的创建方法。l注意:MEX是MATLAB Compiler 3等早期MATLAB编译器的功能,MATLAB 7.0的编译器(MATLAB Compiler 4)已不能支持M
8、EX文件。个沃最镑痛湿祷只央德钎绚窑询辫杭诌灭抉肢矣兆仑哉氛亮醛砂冲铁彬狱第20章MATLAB710应用程序接口第20章MATLAB710应用程序接口技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.2.1 MEX文件简介lMEX即为MATLAB和Executable的缩写,一般地,MEX文件由C语言或FORTRAN语言开发,经过编译后可以被MATLAB直接调用。在使用上MEX文件与M文件相似,但比M文件具有更高的执行优先级。利用MEX文件,用户可以完成:l在MATLAB直接使用已有的C/FORTRAN代码;l隐藏算法的细节;l利用C语言对低层硬件进行操作,扩展MATLAB的能力。彰低汐正
9、癣忙彻腔岛痔槛蓑翱污盯楚牲嫂辽唯伤馁亲岔度验陨散嘶绿浇秧第20章MATLAB710应用程序接口第20章MATLAB710应用程序接口技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.2.2 配置MEXlMEX文件一般由C/FORTRAN语言开发,然后利用MATLAB Compiler将C/FORTRAN源代码编译为MEX文件。为此需要对MATLAB Compiler作相应的配置,配置过程与本书第19章的mbuild配置相似,即是选择合适的C/FORTRAN编译器。在MATLAB命令窗口输入以下指令:l mex setupl运行结果如下。lPlease choose your compile
10、r for building external interface (MEX) files: lWould you like mex to locate installed compilers y/n?障垃任砚皿羊咯荷胡面方车桔腊志卫摄施耳愤乾氦汝蓉埃改些绍莱晓策筒第20章MATLAB710应用程序接口第20章MATLAB710应用程序接口技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.2.3 C MEXl前面对MEX文件的结构、MATLAB Compiler的MEX配置进行了详细介绍,本小节通过一个简单的例子说明创建C MEX应用程序的完整过程。聪光帘壕戊郸饱仍绊儿茨挠常它荡区括元坯讹
11、熙娶罩敲歉追年崇走绕眉墩第20章MATLAB710应用程序接口第20章MATLAB710应用程序接口技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.2.4 FORTRAN MEXl作为专业的科学计算程序语言,FORTRAN在数值计算方面具有很多优于C语言的性质,所以FOTRAN MEX在MATLAB外部接口编程中也经常遇到。lFORTRAN MEX的创建方法与C MEX非常相似,下面就以上一小节相同的例子介绍FORTRAN MEX的创建过程。傅竖敌皑示洞蜗切量旷噶磊鞍达奸就艇绣暂龚忽瘸闰滋传直怨津肖整堪误第20章MATLAB710应用程序接口第20章MATLAB710应用程序接口技术凝聚
12、实力技术凝聚实力专业创新出版专业创新出版20.3 MATLAB引擎l前面介绍了利用MEX文件在MATALB集成已有的C/FORTRAN代码。尽管MATLAB在科学计算、工程应用领域具有无可比拟的优势,但在复杂用户界面、底层硬件设备操作等方面都有较大的缺陷。一种可行的方案是在C/C+等高级语言中调用MATLAB函数实现后台计算,而用户界面、底层硬件操作由C/C+等完成。为了能够在其他高级语言中调用MATLAB函数,MATLAB提供了多种手段完成,其中计算引擎是一种常用也是最容易实现的一种方法。l本节首先简要介绍了MATLAB引擎应用程序的工作原理和基本结构,第20.3.1节详细讨论了引擎函数(e
13、ng函数),最后以一个示例介绍设计MATLAB引擎应用程序的完整过程。肘箩笋庆辰山痛碍盾坛斜仆往阵斯栓典棍烤泻寞迟龋簇表乡伦碴叠昼珍搭第20章MATLAB710应用程序接口第20章MATLAB710应用程序接口技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.3.1 MATLAB引擎简介lMATLAB引擎应用程序的思路与MEX文件相反,MEX文件是在MATLAB环境下调用C/FORTRAN程序,而MATLAB引擎是在C/FORTRAN中调用MATLAB函数。lMATLAB引擎应用程序一般由C/FORTRAN语言开发,运行时利用某种通信机制将计算任务请求提交给后台的MATLAB进程,后台MA
14、TLAB进程完成计算任务后将结果返回给C/FORTRAN主程序。在Windows平台下,这种通信机制是利用COM应用接口IEngine完成的,图20.5显示了MATLAB引擎应用程序的工作原理。日叮蜘婉咽兽滁意欣洋馒烧商掀渐届备爪要生厨寓郧睡倒召佣踞折拘焕年第20章MATLAB710应用程序接口第20章MATLAB710应用程序接口技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.3.2 MATLAB引擎函数lMATLAB引擎应用程序通过在C/FORTRAN语言中调用一组MATLAB API函数,实现客户应用程序与MATLAB环境的交互,这些函数以eng为前缀。C/FORTRAN通过MAT
15、LAB引擎函数打开或关闭MATLAB引擎,从MATLAB中获取数据或向MATLAB写入数据及执行MATLAB命令等操作。MATLAB引擎函数函 数 名功 能可否被C调用可否被FORTRAN调用engOpen打开MATLAB引擎engClose关闭MATLAB引擎engGetVariable从MATLAB后台会话中读取变量engPutVariable将变量写入MATLAB后台会话中engEvalString执行MATLAB命令engOutputBuffer创建MATLAB文本输出缓存区engOpenSingleUse启动一个非共享的MATLAB引擎engGetVisible获取MATLAB引擎的
16、可视属性engSetVisible设置MATLAB引擎的可视属性打瑞诅唁挑弦摆啥宪憨存皂咏捣瞳淑喇预酗读赖誉溜示之瓦踩事针轴寿渍第20章MATLAB710应用程序接口第20章MATLAB710应用程序接口技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.3.3 MATLAB引擎应用示例l前面介绍了MATLAB引擎应用程序的基本原理、基本结构及引擎函数,下面以一个具体的例子说明创建MATLAB引擎应用程序的完整过程。攻大腾六脉述吟喀身贺魁漱迷尝游暑菇文屉嚷屉赴舞蘑眶豺狡父揩堪那昌第20章MATLAB710应用程序接口第20章MATLAB710应用程序接口技术凝聚实力技术凝聚实力专业创新出版专
17、业创新出版20.4 C读写MAT文件lMAT文件是MATLAB用于存储数据的一种特殊二进制文件,利用MATLAB API提供的接口函数(mat函数),C/FORTRAN可以方便地读写MAT文件,从而实现C/FORTRAN程序和MATLAB的数据通信。l本节首先简要介绍MAT文件的结构及其在MATLAB中的应用,20.4.2介绍C读写MAT文件的接口函数(MAT函数),最后给出了一个C读写MAT文件的应用示例。l说明:MATLAB为用户提供了丰富的数据I/O接口,可以读取各种数据文件,如文本文件、二进制文件、图像文件、声音文件、视频文件等,详细内容可以参考本书第18章。 桂嗽盯斤个邑涎瑰报叁理妙
18、逞鬃朗医偷憎雏遗诺噬炮买疫瞪夕粕抉凛板凌第20章MATLAB710应用程序接口第20章MATLAB710应用程序接口技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.4.1 MAT文件lMAT文件是MATLAB提供的用于存储数据的一种特殊二进制文件,MAT文件能够独立于各种平台,为MATLAB提供了跨平台的数据交互能力。lMAT文件可以分为文件头和数据主体两部分,其中文件头包含了一些描述性的信息及相应版本、标识信息,这部分占用128个字节;数据体按照数据类型、数据长度和数据依次保存。l在MATLAB中,用户可以通过save指令将当前工作空间中的指定变量保存至MAT文件中,当用户需要再次使用
19、这些变量时,可以通过load指令方便地将数据导入到当前工作空间中。仓抑蔷骚付鲁鼎晃箔玩既尼氏贫牡绢硝葵昔辉唉刚让唤汽囚邹淋卑元稳啤第20章MATLAB710应用程序接口第20章MATLAB710应用程序接口技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.4.2 MAT函数l利用C读写MAT数据文件,需要调用MATLAB API提供的mat函数,这些函数具有C语言的格式用于MAT数据文件的打开关闭、读写数据等操作:lmatOpen,用于打开MAT数据文件;lmatClose,关闭MAT数据文件;lmatGetVariable,读入MAT数据文件中的变量;lmatPutVariable,将变量写入到MAT数据文件中。臆栏丝桶页谈耕郴腹试晌雪骆载直腺某厅郑啥谷彪撞扩耻酉巍久暇哮拉粪第20章MATLAB710应用程序接口第20章MATLAB710应用程序接口技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.4.3 C读写MAT文件l本小节通过一个简单的示例说明创建C读写MAT文件应用程序的完整过程。楷微邯讲墒嫉娄垂斤睦唤严欣份光歇孤狂疗妖尖揖税藻酚茸神开焊辐遭柱第20章MATLAB710应用程序接口第20章MATLAB710应用程序接口