- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
而CC是目前最为流行的高级程序设计语言,两者互补结
1
摘要:Matlab具有很强的数值计算和分析等能力,而C/C++是目前最为流行的高级程序设计语言,两者互补结合的混合编程在科学研究和工程实践中具有非常重要的意义。从Matlab调用C/C++代码及C/C++调用m文件两方面,深入地研究了它们之间混合编程的原理和实现机制,并且给出了具体条件下的混合编程方法和步骤。实验表明,给出的Matlab与C/C++混合编程 HYPERLINK /product/searchfile/5540.html \t _blank 接口及应用方法是有效、实用的。
1 引言
Matlab 是当前应用最为广泛的数学软件,具有强大的数值计算、数据分析处理、系统 分析、图形显示甚至符号运算等功能[1]。利用这一完整的数学平台,用户可以快速实现十分 复杂的功能,极大地提高工程分析计算的效率[2][3]。但与其他高级程序[3]相比,Matlab 程序 是一种解释执行程序,不用编译等预处理,程序运行速度较慢[4]。
C/C++语言是目前最为流行的高级程序设计语言之一[5]。它可对操作系统和应用程序以 及硬件进行直接操作,用C/C++语言明显优于其它解释型高级语言,一些大型应用软件如 Matlab 就是用C 语言开发的。
在工程实践中,用户经常遇到Matlab 与C/C++混合编程的问题。本文基于Matlab 6.5和VC6.0 开发环境,在Windows 平台下就它们之间的混合编程问题进行深入研究并举例说明。
2 Matlab 调用C/C++
Matlab 调用C/C++的方式主要有两种:利用MEX 技术和调用C/C++动态连接库。
在Matlab 与C/C++混合编程之前,必须先对Matlab 的编译应用程序mex 和编译器mbuild进行正确的设置[1]:
对Matlab 编译应用程序mex 的设置:Mex –setup.
对Matlab 编译器mbuild 的设置:Mbuild –setup.
2.1 调用C/C++的MEX 文件
MEX 是Matlab Executable 的缩写,它是一种“可在Matlab 中调用的C(或Fortran)语 言衍生程序”[6]。MEX 文件的使用极为方便,其调用方式与Matlab 的内建函数完全相同,只 需在Matlab 命令提示符下键入MEX 文件名即可。
一个C/C++的MEX源程序通常包括4个组成部分,其中前3个是必须包含的内容,第4个则根据所实现的功能灵活选用:(1)#include “mex.h”;(2)MEX文件的入口函数mexFunction, MEX文件导出名必须为mexFunction函数;(3)mxArray;(4)API???数
通过简单的例子说明C/C++的MEX 源程序编写和调用过程:
#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(One input required.);
else if(nlhs1) mexErrMsgTxt(Too many HYPERLINK /stock-ic/OUTPUT.html \t _blank output arguments);
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.);
plhs[0]=mxCreateDoubleMatrix(mrows,ncols, mxREAL);
x=mxGetPr(prhs[0]); y=mxGetPr(plhs[0]); timestwo(y,x); }
用指令mex timestwo.c 编译此文件,然后在MATLAB 命令行下调用生成的MEX 文件即可。
2.2 调用C/C++动态连接库
Matlab 提供对动态连接库DLL 文件的接口[7]。利用该接口,可在Matlab 中调用动态连 接库导出的函数。Matlab 对DLL 的接口支持各种语言编写的DLL 文件。在调用DLL 文件
您可能关注的文档
最近下载
- 基孔肯雅热课件.pptx VIP
- 唐宋湖南移民在湖南移民史上地位之的研究.doc VIP
- Unit2 We're Family 单元词汇图文讲解课件-七年级英语上册课件(人教版2024).pptx VIP
- 低功耗嵌入式系统的设计与实现论文.docx VIP
- 广东金太阳2026届高三8月开学联考英语试卷(含答案详解).doc VIP
- 浅谈项目实施过程中造价人员工作重点.doc VIP
- 《餐饮服务食品安全操作规范GB 31654-2021》知识培训.pptx VIP
- 绿色建筑施工方案.doc VIP
- 医务人员感染性病原体职业暴露预防、处置及上报制度.docx VIP
- 超声治疗仪产品技术要求完整注册版2024年.pdf
文档评论(0)