- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
matlab中调用C代码
如果我有一个用C语言写的函数,实现了一个功能,如一个简单的函数:double add(double x, double y){return x + y;}现在我想要在Matlab中使用它,比如输入: a = add(1.1, 2.2)????3.3000要得出以上的结果,那应该怎样做呢?解决方法之一是要通过使用MEX文件,MEX文件使得调用C函数和调用Matlab的内置函数一样方便。MEX文件是由原C代码加上MEX文件专用的接口函数后编译而成的。可以这样理解,MEX文件实现了一种接口,它把在Matlab中调用函数时输入的自变量通过特定的接口调入了C函数,得出的结果再通过该接口调回Matlab。该特定接口的操作,包含在mexFunction这个函数中,由使用者具体设定。所以现在我们要写一个包含add和mexFunction的C文件,Matlab调用函数,把函数中的自变量(如上例中的1.1和2.2)传给 mexFunction的一个参数,mexFunction把该值传给add,把得出的结果传回给mexFunction的另一个参数,Matlab通过该参数来给出在Matlab语句中调用函数时的输出值(如上例中的a)。值得注意的是,mex文件是与平台有关的,以我的理解,mex文件就是另类的动态链接库。在matlab6.5中使用mex -v?选项,你可以看到最后mex阶段有类似如下的信息:-- del _lib94902.obj???-- del test.exp???-- del test.lib也就是说,虽然在matlab6.5生成的是dll文件,但是中间确实有过lib文件生成。比如该C文件已写好,名为add.c。那么在Matlab中,输入: mex add.c就能把add.c编译为MEX文件(编译器的设置使用指令mex -setup),在Windows中,MEX文件类型为mexw32,即现在我们得出add.mexw32文件。现在,我们就可以像调用M函数那样调用 MEX文件,如上面说到的例子。所以,通过MEX文件,使用C函数就和使用M函数是一样的了。我们现在来说mexFunction怎样写。mexFunction的定义为:void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){?}可以看到,mexFunction是没返回值的,它不是通过返回值把结果传回Matlab的,而是通过对参数plhs的赋值。mexFunction的四个参数皆是说明Matlab调用MEX文件时的具体信息,如这样调用函数时: b = 1.1; c = 2.2; a = add(b, c)mexFunction四个参数的意思为:nlhs = 1,说明调用语句左手面(lhs-left hand side)有一个变量,即a。nrhs = 2,说明调用语句右手面(rhs-right hand side)有两个自变量,即b和c。plhs是一个数组,其内容为指针,该指针指向数据类型mxArray。因为现在左手面只有一个变量,即该数组只有一个指针,plhs[0]指向的结果会赋值给a。prhs和plhs类似,因为右手面有两个自变量,即该数组有两个指针,prhs[0]指向了b,prhs[1]指向了c。要注意prhs是const的指针数组,即不能改变其指向内容。因为Matlab最基本的单元为array,无论是什么类型也好,如有double array、 cell array、 struct array……所以a,b,c都是array,b = 1.1便是一个1x1的double array。而在C语言中,Matlab的array使用mxArray类型来表示。所以就不难明白为什么plhs和prhs都是指向mxArray类型的指针数组。完整的add.c如下:#include mex.h // 使用MEX文件必须包含的头文件// 执行具体工作的C函数double add(double x, double y){????return x + y;}// MEX文件接口函数void mexFunction(int nlhs,mxArray *plhs[], int nrhs,const mxArray *prhs[]){????double *a;????double b, c;????plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);????a = mxGetPr(plhs[0]);????b = *(mxGetPr(prhs[0]));????c = *(mxGetPr(prhs[1]));????*a = add(b, c);}mexFunction的内容
您可能关注的文档
- 采购竞价文件1.doc
- 万科管理岗位.doc
- 矩阵求逆c代码.doc
- 公司物料编码规范081010.doc
- 费用报销管理制度.doc
- C语言程序源代码.doc
- 变送器招标书.doc
- 企业四证合一申请书.doc
- 施工常用资料表格.doc
- 2014年成本会计答案.doc
- [中央]2023年中国电子学会招聘应届生笔试历年参考题库附带答案详解.docx
- [吉安]2023年江西吉安市青原区总工会招聘协理员笔试历年参考题库附带答案详解.docx
- [中央]中华预防医学会科普信息部工作人员招聘笔试历年参考题库附带答案详解.docx
- [保定]河北保定市第二医院招聘工作人员49人笔试历年参考题库附带答案详解.docx
- [南通]江苏南通市崇川区人民法院招聘专职人民调解员10人笔试历年参考题库附带答案详解.docx
- [厦门]2023年福建厦门市机关事务管理局非在编工作人员招聘笔试历年参考题库附带答案详解.docx
- [三明]2023年福建三明市尤溪县招聘小学幼儿园新任教师79人笔试历年参考题库附带答案详解.docx
- [哈尔滨]2023年黑龙江哈尔滨市木兰县调配事业单位工作人员笔试历年参考题库附带答案详解.docx
- [上海]2023年上海市气象局所属事业单位招聘笔试历年参考题库附带答案详解.docx
- [台州]2023年浙江台州椒江区招聘中小学教师40人笔试历年参考题库附带答案详解.docx
最近下载
- 第15课 两次鸦片战争 教学课件(共31张PPT)高中历史人教统编版中外历史纲要上册.pptx VIP
- 电子课件-《GSP实务教程》课题七.pptx VIP
- 电机与电气控制技术 任务后练习题参考答案 赵红顺 .pdf
- PEP人教版小学英语六年级下册教案 全册.pdf VIP
- [北京]2024年北京市文物局局属事业单位招聘笔试历年参考题库附带答案详解.docx
- 【课件】平移(课件)人教版(2024)数学七年级下册.pptx VIP
- 电子课件-《GSP实务教程》课题六.pptx VIP
- 部编版道德与法治五年级下册《读懂彼此的心》练习题.docx VIP
- 《研学旅行课程设计》课件——研学课程方案设计.pptx VIP
- 《Lagrange中值定理.ppt
文档评论(0)