C-MEX程序編写学习笔记.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C-MEX程序編写学习笔记

C-MEX程序编写学习笔记 胡荣春 2006-10-11 MEX文件简介 在MATLAB中可调用的C或Fortran语言程序称为MEX文件。MATLAB可以直接把MEX文件视为它的内建函数进行调用。MEX文件是动态链接的子例程,MATLAB解释器可以自动载入并执行它。 MEX文件主要有以下用途: 对于大量现有的C或者Fortran程序可以无须改写成MATLAB专用的M文件格式而在MATLAB中执行。 对于那些MATLAB运算速度过慢的算法,可以用C或者Frotran语言编写以提高效率。 一个MEX文件例子 #include mex.h /* timestwo.c 本MEX文件的目的是实现timestwo的功能*/ void timestwo(double y[], double x[]) { y[0] = 2.0*x[0]; } /*下面这个mexFunction的目的是使MATLAB知道如何调用这个timestwo函数*/ void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) /* nlhs是MATLAB命令行方式下输出参数的个数; *plhs[]是MATLAB命令行方式下的输出参数; nrhs是MATLAB命令行方式下输入参数的个数; *prhs[]是MATLAB命令行方式下的输入参数; */ { double *x,*y; //double指针类型不能改变!! int mrows,ncols; /* Check for proper number of arguments. */ if(nrhs!=1) mexErrMsgTxt(One input required.); else if(nlhs1) mexErrMsgTxt(Too many output arguments); /* 在MATLAB命令行方式下,本MEX文件的调用格式是y=timestwo(x) 输入参数(x)个数=1,输出参数(y)个数=1,所以在程序一 开始就检查nrhs是否=1以及nlhs是否1(因为MATLAB有一个缺省 输出参数ans,所以nlhs可以=0 */ mrows = mxGetM(prhs[0]); /* 获得输入矩阵的行数 */ ncols = mxGetN(prhs[0]); /* 获得输入矩阵的列数 */ if( !mxIsDouble(prhs[0]) || mxIsComplex(prhs[0]) || !(mrows==1 ncols==1) ) mexErrMsgTxt(Input must be a noncomplex scalar double.); /* 判断输入矩阵是否是double类,以及它是否只包括单个元素 */ /* 为输出创建一个矩阵,显然这个矩阵也应该是1x1的 */ plhs[0] = mxCreateDoubleMatrix(mrows,ncols, mxREAL); x = mxGetPr(prhs[0]); /* 获得指向输入/输出矩阵数据的指针 */ y = mxGetPr(plhs[0]); timestwo(y,x); /* 调用C 函数timestwo(y,x) */ } 把上面这个文件timestwo.c编辑完成后,在matlab命令行里输入: mex timestwo.c matlab会提示你选择一个编译器进行编译,如果安装了VC,则选择VC++即可。编译完成后会在同一目录下生成同名的动态链接库文件timestwo.dll。此后再输入“mex ***.c”编译mex文件时将不再提示用户选择编译器,而自动选择默认的编译器编译。若想改变编译器进行编译,可输入“mex timestwo.c –setup”。 编译完成后即可使用此动态链接库了。在MATLAB命令行下输入: x = 2; y = timestwo(x) 将会显示: y = 4 MEX文件格式详解 首先编制自己的C算法程序,紧跟着定义mexFunction函数,mexFunction的定义法唯一,它只能是如下形式: void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) 其名称和参数类型不许有任何改变,在mexFunciton函数中可以调用你刚定义好的C 程序。 参数定义 以上面的timestwo.c文件为例,当编译完成后在matlab命令行输入“y = timestwo(x

文档评论(0)

cv7c8hj6b4I + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档