Matlab中Mex文件的创建和使用方法.ppt_第1页
Matlab中Mex文件的创建和使用方法.ppt_第2页
Matlab中Mex文件的创建和使用方法.ppt_第3页
Matlab中Mex文件的创建和使用方法.ppt_第4页
Matlab中Mex文件的创建和使用方法.ppt_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1,九、MATLAB编译器和Notebook,编译器概述编译器的安装和配置创建MEX文件创建独立的外部程序EXE文件Notebook,2,9.1编译器概述,MATLAB编译器(TheMATLABCompiler,MCC)可以将M文件转化为C或C源代码,然后进一步编译链接成MEX文件或可执行程序或共享库文件。编译后可以大大提高程序的运行效率,甚至可以脱离MATLAB环境运行程序。,编译器主要包括:将C源码文件生成MEX文件的mex编译器;将C源码文件生成可独立运行文件的mbuild编译器;可以将M文件转换成C源码文件并调用mex或mbuild编译器生成MEX文件或exe可执行程序的mcc编译器。,9.1.1编译器的功能,产生源代码,进而生成MEX文件。MEX文件可以提高运行速度,并且可以隐藏文件算法,避免非法修改源文件。,2.产生C或C源码,进而生成独立的外部应用程序(EXE文件)。该程序无需MATLAB环境支持,如果源M文件使用了绘图指令,则需要图形库支持。,3.产生CMEX的S函数。加快Simulink中自定义的S函数模块的运行速度。,4.产生C共享库(动态链接库、DLL)或C+静态库。它们的使用无需MATLAB环境支持,但需要MATLAB的数学库。,3,9.1.2编译器的局限性,不支持M脚本文件的编译。不支持用户自定义的对象。不支持eval,input,inline等函数。不支持Java接口。,9.2.1配置MATLAB编译器的前提准备,1.计算机必须安装有ANSIC/C+编译器。下面任何一种C/C+编译器均可。MicrosoftVisualC/C+5.0以上版本。BorlandC/C+5.0以上版本。LCCC(MATLAB自带,只能用于生成MEX文件)。,2.在安装MATLAB时,选中组件MATLABCompilerC/C+MathLibraryMATLABC/C+GraphicsLibrary,9.2编译器的安装和配置,4,9.2.2为产生MEX文件进行预配置,要实现从M文件到MEX文件的转换,就必须先对M编译器进行正确设置。预配置包括两个过程:一是根据外部编译器的类型、软件位置对M编译器进行设置;二是利用MATLAB提供的标准文件对用户设置加以验证。,1.对MATLAB编译器应用程序mex的配置,启动配置:在MATLAB指令窗口运行mex-setup命令mex-setup,Selectacompiler:1LccCversion2.4inC:MATLAB6P5syslcc2MicrosoftVisualC/C+version6.0inD:ProgramFilesMicrosoftVisualStudio0NoneCompiler:2,Thedefaultoptionsfile:D:DocumentsandSettingsslluApplicationDataMathWorksMATLABR13mexopts.batisbeingupdatedfromC:MATLAB6P5BINWIN32mexoptsmsvc60opts.bat.InstallingtheMATLABVisualStudioadd-in.UpdatedD:ProgramFilesMicrosoftVisualStudiocommonmsdev98templateMATLABWizard.awxfromC:MATLAB6P5BINWIN32MATLABWizard.awx,5,2.验证配置的正确性,验证分两步进行:首先验证mex命令是否可以将C源码转换成MEX文件;然后再验证mcc命令是否可以将M文件转换成MEX文件。mcc命令可以在M文件转换成C源码后,自动调用mex命令,将C源码转换成MEX文件。,利用MATLAB自带的yprime.c和yprime.m来验证mex和mcc命令。,mexmy_yprime.c%由my_yprime.c文件生成my_yprime.dll文件my_yprime(1,1:4)%运行my_yprime.dll文件ans=2.00008.96854.000-1.0947,(1)验证mex应用程序先将externexamplemex目录下的yprime.c文件复制到自己的目录下,并改名为my_yprime.c。,whichmy_yprime%获得my_yprime.dll文件的位置信息D:DocumentsandSettingsslluMyDocumentsMATLABMYFILEmexmy_yprime.dll,clearmy_yprime.dll%删除my_yprime.dll文件,(2)验证mcc应用程序,先将externexamplemex目录下的yprime.m文件复制到自己的目录下,并改名为my_yprime_m.m。,6,mcc-xmy_yprime_mmy_yprime_m(1,1:4)ans=2.00008.96854.000-1.0947,whichmy_yprime_mD:DocumentsandSettingsslluMyDocumentsMATLABMYFILEmexmy_yprime_m.dll,9.2.2为产生独立外部应用程序进行预配置,要实现从M文件到独立外部应用程序的转换,也必须先对MATLAB编译器进行正确设置。预配置包括两个过程:一是根据外部编译器的类型、软件位置对MATLAB编译器进行设置,同时对MATLABC数学函数库进行选择;二是利用MATLAB提供的标准文件对用户设置加以验证。,1.对MATLAB编译器应用程序mbuild的配置,启动配置:在MATLAB指令窗口运行mbuild-setup命令mbuild-setup,Selectacompiler:1LccCversion2.4inC:MATLAB6P5syslcc2MicrosoftVisualC/C+version6.0inD:ProgramFilesMicrosoftVisualStudio0NoneCompiler:2Thedefaultoptionsfile:D:DocumentsandSettingsslluApplicationDataMathWorksMATLABR13compopts.batisbeingupdatedfromC:MATLAB6P5BINWIN32mbuildoptsmsvc60compp.bat.,7,2.验证配置的正确性,验证分两步进行:首先验证mbuild命令是否可以将C源码转换成EXE文件;然后再验证mcc命令是否可以将M文件转换成EXE文件。mcc命令可以在M文件转换成C源码后,自动调用mbuild命令,将C源码转换成EXE文件。,利用MATLAB自带的ex1.c和hello.m来验证mbuild和mcc命令。,(1)验证mex应用程序先将externexamplecmath目录下的ex1.c文件复制到自己的目录下,并改名为my_ex1.c。,mbuildmy_ex1.c%生成my_ex1.exe文件在Windows的DOS窗口运行my_ex1.exe文件查看其正确性。,(2)验证mcc应用程序,先将externexamplecompiler目录下的hello.m文件复制到自己的目录下,并改名为my_hello.m。,mcc-pmy_hello.m在Windows的DOS窗口运行my_hello.exe文件查看其正确性。,D:DocumentsandSettingsslluMyDocumentsMATLABMYFILEmexmy_ex1,1352461.0000+7.0000i4.0000+10.0000i2.0000+8.0000i5.0000+11.0000i3.0000+9.0000i6.0000+12.0000i,D:DocumentsandSettingsslluMyDocumentsMATLABMYFILEmexmy_ex1Hello,World,8,9.3创建MEX文件,创建MEX文件有两种方法:利用C源码编辑器编写C语言MEX文件,经过mex命令编译链接得到MEX文件。利用M文件编辑器编写M函数文件,经过mcc命令编译链接得到MEX文件。,MEX文件的优点:运行速度快,利用C代码实现循环体要比MATLAB快很多;对于已存在的C或FORTRAN子程序,可以通过MEX文件在MATLAB环境中直接调用,而不必重新编写M文件;对于A/D、D/A卡,或其它PC硬件,可以直接用MEX文件进行访问;利用MEX文件,可以使用如Windows用户图形界面等资源。,9.3.1C语言MEX文件的构成,程序的构成主要由入口子程序和计算功能子程序两部分组成。,voidmexFunction(intnlhs,mxArray*plhs,intnrhs,constmxArray*prhs)/*用来完成MATLAB与计算子程序之间通信任务的代码*/,(1)入口子程序入口子程序必须是mexFunction,其构成形式为:,mexFunction函数的参数含义为:nrhs:为输入参数的数目。prhs:为输入参数数组,是指针数组。nlhs:为输出参数的数目。plhs:为输出参数数组,是指针数组。,9,入口子程序的作用是在MATLAB系统与被调用的外部子程序之间建立通信联系。,(2)计算功能子程序计算功能子程序包含所有的实际需要完成的功能源代码,可以是用户以前所编写的算法和程序,以函数的形式存在。,C语言MEX文件必须包含mex.h库:include”mex.h”。mex.h库中包含了C语言MEX文件所需要的mex-函数和matrix.h库(定义了mx-函数)。mex-和mx-函数是MATLAB提供与外界程序接口的函数。mx-函数用来实现MATLAB的矩阵操作;mex-函数用来实现从MATLAB环境中获取矩阵数据并返回信息。,9.3.2C语言MEX文件的建立,timestwo.c#includemex.h“/*计算功能子程序timestwo,计算一个数的两倍*/voidtimestwo(doubley,doublex)y0=2.0*x0;/*入口子程序mexFunction*/voidmexFunction(intnlhs,mxArray*plhs,intnrhs,constmxArray*prhs)double*x,*y;intmrows,ncols;,10,/*检查输入输出参数*/if(nrhs!=1)mexErrMsgTxt(Oneinputrequired.);elseif(nlhs1)mexErrMsgTxt(Toomanyoutputarguments);/*输入只能是一个双精度型的实数*/mrows=mxGetM(prhs0);ncols=mxGetN(prhs0);if(!mxIsDouble(prhs0)|mxIsComplex(prhs0)|!(mrows=1,在MATLAB命令窗口运行mextimestwo.cy=timestwo(3),y=6,11,9.3.3由M文件创建CMEX文件,M脚本文件不能编译成MEX文件,必须把M脚本文件改写M函数文件才能进行编译。利用MATLAB编译器来由M函数文件创建MEX文件,使用“mccx”命令。,%circle.mfunctioncircle(x,y,r,varargin)ifnargin3flag=varargin1;endifflagfill(x1*r+x,y1*r+y,b)endaxissquare;,在MATLAB命令窗口运行mccxcircle.mcircle,circle(1,1,2,1),12,9.4创建独立的外部程序EXE文件,MEX文件只能在MATLAB环境中运行;而EXE文件可以独立于MATLAB环境运行。,用来创建独立应用程序的源代码可以是M文件、C语言文件或者这些文件的组合。不管是哪一种文件格式,都应该包含有主函数,如C语言的main函数。,得到的exe文件如果要正常运行,需要下列文件:mbuild编译得到的bin目录下的所有文件;所调用的MEX文件;MATLAB提供的数学库;MATLAB提供的图形库。,mcc指令的典型调用格式(可以利用mcc-?或helpmcc查询帮助):mcc-xfilename1filename2由M函数文件得到MEX文件filename1.dllmcc-mfilename由不包含绘图指令的M文件得到可执行的exe文件(c)3.mcc-pfilename由不包含绘图指令的M文件得到可执行的exe文件(c+)4.mcc-Bsglfilename由含绘图指令的M文件得到可执行的exe文件(c)5.mcc-Bsglcppfilename由包含绘图指令的M文件得到可执行的exe文件(c+独立应用程序),注意:“”与mcc之间必须有空格!,13,main.mmrank.m%main.mfunctionmainr=mrank(5)%mrank.mfunctionr=mrank(n)%向量r的每一个元素代表了一个魔方方阵的秩r=zeros(n,1);fork=1:nr(k)=rank(magic(k);end,在MATLAB指令窗口运行命令mcc-mmainmrank%由M文件生成exe文件,在Windows的DOS窗口运行,D:DocumentsandSettingsslluMyDocumentsMATLABMYFILEmexmainr=12335,14,circle_main.mcircle_fun.m%circle_main.mfunctioncircle_maincircle_fun(1,1,2,1)%circle_fun.mfunctioncircle_fun(x,y,r,varargin)ifnargin3flag=varargin1;endifflagfill(x1*r+x,y1*r+y,b)endaxissquare;,在MATLAB指令窗口运行命令mccBsglcircle_main,在DOS窗口运行:D:DocumentsandSettingsslluMyDocumentsMATLABMYFILEmexcircle_main,15,9.5Notebook,Notebook(笔记本)是MATLAB与MicrosoftWord的完美结合,使用户能在Word环境下灵活地使用MATLAB的数学运算和可视化功能,营造一个融文字处理、科学计算、工程设计于一体地工作环境。,9.5.1Notebook的安装,启动MATLAB后,在命令窗口中运行指令note-setup根据自己计算机所用Word的版本等,在提示下操作,直到出现“Notebooksetupiscomplete”,则表示安装结束。,9.5.2Notebook的启动,1.创建M-book文件,(1)从Word中启动Notebook,选择Word窗口的菜单“文件”“新建”,在出现的对话框中,选择“m-book”,则出现如图所示的新建对话框,选择“m-book”图标,按“确定”按钮。当保存文件时,默认的文件名为“TheMATLABNotebookv1.doc”。,16,(2)从MATLAB中启动Notebook,在MATLAB命令窗口输入“notebook”命令,就可以启动Notebook。notebook打开一个新的M-book文档notebookFileName打开已存在的M-book文件FileName应包括文件的完整路径和文件名。,2.M-book的界面,M-book的界面比普通的Word多一个“Notebook”菜单。,9.5.3Notebook的使用,1.输入细胞(群)的创建和运行,在Notebook中,凡参与Word和MATLAB之间信息交换的部分,就称为”细胞(群)“。,(1)只创建不运行输入细胞(群),在英文状态下按普通的文本输入方式,输入MATLAB命令,可以是独立行或嵌在文本中,然后用光标选中,按组合键“Alt-D”,或选择菜单“Notebook”“DefineInputCell”,则所选中的文本形式命令就变成了输入细胞。,(2)创建并同时运行输入细胞在英文状态下按普通的文本输入方式,输入MATLAB命令,然后用光标选中,按组合键“Ctrl-Enter”,或选择菜单“Notebook”“EvaluateCell”,则所选中的文本形式命令就会自动变成输入细胞,并得出运算结果,即输出细胞。,17,2.自初始化细胞及其应用,自初始化细胞(AutoInitCell)与输入细胞唯一不同是:自初始化细胞会在用户启动Notebook时被自动送去运算,而输入细胞则不具备这种功能。,创建自初始细胞的方法是先将文本形式的MATLAB命令或已存在的输入细胞用光标选中,然后选择菜单“Notebook”“DefineAutoInitCell”,则选中的文本形式MATLAB命令就会自动变成AutoInit格式。,3.输出细胞,输出细胞是MATLAB的输出结果,包括数据、图形和出错信息。输出数据的有效数字、图形的大小都可以借助“Notebook”“NotebookOptions”菜单项打开的对话框进行设置。,(1)自初始化细胞的创建,为了避免其它文件或命令窗口中变量的改变影响该文件,保证文件输入输出数据的一致性,可以用“clear”命令作为该文件的第一个自初始化细胞。,(2)工作内

温馨提示

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

评论

0/150

提交评论