本论文是一篇数据相关毕业论文格式范文,关于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命令提示符下键入命令
有关论文范文主题研究: | 关于数据的论文范文集 | 大学生适用: | 本科论文、学年论文 |
---|---|---|---|
相关参考文献下载数量: | 27 | 写作解决问题: | 如何怎么撰写 |
毕业论文开题报告: | 论文任务书、论文选题 | 职称论文适用: | 杂志投稿、高级职称 |
所属大学生专业类别: | 如何怎么撰写 | 论文题目推荐度: | 经典题目 |
>>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