- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于MEX文件的MATLAB与C语言接口的实现
摘要:在MATLAB中,M文件的计算速度特别是循环迭代的速度远比C语言慢,因此可以把要求大量循环迭代的部分用C语言编写为MEX文件,然后在MATLAB中调用此文件,以提高计算速度。该文通过实例详述了如何实现此过程。
关键词:MATLAB;C;MEX文件;接口
中图分类号:TP312文献标识码:A文章编号:1009-3044(2009)24-7002-02
Implementation of Interface Between MATLAB and C Language Base on Mex File
LI Wei-gang
(Engineering College of Chinese Peoples Armed Police Force,Xian 710086,China)
Abstract: In MATLAB,the efficiency of M-file for caculation is down far from C languages when executing much iterative sentence.Therefore we may relize the part by compiled Mex-file by C language,then through calling the file on MATLAB to improve efficiency.The paper will set forth how to achieve the process by an example.
Key words: MATLAB; C; Mex-File; Interface
MATLAB作为世界顶尖的数学应用软件,以其强大的工程计算、算法研究、工程绘图、应用程序开发、数据分析和动态仿真等功能,在航空航天、机械制造和工程建筑等领域发挥着及其重要的作用。MATLAB是矩阵语言,是为向量和矩阵操作设计的,一般来说,如果运算可以用向量或矩阵实现,其运算速度是非常快的。但若运算中涉及到大量的循环迭代处理,MATLAB的速度的是令人难以忍受的[1]。解决方法之一为:当必须使用循环时,把它写为MEX文件,这样不必在每次运行循环中的语句时MATLAB都对它们进行解释。而C语言功能丰富,使用灵活方便,目标程序效率高。因此,借助C语言来进行算法的设计,利用MATLAB完整的、功能齐全的编程环境来实现数据和程序的交互是非常必须而且有益的。
1 MEX文件的介绍
MEX文件是一种动态连接子程序,使用C语言和FORTRAN编写,MATLAB对其格式做了统一规定,它是由MATLAB解释器自动调用并执行动态链接函数。在WINDOWS操作系统中这种文件类型的后缀名为dll。而其它平台有较大变化[2],具体扩展名变化如表1所示。
2 C语言的MEX文件的组成与参数
C语言MEX文件的源程序由两个不同的部分组成,每个部分完成不同的任务。
1) 计算子程序(Comutational Routine),它包含了实际完成计算功能的源代码,用来完成实际的计算工作,它是以函数存在的,按照C语言规则编写。
2) 入口子程序(Gateway Routine),它是计算子程序同MATLAB环境之间的接口,用来完成两者之间的通信任务。是以入口函数mxFunction实现,通常所做的工作是检测输入、输出参数个数和类型的正确性,然后利用mx-函数得到MATLAB传递过来的变量(比如矩阵的维数、向量的地址等),传递给计算子程序。
图1显示了如何向MEX文件输入数据,通过接口函数调用计算程序完成运算过程,最后向MATLAB返回计算结果的过程。
MEX文件的两个主要部分在使用中可以是独立的,也可以是组合在一起的。但不管那种情况,都要包含#include mex.h,以保证入口点和接口程序的正确声明。注意,入口程序的名称必须是mexFunction,并且包含四个参数[3],即:
void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])
在C语言的MEX文件中,参数nlhs和nrhs包含输出和输入变量的数目,借助于这两个参数,MEX文件被调用。参数plhs和prhs是包含指向MEX文件输出和输入变量的指针的向量,prhs是长度为nrhs的输入变量的指针数组,plhs是长度为nlhs的输出变量的指针数组。比如从MATLAB命令窗口来调用一个MEX文件:
x=fun(y,z);
则M
文档评论(0)