Matlab与Fortran语言混合编程的接口技术

时间:2024-01-25 点赞:52101 浏览:107054 作者原创标记本站原创

本文是一篇数据论文范文,数据相关毕业论文开题报告,关于Matlab与Fortran语言混合编程的接口技术相关本科毕业论文范文。适合数据及程序及参考文献方面的的大学硕士和本科毕业论文以及数据相关开题报告范文和职称论文写作参考文献资料下载。

摘 要:阐述了在matlab环境下,调用Fortran语言的原理,并通过一实例说明如何实现Matlab,Fortran两种语言的混合编程.

关 键 词:Fortran;Matlab;接口技术;混合编程

中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)18-31643-01

ProgramInterfaceTechniqueforMatlabandFortranCompiling

PENGYu-shan1,RENXiang-he2

(1.ShandongAgriculturalUniversity,Tai'an271018,China,2.ShanghaiInstituteofOpticsandFineMechanics,ChineseAcademyofSciences,Shanghai201800,China)

Abstract:InthispaperthetheoryofusingFortranprogrammeunderMatlabenvironmentisdiscussed.Fromanexample,theinterfacetechniquebetweenthetwoprogrammesisshown.

Keywords:Fortran,Matlab,interfacetechnique,mixingprogramme

MATLAB是当今流行的科学计算软件,专门以矩阵的形式处理数据,它把数值计算和可视化环境集成到一起,许多用户在使用时希望能够直接调用过去的FORTRAN经典计算程序.虽然MATLAB没有现成的接口程序,但其提供的标准API工具,使用户能够根据需要来编写接口程序,完成MATLAB与其它外部程序的通讯.下面本文就以具体实例来说明如何编写完整的MATLAB与FORTRAN的接口程序.

1MATLAB环境的配置

MEX文件是MATLAB语言的外部程序调用接口,它可以调用外部的FORTRAN程序.要调用外部的FORTRAN程序,必须先用MEX命令来搭建MATLAB调用FORTRAN的平台,具体步骤为:在MATLAB命令提示符下键入命令

>>mex-setup

系统提示

Pleasechooseyourpilerforbuildingexternalinterface(MEX)files:

Wouldyoulikemextolocateinstalledpilers[y]/n

然后键入y,回车,系统又会提示:

Selectapiler:

[1]CompaqVisualFortranversion6.6ind:\program

[2]LccCversion2.4inD:\MATLAB7\sys\lcc

[0]None

Compiler:

在Compiler:后面输入1,回车,再按系统提示就会完成平台的搭建.如图1所示.系统配置完成后,就可以使用命令mexmyfunction调用FORTRAN程序.

图1

2FORTRANMEX文件的编写

FORTRAN语言的MEX文件有两部分组成:接口程序和计算程序.

2.1接口程序

接口程序可以完成两项任务:第一是从输入的参数中获得计算所需要的数据;第二是把计算的结果返回MATLAB.这样接口程序就完成了MATLAB与FORTRAN语言之间通讯任务.

subroutinemexFunction(nlhs,plhs,nrhs,prhs)

implicitnone

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)thenC判断输入数据个数本文假设有个输入数据

callmexErrMsgTxt(‘Oneinputrequired’)

elseif(nlhs/等于2)thenC判断输出数据个数,本文假设有两个输出数据

callmexErrMsgTxt(‘Oneoutputrequired’)

endif

C检查数据的类型

if(mxIsNumeric(prhs(1)).ne.1)then

Cprhs(1)为第一个数据的指针

callmexErrMsgTxt('Inputmustbeanumber1')

elseif(mxIsNumeric(prhs(2)).ne.1)then

Cprhs(2)为第二个数据的指针

callmexErrMsgTxt('Inputmustbeanumber1')

endif

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中

callmxCopyPtrToReal8(x_pr,x,size)

C从第二个输入数据地址读取数值并返回y中

callmxCopyPtrToReal8(y_pr,y,size)

C调用FORTRAN计算程序

calltest(x,y,z,w)

C将计算结果返回MATLAB

C从第一个计算数据z输出到指针z_pr

callmxCopyReal8ToPtr(z,z_pr,size)

C从第二个计算数据w输出到指针w_pr

callmxCopyReal8ToPtr(w,w_pr,size)

return

end

2.2计算程序

计算程序主要完成你所需要的计算任务,它是完全是用FORTRAN写的,而且在这一部分FORTRAN还可以调用自己的子程序.这一部分要和接口程序并存于一个文件里.

subroutinetest(x,y,z,w)

implicitnone

real(kind等于8)x,y,z,w

z等于x*8

w等于f(x,y)CFORTRAN内部子程序

return

end

CFORTRAN内部子程序

Functionf(x,y)

implicitnone

real(kind等于8)x,y,f

f等于x*y

return

end

3FORTRANMEX文件执行

把上面的接口程序存成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程序的时间.

相关论文

利用软件编程和接口技术

本文是一篇可靠性论文范文,可靠性类本科毕业论文范文,关于利用软件编程和接口技术相关毕业论文模板范文。适合可靠性及计算机及软件开发方面。

实现VC++与MATLAB混合编程

本文是一篇软件开发论文范文,软件开发方面有关自考毕业论文开题报告,关于实现VC++与MATLAB混合编程相关本科毕业论文范文。适合软件开发及参。

VisualC++与Matlab混合编程方法的对比

本文是一篇可靠性论文范文,可靠性相关本科毕业论文范文,关于VisualC++与Matlab混合编程方法的对比相关大学毕业论文范文。适合可靠性及方法。

C#,JA与MATLAB混合编程技术

本文是一篇计算机论文范文,计算机方面有关毕业论文格式范文,关于C ,JA与MATLAB混合编程技术相关研究生毕业论文开题报告范文。适合计算机及。

MATLAB与VC++混合编程的应用

本文是一篇软件开发论文范文,关于软件开发毕业论文模板,关于MATLAB与VC++混合编程的应用相关毕业论文参考文献格式范文。适合软件开发及文件。