新闻中心

EEPW首页>EDA/PCB>设计应用> Matlab与C/C++混合编程接口及应用

Matlab与C/C++混合编程接口及应用

作者: 时间:2012-08-27 来源:网络 收藏

摘要:具有很强的数值计算和分析等能力,而C/C++是目前最为流行的高级程序设计语言,两者互补结合的在科学研究和工程实践中具有非常重要的意义。从调用C/C++代码及C/C++调用m文件两方面,深入地研究了它们之间的原理和实现机制,并且给出了具体条件下的方法和步骤。实验表明,给出的与C/C++混合编程及应用方法是有效、实用的。

本文引用地址://m.amcfsurvey.com/article/189994.htm

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(nlhs>1) mexErrMsgTxt(Too many 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 文件即可。


上一页 1 2 3 4 下一页

评论


相关推荐

技术专区

关闭