Matlab与Fortran混合编程之DLL实现方法.pdf
《Matlab与Fortran混合编程之DLL实现方法.pdf》由会员分享,可在线阅读,更多相关《Matlab与Fortran混合编程之DLL实现方法.pdf(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C o m p u t e r E n g i n e e r i n g a n d A p p l i c a t i o n s 计算机工程与应用 博士论 坛 Ma t l a b与F o r t r a n 混合编程之D L L实现方法 潘克家1,2,3汤井田 ,郑洲顺 P AN Ke j i a ,T A NG J i n g t i a n。,Z HE NG Z h o u s h u n 2 1 中南大学 地球科学与信息物理学院,长沙 4 1 0 0 8 3 2 中南大学 数学科学与计算技术学院,长沙 4 1 0 0 8 3 3 高性能计算与随机信息处理教育部重点实验室,长沙 4
2、 1 0 0 8 1 1 S c h o o l o f Ge o s c i e n c e s a n d I n f o-P h y s i c s,Ce n t r a l S o u t h Un i v e r s i t y,Ch an g s h a 4 1 0 0 8 3,C h i n a 2 S c h o o l o f Ma the ma t i c a l S c i e n c e s and Co mp u t i n g Te c h n o l o g y,Ce n tra l S o u th Un i v e r s i ty,Ch a n g s h
3、a 41 0 0 8 3,Ch i n a 3 HP CS I P Ke y La b o r a t o r y,Mi n i s t r y o f E d u c a t i o n,Ch a n g s h a 41 0 0 8 1,Ch h a a P AN Ke j i a,T AN G J i n g t i a n,Z H E NG Z h o u s h u n Mi x e d l a n g u a g e p r o g r a mmi n g i n Ma t l a b a n d F o r t r a n v i a d y n a mi c H n k l i
4、 b r a r y C o mp u t e r E n g i n e e r i n g a n d Ap p fi c a fi o n s。2 0 1 1 4 7(3 1):1-3 Ab s t r a c t:T h e a d v ant a g e s a n d d i s a d v a n t a g e s o f Ma t l a b and F o r t r a n i S b rie fl y i n tro d u c e d i n thi s a r t i c l e An d t wo me t h o d s o f mi x e d l a n g
5、 u a g e p r o g r a mmi n g t h r o u g h c a l l i n g F o r t r a n d y n a mi c l i n k l i b r a ry f r o m M a t l a b a r e d i s c u s s e d i n d e t a i l T a k e Ga u s s J o r d a n e l i mi n a t i o n wi th p a r t i a l p i v o t ing f o r e x a mp l e,the c o mp u t a t i o n a l r e
6、 s u l t s o f the s a me a l g o rit h m u n d e r a v a r i e ty o f diffe r e n t i mp l e me n t a t i o n wa y s a r e c are f ul l y c o mp are d i n t e r ms o f a c c u r a c y a n d c o mp u tat i o n a l t i me T h e r e s u l t i n dic a t e s tha t,mi x e d l an g u a g e p r o g r a mmi
7、 n g v i a d y n a mi c l i n k l i b r a r y c a n ma k e f u l l o f e x i s t i n g p a c k a g e s,c o mb i n e h i e ffic i e n c y o f F o r t r a n wi th p o we r f u l ma t r i x c o mp u tat i o n and fi g u r e d r a wing and c o mp i l i n g f u n c t i o n s o f Ma t l a b,t h u s c o n
8、for mi n g t o t h e C ur-r e n t d e v e l o p me n t d i r e c t i o n o f p r o gra mming i n s c i e n t i fic and e n g ine e r i n g c o mp u t i n g Ke y wo r d s:d y n a mi c l i n k l i b r a r y;mi x e d-p r o g r a mmi n g;Ma t l a b;F o r t r an;Ga u s s-J o r d a n e l i mi n a t i o n
9、摘要:简要介绍Ma t l a b 和F o r t r an各 自的优缺点,详细阐述Ma t l a b 调用F o r t r an生成的动态链接库实现混合编程的两 种方法。以 高斯约当列主元素法求逆为例,从计算时间、精度等方面详细比较了同一算法在多种实现方式下的执行情况。计算结果表明:基 于动态链接库的混合编程方法能充分利用现有软件 包,结合F o r t r an计算效率高、Ma t l a b 矩阵计算及图形处理功能强的优点,符合 当前科学工程计算程序设计的发展方向。关键词:动态链接库;混合编程;Ma t l a b 语言;F o r t r a n 语言;高斯 约 当消去法 DOI
10、:1 0 3 7 7 8 0 i s s n 1 0 0 2。8 3 3 1 2 0 1 1 3 1 0 0 1 文章编号:1 0 0 2 8 3 3 1(2 0 1 1)3 1-0 0 0 1 0 3 文献标识码:A 中图分类号:T P 3 1 1 1 1 1 研究意义 Ma t l a b 被称作第四代计算机语言,具有开发效率高、可视 化性强、尤其矩阵计算及图形处理功能强等优点,已逐渐成为 科学和应用领域重要工具和首选平台。目前,Ma t l a b 语言已 在科学工程计算、控制设计、信号处理与通讯、图像处理、信号 检测、金融建模设计与分析等领域获得了广泛应用。相比其 他高级语言c,C+、
11、F o r t r an等来说,Mat l a b 能明显缩短开发周 期,因此特别适合开发小型应用,或者对算法进行验证与开 发。然而,Ma t l a b 语言作为一种解释性语言,在涉及循环、迭 代等大量的计算方面效率偏低,不适合单独完成大型复杂的 数值计算。F o r t r an是世界上最早出现的计算机高级程序设计语言,广泛应用于科学和工程计算领域。F o r t r an语言的最大特性是 接近数学公式的 自然描述,在计算机里具有很高的执行效 率。尤其F o r t r a n 9 0 标准引入了数组计算等非常利于矩阵运算 的功能,可直接对矩阵和复数进行运算,且数组运算时,F o r t
12、r a n 自动并行处理,这是很多高级编程语言不具备的。自 诞 生以来,积累了大量高效而可靠的源程序和函数软件包(如 I MS L、MK L 等)。动态链接库(D y n a m i c L i n k L i b r a r y,D L L)是一个包含可 由多个程序同时使用的代码和数据的库。动态链接提供了一 种方法,使进程可以调用不属于其可执行代码的函数。函数 的可执行代码位于一个 D L L 中,该 D L L 包含一个或多个已被 编译、链接并与使用它们的进程分开存储的函数。多个应用 程序可同时访问内存中单个D L L 副本的内容。使用动态链接 库具有如下优点:扩展了应用程序的特性;简化了
13、软件项目的 基金项 目:国家高技术研究发J酗十 划(8 6 3)(t h e Na ti o n a l H i g h T e c h R e s e a r c h a n d D e v e l o p m e n t P l a n o f C h i n a u n d e r G r ant N o 2 0 0 7 A A 0 6 Z 1 3 4):国家重点基础研究发展规划(9 7 3)(N 0 2 0 1 1 C B 6 0 6 3 0 6);中南大学自由探索计划(N 0 2 0 1 1 Q N Z T 1 0 2);中南大学博士后科学基金。作者简介:潘克家(1 9 8 1 一)
14、,男,讲师,在站博士后,中南大学地质资源与地质工程博士后流动站,主要研究领域为智能计算、优化算法;汤井田(1 9 6 5 一),博士,教授,博士生导师;郑洲顺(1 9 6 4 一),博士,教授,博士生导师。E-m a i l:k j p a n y a h o o c n 收稿日期:2 0 1 1 0 5 1 9;修回日 期:2 0 1 1-0 7 2 9 2 C o m p u t e r E n g i n e e r i n g a n d A p p l i c a t i o n s 计算机工程与应用 管理与升级;有助于节省内存、实现资源共享;可以用多种编 程语言来编写。本文研究利用
15、动态链接库实现Ma t l a b 与F o r-t r a n 混合编程。通过混合编程,能充分利用大量现有的优秀软 件包(Ma t l a b 库函数、F o r t r a n 函数软件包 I MS L 等),缩短软件 开发周期;并且可以结合F o r t r a n 计算效率高、Ma t l a b 矩阵计算 及图形处理功能强的优点,为一种值得推荐的编程方式。2 相关工作 Ma t l a b 与V C、V B可以相互调用,并且实现方式非常多,相关的研究工作可参考文献 1 6】。其混合编程方法主要有如 下几种:(1)基于 C O M技术。;(2)tJ 用动态链接库;(3)调用 Ma l
16、t a b 引擎 A P I 函数。至今为止,关于Ma t l a b 与F o r t r an混合 程序设计的研究比较少。2 0 0 0 年,聂万胜等通过 F o r t r an调用 Ma t l a b 引擎,实现了F o r t r a n 程序结果的可视化7 ;2 0 0 8 年,徐天 吉等也是利用F o r t r a n 调用Ma t l a b 引擎混合编程,并运用到小 波域地震信号多尺度分析中 】。以上研究都是通过F o r t r a n 调 用Ma t l a b 引擎实现混合编程,实现非常简单,但不能脱离Ma t l a b 环境运行本质上还是在 内部调用Ma t l
17、 a b 命令,并且运行速度 比较慢,不适合开发计算量较大、实时性要求比较高的程序。主要介绍基于动态链接库方式的Ma t l a b 和F o r t r an混合编 程方法,将计算量最繁重的工作由执行效率高的F o r t r an语言 来完成,在 Ma t 1 a b 中利用提供的接 口技术完成特定的任务。通过混合编程,既能充分提高Ma t l a b 程序的执行效率,减轻代 码编写工作、缩短软件开发周期、又能弥 b F o r t r an程序图形功 能弱、计算结果难于可视化的缺陷。3 Ma t l a b 调用F o r t r a n 动态链接库 混合语言程序设计中的主要问题:如何在
18、编程时遵循不 同语言中变量和过程的命名约定、堆栈使用约定以及函数调 用过程中的参数传递约定“。其中堆栈约定确定子过程的参 数数目是否可变以及何时进行调用后的清理堆栈工作;命名 约定确定标识符是否对大小写敏感及编译后对标识符如何修 饰;参数约定确定参数传递时是传值方式还是传址(引用)方 式及不同语言之间的数据类型和数据结构如何对应n 。F o r t r an语言调用约定有三种,即:S T D C A L L约定、C 约定和 D e f a u l t 调用约定。Ma t l a b 可由如下两种方式调用F o r t r an语言编写的动态链 接库。第一种方式:利用 Ma t l a b 中m
19、 e x 命令将F o r t r an语言编 写的函数编译成m e x 文件(后缀名为m e x w 3 2),便可在Ma t l a b 中像调用内嵌函数一样调用。Me x 文件实际上为一种Ma t l a b 专用的动态链接库文件。第二种方式:利用F o r t r an编译器将 F o r t r a n 语言编写的函数编译成通用3 2 位的动态链接库(后缀 名为d 1 1),Ma t l a b 通过几个专门的A P I 接口函数调用。3 1 Ma t l a b 调用m e x 文件 Me x 文件的编写和编译必须具备两个基本条件:一是必 须按照 Ma t l a b 应用程序接
20、口组件和相关工具,二是要有c或 者F o r t r an 语言的编译器。在编译 m e x 文件之前还必须利用 m e x s e t u p 命令对Ma t l a b 系统进行设置,使Ma t l a b 系统知道使 用系统的哪个语言编译器,以及相应的参数和路径【2 1 o本文软 件 环境 为 Ma t l a b R 2 0 1 0 b、F o r t r an 编 译器 采 用 I n t e l V i s u a l F o r t r a n 1 0 1(w i t h Mi c r o s o f t V i s u a l C+2 0 0 5 S P 1 l i n k e
21、 r)。3 1 1 m e x 文件的编写 通常一个典型的F o r t r an语言m e x 文件由两个截然不同的 部分组成,它们分工明确,用于完成不同的任务:(1)第一部分为计算子程序,它包含了所有完成实际计算 功能的源代码,用来完成实际的计算工作;(2)第二部分称为入 口子程序,它是计算子程序与Ma t l a b 环境的接口,用来完成两者之间的通信任务。本节以计算实矩阵逆矩阵的G a u s s J o r d an列主元素法为 例,给出一个m e x 文件的实例。!入口子程序 G J_i n v f 90 s u b r o u t i n e me x F u n c t i o
22、 n(n l h s,p l h s,n r h s,p r h s)!p lh s(*),p r h s(*)分别为输出、输入参数的指针数组,n l h s、n r h s 分 别为输出、输入参数的个数 i n t e g e r n l h s,n r h s,p l h s(),p r h s()!调用A P I 库函数申明 int e g e r mxGe&r,mxCr e a t e Do u b l e Ma t r i x,mx Ge t M,mxGe t N!程序内部使用变量申明 i n t e g e r A pr,r Lp r,m,n d o u b l e p r e c
23、 i s i o n,a l l o c a t a b l e:A(:,:)!获取第一个参数维数 m-m x G e t M(p r h s(1);n-m x G e t N(p r h s(1)!动态数组分配内存 A l l o c a t e(A(n,n)!创建输出参数矩阵 p l h s(1)=m x C r e a t e D o u b l e Ma t r i x(n,n,0)!获取输入参数的数据指针 A_p r=m x G e t P r(p r h s(1);n A r=m x G e t P r(p r h s(2)!将数据类型转换为双精度类型数据 c a l l m x
24、C o p y P t r T o R e a l 8(A_p r,A,n n)c a l l m x C o p y P t r T o l n t e g e r 4(n A 3 r,n,1)!调用求逆矩阵的计算子程序G J i n v c a l l GJ_in v(A,n)!将计算结果返回输出数据指针 c a l l m x C o p y R e a l 8 T o P t r(A,m x G e&r(p s(1),n n)!动态数组释放内存 De a l l o c a t e(A)e n d !计算子程序(具体程序代码略)s u br o u t i n e OJ_i n v(A
25、,n)3 1 2 m e x 文件的编译 对me x G J-m f 9 0 命令进行编译,便可得到G J _ i n V I n e x w 3 2 动态链接库文件。运行结果如下:me x GJi n v f 9 0 A=GJ_i n v(h i l b(2),i n t 3 2(2)求二阶H i l b e r t 矩阵的逆矩阵 Al-4 0 0 0 0 60 0 0 0 6 0 0 0 0 1 20 0 0 O 注:调用GJ_i n v 求逆时,第二个参数必须利用函数 i n t 3 2 转化为整型,因为常数2 在Ma t l a b 里亦默认为双度浮点型。3 2 Ma t l a b
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab Fortran 混合 编程 DLL 实现 方法
限制150内