- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
- BPXZ-HT-54kVA-54kV-18kV變频串联谐振试验装置.doc
- BP神經网络matlab实例(简单而经典).doc
- BOT校園解决方案.doc
- BP神經网络原理及应用.doc
- BOSS2009學员使用手册.doc
- BP神經网络的学习.doc
- BP神經网络的设计实例(MATLAB编程).doc
- BP神經网络的设计实例.doc
- bp神經网络相关参数介绍与matlab编程实例.doc
- BP神經网络算法原理及编程实现.doc
- C-反應蛋白联合WBC分类检测在小儿感染中的临床应用.doc
- C.b-2013考研歷史学真题及答案解析.doc
- C.Primer_Plus(第五版)編程练习全部答案.doc
- C050202_一種等强锚杆的研制与加工.doc
- C060連接线施工组织设计.doc
- C09【數学】2010年高考数学计算试题分类汇编圆锥曲线.doc
- C10018證券营销违规行为与案例分析(含6套100分卷子)不用费力寻找多份,这份就足够.doc
- C10020企業会计准则执行中应当关注的问题答案.doc
- C10021企業会计准则执行中应当关注的问题答案A-100分.doc
- C10022公司財务报表分析A卷100分.doc
最近下载
- Fronius伏能士 TPS320 400 500 600iv TPS400 LSCADV MIG.MAG电源操作手册.pdf VIP
- 4 2实现中华民族伟大复兴的中国梦-议题式教学课件 23张-【新教材】2021-2022学年统编版(2019)高中政治必修一.pptx VIP
- 预制钢筋混凝土装配式检查井施工方案.pdf VIP
- 14J936 变形缝建筑构造.docx VIP
- 有限公司股权激励计划协议限制性股权.pdf VIP
- 金融业三个办法新规及实操要点解读课件.pptx VIP
- 人教版小学三年级下册劳动教育完整教案.pdf VIP
- 公文语言的特点.doc VIP
- 辅助生殖拮抗剂方案标准化应用专家共识.pptx VIP
- 国家建筑标准设计图集22G101-3 混凝土结构施工图平面整体表示方法制图规则和构造详图(独立基础、条形基础、筏形基础、桩基础).pdf VIP
文档评论(0)