[转]Matlab与Fortran的交互III--常用函数

转 //blog.sina.com.cn/s/blog_476687050100cz4e.html
这里主要了解一些Matlab与Fortran交互中较为常用的函数,或子例行程序。

1. mexCallMATLAB   用于调用Matlab的内建函数、运算符,用户自定义的Matlab M文件以及MEX文件。

语法:integer*4 function mexCallMATLAB(nlhs,plhs,nrhs,prhs,name)

      integer*4 nlhs,nrhs,plhs(*),prhs(*)

      character* (*) name

解析:它是一个函数子程序,其四个形式参数的含义分别为:

      name为字符串类型,是用户希望执行的Matlab内建函数或其他一些文件和命令的名字。

      nlhs为整数类型,是用户执行name所包含的命令时期望输出的参数的个数,系统规定nlhs不超过50。

      plhs(*)为包含命令name输出参数内存地址的整数类型的数组,其中数组元素plhs(nlhs)包含了name第nlhs个输出参数的内存地址。

      nrhs为整数类型,是用户期望执行的命令name的输入元素的个数,nrhs不超过50。

      prhs(*)为包含命令name输入参数内存地址的整数类型的数组,其中数组元素prhs(nrhs)包含了name第nrhs个输入参数的内存地址。

   如果mexCallMATLAB调用的命令正确执行,返回值为0;反之,返回值为非0。

2. mexEvalString  用于输入一个表达式命令到Matlab]工作环境中执行。

语法:integer*4 function mexEvalString (command)

      character* (*) command

解析:这个函数与函数mexCallMATLAB的功能大致相同,不同的是函数mexCallMATLAB不但可以用来执行Matlab命令,而且可以通 过参数nlhs和plhs从Matlab环境中得到计算的结果,用于MEX文件的后续计算;而函数mexEvalString则没有这个功能,只能用于向 Matlab发送计算指令,无法取得计算结果,且出现命令右侧的参数必须在当前的mex文件的工作空间中已经存在。

3. mexGetFull  用于从Matlab工作空间中获得一个双精度类型阵列的全部数据,包括实部和虚部。

语法:integer*4 function mexGetFull (name,m,n,pr,pi)

      integer*4 m,n,pr,pi

      character* (*) name

解析:其五个形式参数的含义分别为

      name是一个字符串变量,为希望获取阵列的名字。

      m为整型变量,为name代表的阵列的行向量数。

      n为整型变量,为name代表的阵列的列向量数。

      pr为整型变量,为name代表的阵列的实部数据的指针。

      pi为整型变量,为name代表阵列的虚部数据的指针。

  它为用户提供了一种直接从Matlab工作空间获得双精度类型阵列的方法,它通过mxArray结构体,将阵列的维数和数据指针存入变量m、n、pr和pi中,接下来可用API函数mxCopyPtrToReal8就可以获得变量pr、pi所存在内存地址的数据了。 在阵列为实数类型时,变量pi中虚部数据的指针为0。

  如果函数子程序mexGetFull成功执行,其返回值为0;反之,则为1。

4. mxCalloc  动态分配内存

语法:integer*4 function mxCalloc (n,size)

      integer*4 n,size

解析:通过函数mxCalloc,用户可以在Matlab接口应用程序中方便的完成动态内存分配任务。 形参n指明了所分配的内存中存放元素的数量,而形参size则说明了每一个元素所占用的字节数,所以实际分配内存的字节数为n*size。

  如果函数执行成功,将返回一个指向所分配内存起始字节地址的指针;如果函数执行失败,在mex文件中,函数将终止整个程序的运行,并将控制返回到Matlab命令提示符下。

  函数Malloc的执行,将自动完成下面3个任务

    分配足够的堆内存;将内存中所有n个元素初始化为0;在Matlab的内存自动管理机制中对分配的内存进行注册,以便于在程序结束时进行自动释放。

5. mxCopyPtrToReal8  将某个阵列的实数或虚数部分的数据复制到一个Fortran语言的实数类型的数组中

语法:subroutine mxCopyPtrToReal8 (px,y,n)

      real*8 y(n)

      integer*4 px,n

解析:函数mxCopyPtrToReal8在Matlab接口应用程序中可直接用call进行调用。通过它,用户可以将某个阵列的实数或虚数部分的数据复制到一个Fortran语言的实数类型的数组中,函数的三个形参的含义为

      px为指向某个阵列的实数或虚数部分的数据的指针

      y为一个Fortran语言的实数类型数组

      n为希望复制的元素的个数

6. mxCopyReal8ToPtr  将一个Fortran语言的实数类型数组中的数据复制到某个阵列的实数部分或虚数部分中。

语法:subroutine mxCopyReal8ToPtr (y,px,n)

      real*8 y(n)

      integer*4 px,n

解析:函数mxCopyReal8ToPtr在Matlab接口应用程序中可直接用call进行调用。通过它,用户可以将一个Fortran语言的实数类型数组中的数据复制到某个阵列的实数部分或虚数部分中,函数的三个形参的含义为

      y为一个Fortran语言的实数类型数组

      px为指向某个阵列的实数或虚数部分的数据的指针

      n为希望复制的元素的个数

它与函数mxCopyPtrToReal8互为逆函数,它们的功能正好相反。

7. mxCreateFull 创建一个二维的存储类型为满的未赋值的阵列

语法:integer*4 function mxCreateFull (m,n,ComplexFlag)

      integer*4 m,n,ComplexFlag

解析:如果用户希望使用它的返回值,必须在程序的开始对该函数进行类型说明。通过它,用户可以方便的创建一个二维的存储类型为满的未赋值的阵列。它的三个形参的含义分别为

      m为所创建的阵列的行数

      n为所创建的阵列的列数

      ComplexFlag为所创建的阵列的类型,当ComplexFlag=1时,创建复数类型的阵列;当ComplexFlag=0时,创建实数类型的阵列。

  如果函数执行成功,将返回一个指向所创建阵列的指针;否则返回为0。

8. mxCreateString  创建一个1Xn的字符串类型的阵列,并通过形式参数赋值。

语法:integer*4 function mxCreateString (str)

      character* (*) str

解析:如果用户希望使用它的返回值,必须在程序的开始对该函数进行类型说明。通过它,用户可以方便的创建一个大小为1Xn的字符串类型的阵列,并通过字符串类型的形式参数str进行赋值。

9. mxGetM 获得阵列的行数

语法:integer*4 function mxGetM (pm)

      integer*4 pm

解析:如果用户希望使用它的返回值,必须在程序的开始对该函数进行类型说明。通过函数mxGetM,可方便的获得由形参pm指定的阵列的行数。

10. mxGetN  获得阵列的列数

语法:integer*4 function mxGetN (pm)

      integer*4 pm

解析:与mxGetM类似。通过它,可方便的获得由形参pm指定的阵列的列数。

11. mxGetName  获得阵列的名字

语法:character*32 function mxGetName (pm)

      integer* pm

解析:同函数mxGetM、mxGetN。通过它,可方便的获得由形参pm指定的阵列的名字。

12. mxGetString  从一个字符串类型阵列中读取内容,并存放到一个Fortran语言的字符串变量中。

语法:integer*4 function mxGetString (pm,str,strlen)

      integer*4 pm,strlen

      character* (*) str

解析:如果用户希望使用它的返回值,必须在程序的开始对该函数进行类型说明。通过函数mxGetString,可以方便的从一个字符串阵列中读取内容,并存放到一个Fortran语言的字符串变量中。函数的三个形参的含义分别为

      pm为指向字符串类型阵列的指针

      str为一个Fortran语言的字符串变量

      strlen为希望读取得字符串的长度

  如果函数执行成功,将返回0;反之,返回1。

13. mxSetM  设置阵列的行数

语法:subroutine mxSetM (pm,m)

      integer*4 pm,m

解析:在Matlab接口应用程序中可直接使用call关键字进行调用。通过函数mxSetM,可方便的对阵列的行数进行设置。函数的2个形参的含义分别为

      pm为指向一个阵列的指针

      m为行数

类似的函数包括函数mxSetN、mxSetName。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值