第十章MATLAB外部程序接口技术

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MEX文件主要有以下几方面的应用:
– 已经开发的C语言程序,则不必将其转化为M文件而重复劳动, 通过添加入口程序mexFunction,可以由MATLAB调用。 – 在MATLAB中,M文件的计算速度特别是循环迭代的速度远比C 语言慢,因此可以把要求大量循环迭代的部分用C语言编写为 MEX文件,提高计算速度。
y = mxGetPr(plhs[0]);
/* Call the timestwo subroutine. */ timestwo(y,x);
8
Matlab与C语言混合编程示例(续)
第三步:将此MEX文件复制到当前工作目录进行编译和链

– 在MATLAB命令窗口中输入: mex timestwo.c
– MEX文件:
» 是matlab环境下调用C、FORTRAN语言编写的应用程序模块。
MATLAB提供的外部程序接口技术主要由三种
– matlab 计算引擎:
» 在使用C、FORTRAN编程时可调用matlab函数库进行计算。
– MAT文件:
» 实现matlab与C、FORTRAN语言程序间的数据交换
– 使用[a,b]=test(c,d,e)调用mex函数test时,传给test的这四个 参数分别是 2,plhs,3,prhs 其中: prhs[0]=c prhs[1]=d prhs[2]=e plhs[0]=a plhs[1]=b
——注意:MEX文件的两个主要部分在使用中可以是独立的,也可 以是组合在一起的。不管是哪一种情况,MEX文件都必须包含 头文件"mex.h",以便正常申明入口程序。
/* Create matrix for the return argument. */
plhs[0] = mxCreateDoubleMatrix(mrows,ncols, mxREAL); /* Assign pointers to each input and output. */ x = mxGetPr(prhs[0]);
第四步:编译后就可以象调用M函数一样调用timestwo了
– 在MATLAB命令窗口中输入:
– x=2;
– y=timestwo(x);
9
内容回顾
目的和要求:
– 了解采用MEX文件方式实现MATLAB与C语言混合编程的方法
Baidu Nhomakorabea10
6
Matlab与C语言混合编程示例
例: 第一步:给出一个简单的C语言程序
– 该程序的功能是将标量x加倍。
– #include "math.h" void timestwo(double y[], double x[]) { y[0]=2.0*x[0]; return; }
7
Matlab与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; } /* The input must be a noncomplex scalar double.*/ 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.");
/* Check for proper number of arguments. */ if(nrhs!=1) { mexErrMsgTxt("One input required."); } else if(nlhs>1) { mexErrMsgTxt("Too many output arguments"); } }
– 直接控制硬件,如A/D采集卡,D/A输出卡等,以用于数据采集 或控制应用。
4
MEX文件(续)
MEX文件的源程序由两部分组成:
– 计算子程序
» 包含所有完成计算功能的程序代码,计算程序可以是普通的C语言程序,按 照C语言规则编写即可
– 入口子程序mexFunction
» 在MATLAB系统与被调用的外部子程序间建立通信联系 » 入口子程序的名字必须是mexFunction,调用格式为: void mexFunction(int nlhs,mxArray *plhs[],int nrhs, mxArray *prhs[])

mxArray:一种数据类型,在matlab和C的混合编中所有与变量有关的数据类型都 为mxArray类型


nlhs:输出参数数目
plhs:指向mxArray的输出参数的指针 nrhs:输入参数数目 Prhs:指向mxArray的输入数据的指针。 5
MEX文件(续)
mexFunction函数举例
2
Matlab与C语言程序的应用编程接口
MATLAB不能在M文件中直接调用C语言程序 MEX(MATLAB
Executable)动态链接函数接口
– 是MATLAB调用别的语言(包括C语言)编写的程序或算法的接 口
MEX文件
– 是一种动态链接程序, MATLAB可以象调用M文件一样调用它
3
MEX文件
第十章
MATLAB外部程序接口技术
1
MATLAB外部程序接口技术
MATLAB功能强大,开发效率高,但主要缺点是执行速度比较慢 MATLAB提供了外部程序接口,允许MATLAB和其他应用程序进行
数据交换,并提供了C/C++, FORTRAN数学和图形函数库,为在其 他程序设计语言中调用MATLAB高效算法提供了可能。
相关文档
最新文档