第8章MATLAB高级应用

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第8章MATLAB高级应用8.1MATLAB应用接口8.1.1MEX文件MEX文件具有以下几个方面的应用:(1)对于已存在的C或FORTRAN子程序,可以通过MEX文件在MATLAB环境中直接调用,而不必重新编写M文件。(2)由于MATLAB是解释性语言,运行如for等循环体时,会出现速度十分缓慢的现象,为了能提高速度,往往要使用MEX程序。(3)对于A/D、D/A卡,或其它PC硬件,可以直接用MEX文件进行访问。(4)利用MEX文件,可以使用如Windows用户图形界面等资源。1.MEX文件系统设置下面采用MicrosoftVisualC/C++6.0编译器,在命令窗口使用“mex-setup”命令,对MEX文件编译器进行配置:mex-setup则会出现如下提示:Pleasechooseyourcompilerforbuildingexternalinterface(MEX)files:Wouldyoulikemextolocateinstalledcompilers[y]/n?y让用户选择是否同意mex命令自动定位已经安装的编译器,输入“y”后,回车出现如下提示:Selectacompiler:[1]DigitalVisualFortranversion6.0inC:\ProgramFiles\MicrosoftVisualStudio[2]LccCversion2.4inD:\MATLAB6P1\sys\lcc[3]MicrosoftVisualC/C++version6.0inD:\ProgramFiles\MicrosoftVisualStudio[0]None提供用户选择编译器作为默认的MEX文件编译器,通过键盘输入“3”后,回车出现如下提示:Pleaseverifyyourchoices:Compiler:MicrosoftVisualC/C++6.0Location:D:\ProgramFiles\MicrosoftVisualStudioArethesecorrect?([y]/n):确认所选择的编译器,通过键盘输入“y”后,回车出现如下提示:Thedefaultoptionsfile:D:\DocumentsandSettings\ZJDCY\ApplicationData\MathWorks\MATLAB\R12\mexopts.batisbeingupdatedfromD:\MATLAB6P1\BIN\WIN32\mexopts\msvc60opts.bat...InstallingtheMATLABVisualStudioadd-in...UpdatedD:\ProgramFiles\MicrosoftVisualStudio\common\msdev98\template\MATLABWizard.awxfromD:\MATLAB6P1\BIN\WIN32\MATLABWizard.awxUpdatedD:\ProgramFiles\MicrosoftVisualStudio\common\msdev98\template\MATLABWizard.hlpfromD:\MATLAB6P1\BIN\WIN32\MATLABWizard.hlpUpdatedD:\ProgramFiles\MicrosoftVisualStudio\common\msdev98\addins\MATLABAddin.dllfromD:\MATLAB6P1\BIN\WIN32\MATLABAddin.dllMergedD:\MATLAB6P1\BIN\WIN32\usertype.datwithD:\ProgramFiles\MicrosoftVisualStudio\common\msdev98\bin\usertype.dat则表示编译器成功配置。2.测试配置在MATLAB环境的当前目录浏览器窗口中,将MATLAB的extern\examples\mex目录设置为当前目录,然后在命令窗口中输入:mexyprime.c则在extern\examples\mex目录下,就生成了“yprime.dll”文件,查看该yprime.dll文件的信息,在命令窗口中输入:whichyprimeD:\MATLAB6p1\extern\examples\mex\yprime.dll并调用yprime.dll文件:yprime(1,1:2:7)ans=3.000014.99257.0000-1.03773.C语言MEX文件的构成程序的构成主要由入口子程序和计算功能子程序两部分组成。(1)入口子程序第一部分入口子程序的作用是在MATLAB系统与被调用的外部子程序之间建立通信联系。入口子程序必须是mexFunction,其构成形式为:voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){/*用来完成MATLAB与计算子程序之间通信任务的代码*/}mexFunction函数的参数含义为:nrhs:为输入参数的数目。prhs:为输入参数数组,是指针数组。nlhs:为输出参数的数目。plhs:为输出参数数组,是指针数组。(2)计算功能子程序第二部分为计算功能子程序,包含所有的实际需要完成的功能源代码,可以是用户以前所编写的算法和程序,以函数的形式存在。4.C语言MEX文件的建立(1)常用MATLABAPI函数在MEX文件中,常用MATLABAPI函数有:mxGetM:获得矩阵的行数。mxGetN:获得矩阵的列数。mxGetPr:获得矩阵的实数部分的数据指针。mexErrMsgTxt:输出错误信息,并返回到MATLAB命令提示符下。mxCreateString:创建一个字符串矩阵。mxCreateDoubleMatrix:创建一个二维未赋值的双精度浮点类型的矩阵。mxIsDouble:判断矩阵是否为双精度类型。(2)C语言MEX文件的创建步骤通过创建计算一个数平方倒数值的程序,来介绍一个MEX文件创建的过程。【例8.1】在MicrosoftVisualC++6.0环境下创建一个MEX文件,实现计算一个数平方的倒数值。在MicrosoftVisualC++6.0环境创建一个“C++SourceFile”文件,文件名为“Ex0801.cpp”。编写该文件的程序代码如下:#includemex.h#includemath.h/*计算功能子程序Ex0801,计算平方的倒数*/voidEx0801(doubley[],doublex[]){y[0]=1/(x[0]*x[0]);return;}/*入口子程序mexFunction*/voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){double*x,*y;unsignedintm,n;/*检查输入变量的个数是否正确*/if(nrhs!=1){mexErrMsgTxt(Onlyoneinputargumentallowed.);}/*检查输出变量的个数是否正确*/elseif(nlhs!=1){mexErrMsgTxt(Onlyoneoutputargumentallowed.);}m=mxGetM(prhs[0]);n=mxGetN(prhs[0]);/*检查输入变量必须是非复数单个双精度数*/if(!mxIsDouble(prhs[0])||mxIsSparse(prhs[0])||mxIsComplex(prhs[0])||!(m==1&&n==1)){mexErrMsgTxt(Inputargumentmustbeascalar.);}/*创建矩阵变量为输出变量*/plhs[0]=mxCreateDoubleMatrix(m,n,mxREAL);y=mxGetPr(plhs[0]);x=mxGetPr(prhs[0]);/*调用计算功能子程序*/Ex0801(y,x);}在MATLAB命令窗口的当前目录浏览器中将当前目录设置为用户的目录,输入命令创建MEX文件并运行:mexEx0801.cppy=Ex0801(2)y=0.2500扩展名为cpp是C++文件,在其同一文件夹中生成Ex0801.dll文件,运行Ex0801.dll文件的运算结果正确。为该文件添加帮助M文件为了在MATLAB中可以方便地查看该Ex0801.dll文件的帮助信息,可以建立一个Ex0801.M文件,并输入以下内容:%functiony=Ex0801(x)%计算一个数平方的倒数值%y=1/(x^2)%copyright@2003-10-10则在MATLAB命令窗口中,用help命令只能看到M文件来查看帮助信息:helpEx0801functiony=Ex0801(x)计算一个数平方的倒数值y=1/(x^2)copyright@2003-10-108.1.2使用MATLAB编译器生成MEX和EXE文件1.MEX文件与EXE文件的区别MEX文件只能在MATLAB环境中运行;而EXE文件是可以独立与MATLAB环境运行的。2.配置编译器的准备如果要创建MEX文件,如图8.1所示。则只需勾选“MATLABCompiler”;如果要创建EXE文件,则需要勾选如图中的三个选项。3.由M文件创建CMEX文件利用MATLAB编译器来由M文件创建MEX文件,使用“mcc–x”命令,。图8.1安装MATLAB对话框【例8.2】在MATLAB环境中创建一个M函数文件,用来绘制正弦信号波形。在MATLAB的编辑/调试窗口中创建一个Ex0802.m函数文件,编写程序代码如下:functionEx0802%Ex0802绘制正弦信号波形x=0:0.1:2*pi;y=sin(x);plot(x,y)保存文件,在MATLAB命令窗口中由该M文件创建MEX文件:mcc-xEx0802%创建Ex0802.dll文件Ex0802%运行Ex0802.dll文件运行该Ex0802.dll文件,绘制出正弦信号波形图。在该目录下,可以看到在创建dll文件的同时,还创建了Ex0802.c、Ex0802.h和Ex0802_mex.c文件。注意:如果上述的Ex0802.m文件删除第一行,变为M脚本文件,则用mcc命令直接编译会出错,并出现如下提示:mcc-xEx0802???Error:CannotcreateMEXFileEx0802fromMEXFileC:\MyDocuments\CAOYi\BookMATLAB\20031008\exe\Ex0802.dll.Errorin==D:\MATLAB6p1\toolbox\compiler\mcc.dll4.创建独立的外部程序EXE文件【例8.3】第一次使用mbuild命令由C文件创建EXE文件。由“matlab\extern\examples\cmath”目录下的现成文件“ex1.c”,创建独立的EXE文件。先将“matlab\extern\examples\cmath”目录设置为当前目录,然后输入mbuild命令,由于系统中安装了LCC和MicrosoftVisualC/C++两个编译器,则MATLAB会提示用户选择默认的编译器:mbuildex1.cPleasechooseyourcompilerforbuildingstandaloneMATLABapplications:Wouldyoulikembuildtolocateinstalledcompilers[y]/n?y选择一个默认的编译器Selectacompiler:[1]LccCversion2.4inD:\MATLAB6P1\sys\lcc[2]MicrosoftVisualC/C++version6.0inD:\ProgramFiles\MicrosoftVisualStudio[0]NoneCompiler:2…

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功