Matlab及应用 - 第10章 MATLAB 外部程序接口技术_第1页
Matlab及应用 - 第10章 MATLAB 外部程序接口技术_第2页
Matlab及应用 - 第10章 MATLAB 外部程序接口技术_第3页
Matlab及应用 - 第10章 MATLAB 外部程序接口技术_第4页
Matlab及应用 - 第10章 MATLAB 外部程序接口技术_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1MATLAB及应用

—第十章外部程序接口技术信息与通信工程学院MATLAB功能强大,开发效率高,但主要缺点是执行速度比较慢MATLAB提供了外部程序接口,允许MATLAB和其他应用程序进行数据交换,并提供了C/C++,FORTRAN数学和图形函数库,为在其他程序设计语言中调用MATLAB高效算法提供了可能。MATLAB提供的外部程序接口技术主要由三种MEX文件:是matlab环境下调用C、FORTRAN语言编写的应用程序模块。matlab计算引擎:在使用C、FORTRAN编程时可调用matlab函数库进行计算。MAT文件:实现matlab与C、FORTRAN语言程序间的数据交换MATLAB外部程序接口技术MATLAB不能在M文件中直接调用C语言程序MEX(MATLABExecutable)动态链接函数接口是MATLAB调用别的语言(包括C语言)编写的程序或算法的接口MEX文件是一种动态链接程序,MATLAB可以象调用M文件一样调用它Matlab与C语言程序的应用编程接口

MEX文件主要有以下几方面的应用:已经开发的C语言程序,则不必将其转化为M文件而重复劳动,通过添加入口程序mexFunction,可以由MATLAB调用。在MATLAB中,M文件的计算速度特别是循环迭代的速度远比C语言慢,因此可以把要求大量循环迭代的部分用C语言编写为MEX文件,提高计算速度。直接控制硬件,如A/D采集卡,D/A输出卡等,以用于数据采集或控制应用。

MEX文件MEX文件的源程序由两部分组成:计算子程序包含所有完成计算功能的程序代码,计算程序可以是普通的C语言程序,按照C语言规则编写即可入口子程序mexFunction在MATLAB系统与被调用的外部子程序间建立通信联系入口子程序的名字必须是mexFunction,调用格式为:voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,mxArray*prhs[])nlhs:输出参数数目

plhs:指向mxArray(MATLAB中所有数据都由mxArray定义)的输出参数的指针

nrhs:输入参数数目

Prhs:指向mxArray的输入数据的指针。MEX文件(续)mexFunction函数举例使用[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",以便正常申明入口程序。MEX文件(续)例:第一步:给出一个简单的C语言程序该程序的功能是将标量x加倍。

#include"math.h"

voidtimestwo(doubley[],doublex[])

{

y[0]=2.0*x[0];

return;

}

Matlab与C语言混合编程示例#include"mex.h"voidtimestwo(doubley[],doublex[]){y[0]=2.0*x[0];}

voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){double*x,*y;intmrows,ncols;

/*检查正确的参数数目*/if(nrhs!=1){mexErrMsgTxt("需要一个输入参数.");}elseif(nlhs>1){mexErrMsgTxt("输出参数太多");}Matlab与C语言混合编程示例(续)/*输入变量必须是非复数类型的标量.*/mrows=mxGetM(prhs[0]);ncols=mxGetN(prhs[0]);if(!mxIsDouble(prhs[0])||mxIsComplex(prhs[0])||!(mrows==1&&ncols==1)){mexErrMsgTxt("输入变量必须是非复数类型的标量.");}

/*为返回参数创建矩阵.*/plhs[0]=mxCreateDoubleMatrix(mrows,ncols,mxREAL);

/*分配输入输出参数的指针.*/x=mxGetPr(prhs[0]);y=mxGetPr(plhs[0]);

/*调用timestwo子函数.*/timestwo(y,x);}第二步:编写与C语言程序功能相同的MEX文件第三步:将此MEX文件复制到当前工作目录进行编译和链接在MATLAB命令窗口中输入:mextimestwo.c

第四步:编译后就可以象调用M函数一样调用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论