MATLAB与FORTRAN接口技术
- 格式:pdf
- 大小:300.06 KB
- 文档页数:2
MATLAB与FORTRAN接口技术枣庄学院数学与信息科学系 赵晓艾[摘 要]介绍了动态链接函数库M EX文件,MAT文件及M ATLAB引擎的调用原理,利用MAT LAB和FORTRAN接口技术实现FORTRAN程序计算结果的可视化过程。
[关键词]M ATLAB FORTRAN AP IM ATLAB是一种面向科学与工程计算的高级语言,凭借其强大的科学计算与可视化功能,简单易用的开放式可扩展环境,取得了在矩阵代数、数值计算、数字信号处理、动态仿真﹑神经网络控制等领域的广泛应用。
:它语言简洁,使用方便灵活,程序书写形式自由,图形功能强大。
M ATLA B扩充能力强,交互性好,有丰富的库函数,它包含了大量的MATLAB与C/FORTRAN语言之间的接口函数,在进行复杂数学运算时可以直接调用,这些接口函数是M ATLAB的一个非常重要的组成部分。
虽然MATLAB是一个完全独立的编程和数据运算的集成环境,使用它可以方便地完成许多工作,但是,很多时候仅靠M ATLAB环境还是不能很好的完成任务,例如:M ATLA B中程序循环,其它语言编写的算法的移植要重新编写M文件等。
FORTRAN语言是传统的数值处理语言,处理速度高,编程简便,其强大的数值计算能力和长期积累的大量的科学计算程序库及工程应用软件,始终占据着科学和工程计算领域的重要地位,有很多源代码资源可供使用,但它在图形功能方面有较大的不足。
M ATLAB提供的A P I(Appli cation P rogra m Interface)弥补了彼此的不足,它支持M ATLAB与外部数据和程序的交互。
M ATLAB接口包括:在M ATLA B环境中调用其它语言编写的程序和算法,通过M EX文件实现;M ATLAB与其它编程环境的数据交互,通过M AT文件实现;其它编程环境使用MAT LAB的计算绘图功能,通过M ATLA B计算引擎实现。
1M EX文件1.1M EX文件介绍M EX文件是由C/FORTRAN语言编写的,编译后生成M ATLAB动态链接子程序,可MATLAB中导入和执行,如同M ATLAB的内置函数一样,主要应用有:对已有的C/FORTRAN 程序,可通过M EX方式在MAT LAB环境中直接调用;对影响M ATLAB执行速度的FOR循环,可以编写相应的C/FORTRAN 子程序完成相同的功能,并编译成M EX,提高运行速度。
FOR TRAN语言M EX文件通常由两部分组成:(1)入口子程序,是计算子程序与M ATLA B环境之间的接口,用来完成相互之间的调用。
其程序的入口点由函数m exF uncti on定义,入口子程序函数的说明格式如下:c人口子程序subrouti ne mexF uncti on(nlhs,p l hs,nrhs,prhs)c参数声明:integ er p l hs(*),prhs(*)integ er n l hs,nrhs其中prhs是指向输入变量的m x A rray类型指针,nrhs是输入变量的个数,plhs是指向输出变量的mxA rray类型指针,n l hs 是输出变量的个数。
(2)计算子程序,是完全的FORTRAN语言编程,不涉及到任何的接口内容,这部分程序可以单独编写一个子程序或程序子函数。
M EX文件的使用极为方便,只需在提示符下键入M EX文件名即可,与M ATLA B的内建函数的调用方式完全相同,当执行M EX文件时,MA TLAB系统将首先搜索MAT LAB系统的所有可搜索路径(通过路径浏览器设置),然后载入并执行第一个与用户键入的文件名相匹配的可执行文件。
在M ATLAB中,由于M EX文件的执行优先级高于M文件,所以即使一个文件名同时存在两种类型的可执行文件中,也会先执行M EX文件。
FORTRAN语言的几个常用M EX函数: 1.2M EX文件调用的基本原理M ATLA B和FORTRAN语言的运算单位不同,M ATLAB以矩阵(mxA rray结构体)为基本数据结构,而在FORTRAN中,文件是由按顺序排列的记录组成的,而记录是数值或字符的序列,是FORTRAN程序输入输出的基本单位。
记录有两种格式:格式记录和无格式记录。
格式记录中,数据在文件中的存放是用A SC II码形式;无格式记录中,数据在文件中存放是用二进制代码形式。
由于FORTRAN和MAT LAB的数据类型不能直接匹配,故需调用MAT LAB的A PI函数来完成二者的数据转换,其基本原理是:M ATLAB将需要传递的mxA rray型数据的内存地址作为一个整型数值传递给FORTRAN程序,然后在FOR TRAN中,A P I提供的访问函数(access routi ness)使用此整数值来访问mxA rray的内容,并将此值作为内存地址,读取相应内容。
传统的FORTRAN77不支持指针变量,因此必须借助M ATLA B的A P I函数;在FORTRAN90中,可以通过%va l直接使用数据而无须调用子例行程序mxCopyP trT oR ea l8和mxCopy R ea l8T oP tr。
1.3M EX文件的编译要编译生成的M EX文件,必须确认已经安装了M ATLA B 应用接口组件及其相应工具,并且要有合适的FORTRAN语言编译器,在W i ndows平台下,所使用的编译器必须支持32位的W i ndow s动态链接库(DLL)。
M ATLA B的A P I支持许多编译器,并针对不同的编译器提供不同的选项文件,在生成M EX文件之前必须为编译器配置合适的选项文件。
在M ATLAB命令窗口中键入命令:mex–setup,按提示逐步完成,配置完后,使用命令:m ex–f(选项文件名)(源文件名)对源文件进行编译。
2MAT LAB与FORTRAN数据共享M ATLAB提供了多种数据输入输出方式,用户可以根据需要灵活选择,M ATLAB与FORTRAN实现数据共享有以下几种方式:2.1A SC II码方式A SCII是计算机中用得最广泛的字符集及其编码,A SCII码的数据文件中的数据形式必须是一个矩阵,要求数据文件每一行的数据个数必须相同,每行数据对应于矩阵的每一行,每行的元素用空格分开。
把FORTRAN输出数据保存为ASC II码文件形式,在M ATLA B中用:l oad文件名(带扩张名),该语句在M ATLA B工作空间创建一个与文件名(无扩展名)相同的变量,该变量表示的矩阵即是A SC II码文件的数据组成的矩阵。
2.2底层I/O方式185M ATLAB 提供了文件底层操作函数来装入某种特定格式的数据文件,可以fopen 和fread 读取FORTRAN 创建的数据文件。
2.3M EX 动态程序方式开发MAT LAB 的动态链接M EX 子程序使原有的FOR TRAN 程序和M ATLAB 链接在一起。
2.4外部程序转换开发FORTRAN 程序将数据文件直接转换成MATLAB 的M AT 数据文件,再用load 命令装入到MATLAB 系统中。
M AT 文件是MAT LAB 系统保存文件的默认文件格式,它把文件存储为二进制格式,这种格式为在不同平台或不同应用程序间移动MAT LAB 数据提供了一种便利的机制。
一般使用M ATLAB AP I 来完成M AT 文件的读取与存储,常用的函数有:3MA TLAB 引擎3.1MATLAB 引擎简介Eng i ne 是指一组M ATLAB 提供的接口函数,通过这些接口函数,用户可以在C /FORTRAN 的应用程序中实现对M ATLAB 的控制,完成与M ATLA B 引擎的数据交换和命令传递任务。
几个常用的MAT LAB 引擎的函数:同时,引擎应用程序还可以使用前面提到的A P I 函数。
3.2引擎调用的基本原理当FORTRAN 程序调用某个M ATLA B 函数或命令时,首先通过引擎函数启动M ATLAB 并建立A ctive X 通道,然后把这个函数或命令通过A ctive X 通道传给M ATLA B ,由M ATLA B 在后台执行,这可以分成两步来完成:第一步将m xA rray 转换成M ATLA B 可理解的形式。
用mxC rea te 来创建一个和要传递的数据类型大小相同的矩阵mxA rray ;第二步将矩阵放入M AT LAB 工作区中,用程序engPuM t a trix 和engEvalStr i ng 来完成。
3.3引擎程序的编译在MATLAB 下作空间执行m ex -se t up 选择编译器,假设使用FORTRAN V 6.0,源程序名为filena m e .f 的文件编译格式如下:m ex -f[M ATLAB 根目录 \bi n \d f 60engm atopts .bat filena m e .f 。
结论通过A P I 函数不仅可以在M ATLA B 下以动态链接库的形式调用FORTRAN 语言编写的子程序,而且可以在FORTRAN 语言中调用M ATLA B 的大量函数,将MATLAB 作为一个计算引擎,完成M ATLAB 与外界必要的数据交换,极大地增强了M ATLA B 的灵活性,实现FORTRAN 程序的计算结果可视化。
参考文献[1]刘志俭.MATLAB 应用程序接口用户指南[M ].北京:科学出版社,2000[2]贺红梅,包军.M ATLAB 与FORTRAN 程序的接口技术[J].电力学报,2002,17(2):126-127[3]飞思科技产品研发中心.M ATLA B 6.5应用接口编程.电子工业出版社,2001:109-113(上接184页)当然万兆以太网是刚发展起来的新的技术力量,有它的不足之处,如其标准有待完善,如现标准传输介质只允许采用光纤,而不能采用铜缆。
我们期待其万兆铜缆IEEE 802.3ak 标准的公布。
届时万兆每端口价格就会下降。
万兆交换机价格偏高也是阻碍其发展的因素,目前我国图书馆的经费有限,只有个别经费充足的图书馆有条件从千兆升级到万兆。
结语随着IEEE802.3ae 标准的批准实施,10GbE 技术已成为当今网络技术发展的热点,10GbE 技术将被广泛地应用于各种骨干网络与存储网络中,这两者都是图书馆网络的核心需求。
随着图书馆资源的不断增加和服务的不断提高,当图书馆带宽成为瓶颈时,万兆以太网的应用能够打破瓶颈,为图书馆提供高带宽、高性能的网络服务,包括组播服务、身份认证以及网络性能保障等多项服务。
能够顺利地开展视频、话音、数字图书馆、多媒体数据,资源共享等各种网络应用。
就像当年百兆升级十兆,千兆升级百兆一样,万兆也将会成为未来图书馆骨干网络的主流。