常用函数-Matlab与Fortran的交互III
- UID
- 1029342
- 性别
- 男
|
常用函数-Matlab与Fortran的交互III
这里主要了解一些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。 |
|
|
|
|
|