Matlab及应用 第10章 MATLAB 外部程序接口技术.ppt

Matlab及应用 第10章 MATLAB 外部程序接口技术.ppt

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Institute of Information Theory Technology Center(ITTC) * Information Theory Technology Center(ITTC) MATLAB及应用 —第十章 外部程序接口技术 MATLAB功能强大,开发效率高,但主要缺点是执行速度比较慢 MATLAB提供了外部程序接口,允许MATLAB和其他应用程序进行数据交换,并提供了C/C++, FORTRAN数学和图形函数库,为在其他程序设计语言中调用MATLAB高效算法提供了可能。 MATLAB提供的外部程序接口技术主要由三种 MEX文件: 是matlab环境下调用C、FORTRAN语言编写的应用程序模块。 matlab 计算引擎: 在使用C、FORTRAN编程时可调用matlab函数库进行计算。 MAT文件: 实现matlab与C、FORTRAN语言程序间的数据交换 MATLAB外部程序接口技术 MATLAB不能在M文件中直接调用C语言程序 MEX(MATLAB Executable)动态链接函数接口 是MATLAB调用别的语言(包括C语言)编写的程序或算法的接口 MEX文件 是一种动态链接程序, MATLAB可以象调用M文件一样调用它 Matlab与C语言程序的应用编程接口 MEX文件主要有以下几方面的应用: 已经开发的C语言程序,则不必将其转化为M文件而重复劳动,通过添加入口程序mexFunction,可以由MATLAB调用。 在MATLAB中,M文件的计算速度特别是循环迭代的速度远比C语言慢,因此可以把要求大量循环迭代的部分用C语言编写为MEX文件,提高计算速度。 直接控制硬件,如A/D采集卡,D/A输出卡等,以用于数据采集或控制应用。 MEX文件 MEX文件的源程序由两部分组成: 计算子程序 包含所有完成计算功能的程序代码,计算程序可以是普通的C语言程序,按照C语言规则编写即可 入口子程序mexFunction 在MATLAB系统与被调用的外部子程序间建立通信联系 入口子程序的名字必须是mexFunction,调用格式为: void mexFunction(int nlhs,mxArray *plhs[],int nrhs, mxArray *prhs[]) nlhs:输出参数数目? plhs:指向mxArray(MATLAB中所有数据都由mxArray定义)的输出参数的指针? nrhs:输入参数数目? Prhs:指向mxArray的输入数据的指针。 MEX文件(续) mexFunction函数举例 使用[a,b]=test(c,d,e)调用mex函数test时,传给test的这四个参数分别是 ??????2,plhs,3,prhs 其中:? prhs[0]=c? prhs[1]=d? prhs[2]=e? plhs[0]=a plhs[1]=b ——注意:MEX文件的两个主要部分在使用中可以是独立的,也可以是组合在一起的。不管是哪一种情况,MEX文件都必须包含头文件mex.h,以便正常申明入口程序。 MEX文件(续) 例: 第一步:给出一个简单的C语言程序 该程序的功能是将标量x加倍。 #include math.h void timestwo(double y[], double x[]) { y[0]=2.0*x[0]; return; } Matlab与C语言混合编程示例 #include mex.h void timestwo(double y[], double x[]) { y[0] = 2.0*x[0]; } void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { double *x,*y; int mrows,ncols; /*检查正确的参数数目 */ if(nrhs!=1) { mexErrMsgTxt(需要一个输入参数 .); } else if(nlhs1) { mexErrMsgTxt(输出参数太多 ); } Matlab与C语言混合编程示例(续) /*输入变量必须是非复数类型的标量 .*/ mrows = mxGetM(prhs[0]); ncols = mxGetN(prhs[0]); if( !mxIsDouble(prhs[0]) || mxIsComplex(prhs[0]) || !(mrows==1 ncols==1) ) { mexErrMsgTxt(输入变量必须是非

文档评论(0)

a13355589 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档