[转载]Matlab与Fortran的交互--基本概念

转载自 http://blog.sina.com.cn/s/blog_476687050100bw5j.html

 

如果需要进行Matlab环绕Fortran语言的交互,必须通过Matlab提供的应用编程接口(API)来实现与外部的接口,从而可以在Matlab 环境中实现调用Fortran程序、输入或输出数据以及和其它软件程序间建立客户/服务器关系等功能。下面主要说一下在Matlab环境中如何实现调用 Fortran程序(函数)。

一  MEX文件

    要在Matlab中调用Fortran代码,解决方法就是利用MEX文件。MEX是Matlab Executable的缩写。MEX文件类似于M文件,是Matlab系统的外部程序地用接口,是一种能够在Matlab环境中可以被Matlab的解释 器解释并执行的函数文件。MEX文件可以直接使用C语言或Fortran语言来编写,在相应的C语言或Fortran语言代码中,就可以调用已有的大量C 语言或Fortran语言算法。利用MEX文件可以完成:

1)在Matlab中使用已有的C语言或Fortran语言代码;

2)解决M语言运行速度的瓶颈;

3)隐藏算法的细节;

4)扩展Matlab的能力。

    MEX文件的使用极为方便,只需在Matlab命令提示符下键入MEX文件名即可,这与Matlab的内建函数的调用方式完全相同。Matlab系统规定,MEX文件的执行优先级高于M文件。

 

二 mx-函数和mex-函数

    在Matlab外部程序接口函数库中,存在两种类型的库函数,分别以mx和mex为前缀,并且完成不同的功能。

1、mx-函数库

mx-函数库是Matlab外部程序接口函数库中提供的一系列函数,它们均以mx为前缀,主要功能是为用户提供了一种在c语言和Fortran语言中创建、访问、操作和删除mxArray结构体对象的方法。

需注意的是,Fortran语言的mx-函数与C语言的mx-函数无论是在定义还是在使用上都存在很大的不同。

相关C语言中所用mx-函数均在目录

<MATLAB根目录>\EXTERN\INCLUDE

下的头文件MATRIX.H中得到声明。

2、mex 函数库

mex- 函数库也是Matlab外部程序接口函数库中提供的一系列函数,它们均以mex为前缀,主要功能是与Matlab环境进行交互,从Matlab环境中获取必要的阵列数据,并且返回一定的信息,包括文本提示,数据阵列等。

需注意的是,以mex为前缀的函数只能用于MEX文件中。

    相关C语言中所用mex-函数均在目录

<MATLAB根目录>\EXTERN\INCLUDE

下的头文件MEX.H中得到声明。

 

三 MEX源文件的基本结构

    Fortran语言MEX源文件是标准的Fortran语言源文件(在创建Fortran语言MEX源文件的时候可使用Fortran77或Fortran90的语言标准)。下面看一个简单的例子。

c   入口函数//入口子例行程序(gateway routine)

    subroutine mexFunction(nlhs,plhs,nrhs,prhs)

c-----------------------------------------------

c   参数声明

    integer plhs(*),prhs(*)

    integer nlhs,nrhs

    这里mexFunction函数类似C语言源文件的main函数,它是MEX文件的入口函数。当在Matlab命令中执行MEX函数时,Matlab解释器将从此函数处开始执行。该入口函数的输入参数有四个,其意义分别是:

nlhs:表示输入参数的个数

plhs:mxArray类型的指针数组,表示MEX函数的输入参数

nrhs:表示输出参数的个数

prhs:mxArray类型的指针数组,表示MEX函数的输出参数

Matlab的数据在Fortran语言中没有显性的定义该数据结构,在Fortran语言MEX文件中需要通过一种所谓的“指针”类型数据完成Fortran语言和Matlab之间的数据传递。

    入口函数之后就是MEX源文件的程序主体部分了--计算子例行程序(computational routine),在这里需要完成Matlab数据的获取和内存的分配,调用相应的计算子程序或函数,完成MEX文件的计算工作,最后将必要的输出返回给Matlab。它是完全的Fortran语言编程,不涉及到任何的接口内容。

    程序的结尾是Fortran语言的特别要求,必须有return和end关键字作为Fortran语言源程序的结束。

需注意的是,在Fortran语言MEX文件中只支持两种类型的数据,即双精度类型和字符串类型,而在C语言MEX文件中则几乎支持所有的数据类型。

 

四 Fortran语言MEX文件的执行流程

    当对一个Fortran语言MEX文件的源程序进行编译后,如果成功即可以得到与源程序名相同的DLL文件(建议将源程序的取名与程序中计算子例行程序的名字保持相同)。

在Matlab的工作环境中,按照Matlab语言的语法

[a,b,b,...]=mexfile_name(x,y,z,...)

正确键入MEX文件名和MEX文件所需的参数,就可以运行MEX文件了。这时,参数plhs和参数prhs分别为包含所有输出和输入参数地址的整型数足,参数nlhs和nrhs则分别包含了输出和输入参数的个数。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值