[转]Matlab与Fortran的交互II--函数

转自 http://blog.sina.com.cn/s/blog_476687050100bwuk.html
这里简要概括一下Fortran语言mex-函数和mx-函数。在Matlab应用程序接口函数中,分别提供了19个Fortran语言的mex-函数和39个mx-函数。下面就分别介绍:

一  mex-函数

19个mex-函数的声明分别为

integer*4 function mexAtExit (ExitFen)  --用于登记一个子例行程序,该函数在mex文件被清除或者Matlab终止执行时被调用,用来完成一定的善后工作。

integer*4 function mexCallMATLAB (nlhs,plhs,nrhs,prhs,name)  --用于调用Matlab的内建函数、用户自定义的Matlab文件以及mex文件

subroutine mexErrMsgTxt (error_msg)  --用于输出错误馅心,并返回到Matlab命令提示符下。

integer*4 function mexEvalString (command)  --用于输入一个表达式命令到Matlab工作环境中执行。

subroutine mexFunction (nlhs,plhs,nrhs,prhs)  --Fortran语言mex文件的入口点函数。

real*8 function mexGetEps()  --获得eps的值。其没有任何的输入参数,其返回值为Matlab环境中变量eps的值,该值为1除以Matlab中最大的浮点数的结果。

integer*4 function mexGetFull (name,m,n,pr,pi)  --从Matlab工作空间中获得一个双精度类型阵列的全部数据,包括实部和虚部。

integer*4 function mexGetGlobal (name)  --从Matlab的全局变量空间中获取一个mxArray结构体的指针。

real*8 function mexGetInf()  --获取无穷大的值。通过该函数子程序,用户可以从返回值中获得自己系统上无穷大的值。

integer*4 function mexGetMatrix (name)  --从调用者的工作空间复制一个mxArray结构体。

integer*4 function mexGetMatrixPtr (name)  --获取调用者工作空间中某个mxArray结构体的指针。其输入参量为一个字符串变量,代表了调用者工作空间中的某个mxArray结构体类型变量的名字。

real*8 function mexGetNaN ()  --用于获取Matlab内部变量NaN的值。

integer*4 function mexIsFinite (value)  --判断一个数值是否为有限值。当value为一个有限值时,返回值为1,否则为0。

integer*4 function mexIsInf (value)  --判断一个数值是否为无穷大。当value为Inf时,函数返回值为1,否则为0。

integer*4 function mexIsNan (value)  --判断一个数值是否为NaN。当value为NaN时,函数返回值为1,否则为0。

subroutine mexPrintf (message)  --向屏幕上输出信息。

integer*4 function mexPutFull (name,m,n,pr,pi)  --向调用者的工作空间输出一个存储类型为满的mxArray结构体。

integer*4 function mexPutMatrix (mp)  --向调用者的工作空间输出一个mxArray结构体。与函数mexPutFull实现的功能一致,不过实现的方式不同。

subroutine mexSetTrapFlag (trap_flag)  --用于设置调用函数mexCallMatlab发生错误时控制流的走向

 

二 mx-函数

39个Fortran语言的mx-函数的声明分别为

subroutine mxCopyCharacterToPtr (y,px,n)

subroutine mxCopyComplex16ToPtr (y,pr,pi,n)

subroutine mxCopyInteger4ToPtr (y,px,n)

subroutine mxCoptPtrToCharacter (px,y,n)

subroutine mxCopyPtrToComplex16 (pr,pi,y,n)

subroutine mxCopyPtrToInteger4 (px,y,n)

subroutine mxCopyPtrToPtrArray (px,y,n)

subroutine mxCopyPtrToReal8 (px,y,n)

subroutine mxCopyReal8ToPtr (y,px,n)

 

subroutine mxFree (ptr)

subroutine mxFreeMatrix (pm)

 

subroutine mxSetIr (pm,ir)

subroutine mxSetJc (pm,jc)

subroutine mxSetM (pm,m)

subroutine mxSetN (pm,n)

subroutine mxSetName (pm,name)

subroutine mxSetNzmax (pm,nzmax)

subroutine mxSetPi (pm,pi)

subroutine mxSetPr (pm,pr)

 

integer*4 function mxCalloc (n,size)

integer*4 function mxCreateFull (m,n,ComplexFlag)

integer*4 function mxCreateSpares (m,n,nzmax,ComplexFlag)

integer*4 function mxCreateString (str)

 

integer*4 function mxGetIr (pm)

integer*4 function mxGetJc (pm)

integer*4 function mxGetM (pm)

integer*4 function mxGetN (pm)

charater*32 function mxGetName (pm)

integer*4 function mxGetNzmx (pm)

integer*4 function mxGetPi (pm)

integer*4 function mxGetPr (pm)

real*8 function mxGetScalar (pm)

integer*4 function mxGetString (pm,str,strlen)

integer*4 function mxIsComplex (pm)

integer*4 function mxIsdouble (pm)

integer*4 function mxIsFull (pm)

integer*4 function mxIsNumeric (pm)

integer*4 function mxIsSparse (pm)

integer*4 function mxIsString (pm)

 

对于函数子程序来说,它们不但可以通过形实结合来传递返回值,而且可以通过函数名来传递一个返回值,如果在mex文件中希望使用函数子程序函数名的返回值,就必须在mexFunction入口点子例行程序中对函数子程序加以声明,而且必须保持名字以及类型完全一致。  对于子例行程序来说,则简单的多,它们仅仅使用形实结合的方式传递返回值,在mex文件中可以直接使用关键字call进行调tonf,无须任何形式的声明。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值