第20章应用程序接口_第1页
第20章应用程序接口_第2页
第20章应用程序接口_第3页
第20章应用程序接口_第4页
第20章应用程序接口_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

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.1 mxarray数据结构l数组是matlab程序基本的数据组织形式,也是大部分matlab运算的基本运算单位。matlab中数组与c/fortran中数组的存储方式是不同的,而且matlab和c/fortran对基本数据类型,如双精度类型浮点数、整数类型、字符类型等的定义也是不同的。为了能够在c中表示matlab数据结构,matlab提供了一种特殊的c语言结构mxarray。本节首先简要介绍matlab和c/fortran中数组存储方式的不同,

3、然后详细讨论mxarray数据结构及相关的操作函数mx函数。技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.1.1 matlab和c/fortran中的数组l数组是matlab数据组织的基本形式,这里首先要澄清两个概念,即数据类型和数据结构。matlab的数据类型,诸如整型、浮点型、逻辑型等都是数值类型;另外还有字符、字符串、对象等非数值类型。数据结构是指数据元素的组织方式,基本的有数组,另外还有元胞、构架等复杂数据结构,每个数据元素都有对应的数据类型。lmatlab按列主序组织数组中的数据元素,例如对一个3阶魔术矩阵a,在matlab命令窗口输入以下代码。l a=magic(3)l运行

4、结果如下。la =l 8 1 6l 3 5 7l 4 9 2技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.1.2 mxarraylmxarray是一种c语言结构体,该结构体的定义在matrix.h中,下面列出了mxarray定义相关的代码:lmxarray结构体由很多字段组成,这些字段保存了matlab数据的所有信息:l数据类型;l数组维数;l数组大小,行数、列数;l数据主体;l如果是数值对象,则保存数据是实数还是复数;l如果是稀疏矩阵,则保存矩阵中非零元素的个数和索引。技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.1.3 mx函数l为了方便mxarray数据对象的操作,mat

5、lab专门提供了一组mxarray数据操作函数,即mx函数。利用mx函数可以创建和访问mxarray数据对象,本小节首先介绍几类主要mxarray数据对象的创建,其间会涉及相应mxarray数据对象的访问和赋值操作,随后讨论了mxarray数据对象相关的内存操作。l下面对两类常用的mxarray数据对象的创建及相关的访问、赋值操作进行详细介绍,这两类mxarray数据对象是:l数值数组;l逻辑数组。技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.2 c/fortran mexlc/fortran语言应用于工程、科学等领域具有较长的历史,积累了大量可用的代码,通过mex文件,可以直接将这些

6、已有的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)已不能支持mex文件。技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.2.1 mex文件简介lmex即为m

7、atlab和executable的缩写,一般地,mex文件由c语言或fortran语言开发,经过编译后可以被matlab直接调用。在使用上mex文件与m文件相似,但比m文件具有更高的执行优先级。利用mex文件,用户可以完成:l在matlab直接使用已有的c/fortran代码;l隐藏算法的细节;l利用c语言对低层硬件进行操作,扩展matlab的能力。技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.2.2 配置mexlmex文件一般由c/fortran语言开发,然后利用matlab compiler将c/fortran源代码编译为mex文件。为此需要对matlab compiler作相应的

8、配置,配置过程与本书第19章的mbuild配置相似,即是选择合适的c/fortran编译器。在matlab命令窗口输入以下指令:l mex setupl运行结果如下。lplease choose your compiler for building external interface (mex) files: lwould you like mex to locate installed compilers y/n?技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.2.3 c mexl前面对mex文件的结构、matlab compiler的mex配置进行了详细介绍,本小节通过一个简单的例

9、子说明创建c mex应用程序的完整过程。技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.2.4 fortran mexl作为专业的科学计算程序语言,fortran在数值计算方面具有很多优于c语言的性质,所以fotran mex在matlab外部接口编程中也经常遇到。lfortran mex的创建方法与c mex非常相似,下面就以上一小节相同的例子介绍fortran mex的创建过程。技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.3 matlab引擎l前面介绍了利用mex文件在matalb集成已有的c/fortran代码。尽管matlab在科学计算、工程应用领域具有无可比拟的优势,

10、但在复杂用户界面、底层硬件设备操作等方面都有较大的缺陷。一种可行的方案是在c/c+等高级语言中调用matlab函数实现后台计算,而用户界面、底层硬件操作由c/c+等完成。为了能够在其他高级语言中调用matlab函数,matlab提供了多种手段完成,其中计算引擎是一种常用也是最容易实现的一种方法。l本节首先简要介绍了matlab引擎应用程序的工作原理和基本结构,第20.3.1节详细讨论了引擎函数(eng函数),最后以一个示例介绍设计matlab引擎应用程序的完整过程。技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.3.1 matlab引擎简介lmatlab引擎应用程序的思路与mex文件相反

11、,mex文件是在matlab环境下调用c/fortran程序,而matlab引擎是在c/fortran中调用matlab函数。lmatlab引擎应用程序一般由c/fortran语言开发,运行时利用某种通信机制将计算任务请求提交给后台的matlab进程,后台matlab进程完成计算任务后将结果返回给c/fortran主程序。在windows平台下,这种通信机制是利用com应用接口iengine完成的,图20.5显示了matlab引擎应用程序的工作原理。技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.3.2 matlab引擎函数lmatlab引擎应用程序通过在c/fortran语言中调用一组

12、matlab api函数,实现客户应用程序与matlab环境的交互,这些函数以eng为前缀。c/fortran通过matlab引擎函数打开或关闭matlab引擎,从matlab中获取数据或向matlab写入数据及执行matlab命令等操作。matlab引擎函数函 数 名功 能可否被c调用可否被fortran调用engopen打开matlab引擎engclose关闭matlab引擎enggetvariable从matlab后台会话中读取变量engputvariable将变量写入matlab后台会话中engevalstring执行matlab命令engoutputbuffer创建matlab文本输

13、出缓存区engopensingleuse启动一个非共享的matlab引擎enggetvisible获取matlab引擎的可视属性engsetvisible设置matlab引擎的可视属性技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.3.3 matlab引擎应用示例l前面介绍了matlab引擎应用程序的基本原理、基本结构及引擎函数,下面以一个具体的例子说明创建matlab引擎应用程序的完整过程。技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.4 c读写mat文件lmat文件是matlab用于存储数据的一种特殊二进制文件,利用matlab api提供的接口函数(mat函数),c/for

14、tran可以方便地读写mat文件,从而实现c/fortran程序和matlab的数据通信。l本节首先简要介绍mat文件的结构及其在matlab中的应用,20.4.2介绍c读写mat文件的接口函数(mat函数),最后给出了一个c读写mat文件的应用示例。l说明:matlab为用户提供了丰富的数据i/o接口,可以读取各种数据文件,如文本文件、二进制文件、图像文件、声音文件、视频文件等,详细内容可以参考本书第18章。 技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.4.1 mat文件lmat文件是matlab提供的用于存储数据的一种特殊二进制文件,mat文件能够独立于各种平台,为matlab提

15、供了跨平台的数据交互能力。lmat文件可以分为文件头和数据主体两部分,其中文件头包含了一些描述性的信息及相应版本、标识信息,这部分占用128个字节;数据体按照数据类型、数据长度和数据依次保存。l在matlab中,用户可以通过save指令将当前工作空间中的指定变量保存至mat文件中,当用户需要再次使用这些变量时,可以通过load指令方便地将数据导入到当前工作空间中。技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.4.2 mat函数l利用c读写mat数据文件,需要调用matlab api提供的mat函数,这些函数具有c语言的格式用于mat数据文件的打开关闭、读写数据等操作:lmatopen,用于打开mat数据文件;lmatclose,关闭mat数据文件;lmatgetvariable,读入mat数据文件中的变量;lmatputvariable,将变量写入到mat数据文件中。技术凝聚实力技术凝聚实力专业创新出版专业创新出版20.4.3 c读写mat文件l本小节通过一个简

温馨提示

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

评论

0/150

提交评论