微机原理与接口技术答案Matlab 与Fortran 语言混合编程的接口技术_第1页
微机原理与接口技术答案Matlab 与Fortran 语言混合编程的接口技术_第2页
微机原理与接口技术答案Matlab 与Fortran 语言混合编程的接口技术_第3页
微机原理与接口技术答案Matlab 与Fortran 语言混合编程的接口技术_第4页
微机原理与接口技术答案Matlab 与Fortran 语言混合编程的接口技术_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

微机原理与接口技术答案 与 语言混合编程的接口技术 摘要:阐述了在matlab 环境下,调用 Fortran 语言的原理,并通过一实例说明如何实现Matlab,Fortran 两种语言的混合编程。 关键词:Fortran;Matlab;接口技术;混合编程 :TP311:A:1009-3044(xx)18-31643-01 ProgramInterface Technique for Matlab and Fortran Compiling PENG Yu-shan1,REN Xiang-he2 (1.Shandong Agricultural University,Taian 271018,China;2.Shanghai Institute of Optics and Fine Mechanics,Chinese Academy of Sciences,Shanghai 201800,China) Abstract:In this paperthe theory of using Fortran programme under Matlab environment is discussed.From an example,the interface technique between the two programmes is shown. Key words:Fortran;Matlab;interface technique;mixing programme MATLAB是当今流行的科学计算软件,专门以矩阵的形式处理数据,它把数值计算和可视化环境集成到一起,许多用户在使用时希望能够直接调用过去的FORTRAN经典计算程序。虽然MATLAB没有现成的接口程序,但其提供的标准API工具,使用户能够根据需要来编写接口程序, 完成MATLAB与其它外部程序的通讯。下面本文就以具体实例来说明如何编写完整的MATLAB与FORTRAN的接口程序。 1MATLAB 环境的配置 MEX文件是MATLAB 语言的外部程序调用接口,它可以调用外部的FORTRAN 程序。要调用外部的FORTRAN程序,必须先用MEX命令来搭建MATLAB调用FORTRAN的平台,具体步骤为:在MATLAB命令提示符下键入命令 mex -setup 系统提示 Please choose your piler for building external interface (MEX) files: Would you like mex to locate installed pilers y/n? 然后键入 y,回车,系统又会提示: Select a piler: 1Compaq Visual Fortran version 6.6 in d:program 2 L C version 2.4 in D:MATLAB7sysl 0 None Compiler: 在Compiler:后面输入1,回车,再按系统提示就会完成平台的搭建。如图1所示。系统配置完成后,就可以使用命令 mex myfunction调用FORTRAN 程序。 图1 2 FORTRANMEX文件的编写 FORTRAN 语言的MEX文件有两部分组成:接口程序和计算程序。 2.1 接口程序 接口程序可以完成两项任务:第一是从输入的参数中获得计算所需要的数据;第二是把计算的结果返回MATLAB。这样接口程序就完成了MATLAB 与FORTRAN语言之间通讯任务。 subroutine mexFunction(nlhs , plhs,nrhs,prhs) implicit none integerplhs(*), prhs(*) integermxGetpr,mxGreatFull integerx_pr, y_pr, y_pr, w_pr, nlhs,plhs, m,n,size real(kind=8) x,y,z,w C 参数nlhs,nrhs 分别代表输出和输入数据的个数; plhs, prhs,分别代表输出和 C输入数据的指针,(*)代表参数长度不确定要根据实际情况而定。 if (nrhs /= 2) then C 判断输入数据个数 本文假设有个输入数据 call mexErrMsgTxt(One input required) else if (nlhs /=2) then C判断输出数据个数,本文假设有两个输出数据 call mexErrMsgTxt(One output required) end if C检查数据的类型 if (mxIsNumeric(prhs (1).ne.1) then Cprhs (1) 为第一个数据的指针 call mexErrMsgTxt(Input must be a number1) else if (mxIsNumeric(prhs (2).ne.1) then Cprhs (2) 为第二个数据的指针 call mexErrMsgTxt(Input must be a number1) end if C 获取输入数据的大小 m=mxGetM(prhs(2) n=mxGetN(prhs(2) C产生输出数组 plhs(1)=mxCreateFull(m,n,0)C输出数据的指针 plhs(2)=mxCreateFull(m,n,0) C读取第一个输入数据地址并放在指针x_pr 中 x_pr=mxGetPr(prhs(1) C读取第二个输入数据地址并放在指针y_pr 中 y_pr=mxGetPr(prhs(2) C读取第一个输出数据地址并放在指针z_pr 中 z_pr=mxGetPr(plhs(1) C读取第二个输出数据地址并放在指针w_pr 中 w_pr=mxGetPr(plhs(2) C将计算结果转换成指针返回到MATLAB C从第一个输入数据地址读取数值并返回x中 call mxCopyPtrToReal8(x_pr,x,size) C从第二个输入数据地址读取数值并返回y中 call mxCopyPtrToReal8(y_pr,y,size) C调用FORTRAN 计算程序 calltest(x,y,z,w) C将计算结果返回MATLAB C从第一个计算数据z输出到指针z_pr call mxCopyReal8ToPtr(z,z_pr,size) C从第二个计算数据w输出到指针w_pr call mxCopyReal8ToPtr(w,w_pr,size) return end 2.2计算程序 计算程序主要完成你所需要的计算任务,它是完全是用FORTRAN写的,而且在这一部分FORTRAN还可以调用自己的子程序。这一部分要和接口程序并存于一个文件里。 subroutine test(x,y,z,w) implicit none real(kind=8) x,y,z,w z=x*8 w=f(x,y)CFORTRAN内部子程序 return end C FORTRAN 内部子程序 Functionf(x,y) implicit none real(kind=8) x,y,f f=x*y return end 3 FORTRAN MEX文件执行 把上面的接口程序存成myfunction.f到MATLAB的work的文件里。在MATLAB命令窗口运行 mexmyfunction x=2.0 % 初始输入值 y=7.8 % 初始输入值 z,w=test(x,y) %调用FORTRAN里的test子程序,z,w是输出数据;x,y是输 %变量;而且prhs(1) 就是输入数据x的指针,prhs(2) 就是输入数%据y的指针;plhs(1) 就是输出数据z的指针,plhs(2) 就是输出 %数据w的指针。 运行后的结果为 z=16 w=15.6 4 结束语 本文详细地介绍的 FORTRAN和MATLAB混合编程的接口问题,并给出了有多个输入输出数据。有了接口程序可以使MATLAB使用者方便地调用FORTRAN程序,这样可以大大提高MATLAB计算效率,节省了很多重新写已有FORTRAN程序的时间。 _: 1求实科技.Matlab 7.0 从入门到精通M.人民邮电出版社,xx. 2Stephen J.C

温馨提示

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

评论

0/150

提交评论