Matlab中Mex文件的创建和使用方法汇总课件

上传人:艳*** 文档编号:242975542 上传时间:2024-09-13 格式:PPT 页数:21 大小:305.50KB
收藏 版权申诉 举报 下载
Matlab中Mex文件的创建和使用方法汇总课件_第1页
第1页 / 共21页
Matlab中Mex文件的创建和使用方法汇总课件_第2页
第2页 / 共21页
Matlab中Mex文件的创建和使用方法汇总课件_第3页
第3页 / 共21页
资源描述:

《Matlab中Mex文件的创建和使用方法汇总课件》由会员分享,可在线阅读,更多相关《Matlab中Mex文件的创建和使用方法汇总课件(21页珍藏版)》请在装配图网上搜索。

1、单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,,,*,单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,,,*,单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,,,*,1,九、,MATLAB,编译器和,Notebook,编译器概述,,编译器的安装和配置,,创建,MEX,文件,,创建独立的外部程序,EXE,文件,,Notebook,,,,,,2,9.1,编译器概述,MATLAB,编译器(,The MATLAB Compiler,MCC,)可以将,M,文件

2、转化为,C,或,C,++源代码,然后进一步编译链接成,MEX,文件或可执行程序或共享库文件。编译后可以大大提高程序的运行效率,甚至可以脱离,MATLAB,环境运行程序。,,编译器主要包括:,,将,C,源码文件生成,MEX,文件的,mex,编译器;,,将,C,源码文件生成可独立运行文件的,mbuild,编译器;,,可以将,M,文件转换成,C,源码文件并调用,mex,或,mbuild,编译器生成,MEX,文件或,exe,可执行程序的,mcc,编译器。,9.1.1,编译器的功能,产生源代码,进而生成,MEX,文件,。,,MEX,文件可以提高运行速度,并且可以隐藏文件算法,避免非法修改源文件。,2 .

3、,产生,C,或,C,++源码,进而生成独立的外部应用程序(,EXE,文件)。,,该程序无需,MATLAB,环境支持,如果源,M,文件使用了绘图指令,则需要图形库支持。,3.,产生,C MEX,的,S,函数。,加快,Simulink,中自定义的,S,函数模块的运行速度。,4.,产生,C,共享库(动态链接库、,DLL,)或,C++,静态库。,,它们的使用无需,MATLAB,环境支持,但需要,MATLAB,的数学库。,,3,9.1.2,编译器的局限性,不支持,M,脚本文件的编译。,,不支持用户自定义的对象。,,不支持,eval,input,inline,等函数。,,不支持,Java,接口。,9.2.

4、1,配置,MATLAB,编译器的前提准备,1.,计算机必须安装有,ANSIC/C++,编译器。,下面任何一种,C/C++,编译器均可。,,Microsoft Visual C/C++5.0,以上版本。,,Borland C/C++5.0,以上版本。,,LCC C,(MATLAB,自带,只能用于生成,MEX,文件)。,2.,在安装,MATLAB,时,选中组件,,,MATLAB Compiler,,C/C++ Math Library,,MATLAB C/C++ Graphics Library,9.2,编译器的安装和配置,,4,9.2.2,为产生,MEX,文件进行预配置,要实现从,M,文件到,M

5、EX,文件的转换,就必须先对,M,编译器进行正确设置。预配置包括两个过程:一是根据外部编译器的类型、软件位置对,M,编译器进行设置;二是利用,MATLAB,提供的标准文件对用户设置加以验证。,1.,对,MATLAB,编译器应用程序,mex,的配置,启动配置:在,MATLAB,指令窗口运行,mex-setup,命令,,>>mex-setup,Select a compiler:,,[1] Lcc C version 2.4 in C:\MATLAB6P5\sys\lcc,,[2] Microsoft Visual C/C++ version 6.0 in D:\Program Files\Mic

6、rosoft Visual Studio,,[0] None,,Compiler:,2,The default options file:,,"D:\Documents and Settings\sllu\Application Data\MathWorks\MATLAB\R13\mexopts.bat",,is being updated from C:\MATLAB6P5\BIN\WIN32\mexopts\msvc60opts.bat...,,,,Installing the MATLAB Visual Studio add-in ...,,,,Updated D:\Program Fi

7、les\Microsoft Visual Studio\common\msdev98\template\MATLABWizard.awx,,from C:\MATLAB6P5\BIN\WIN32\MATLABWizard.awx,,5,2.,验证配置的正确性,验证分两步进行:首先验证,mex,命令是否可以将,C,源码转换成,MEX,文件;然后再验证,mcc,命令是否可以将,M,文件转换成,MEX,文件。,mcc,命令可以在,M,文件转换成,C,源码后,自动调用,mex,命令,将,C,源码转换成,MEX,文件。,,利用,MATLAB,自带的,yprime.c,和,yprime.m,来验证,mex

8、,和,mcc,命令。,>>mex my_yprime.c,%,由,my_yprime.c,文件生成,my_yprime.dll,文件,,>>my_yprime(1,1:4),%,运行,my_yprime.dll,文件,,ans=,,2.0000 8.9685 4.000 -1.0947,(,1,)验证,mex,应用程序,,先将,\extern\example\mex,目录下的,yprime.c,文件复制到自己的目录下,并改名为,my_yprime.c,。,>>which my_yprime,%,获得,my_yprime.dll,文件的位置信息,,D:\Documents and

9、Settings\sllu\My Documents\MATLAB\MYFILE\mex\my_yprime.dll,>>clear my_yprime.dll,%,删除,my_yprime.dll,文件,(,2,)验证,mcc,应用程序,先将,\extern\example\mex,目录下的,yprime.m,文件复制到自己的目录下,并改名为,my_yprime_m.m,。,,6,>>mcc-x my_yprime_m,,>>my_yprime_m(1,1:4),,ans=,,2.0000 8.9685 4.000 -1.0947,>>which my_yprime_m,

10、,D:\Documents and Settings\sllu\My Documents\MATLAB\MYFILE\mex\my_yprime_m.dll,9.2.2,为产生独立外部应用程序进行预配置,要实现从,M,文件到独立外部应用程序的转换,也必须先对,MATLAB,编译器进行正确设置。预配置包括两个过程:一是根据外部编译器的类型、软件位置对,MATLAB,编译器进行设置,同时对,MATLAB C,数学函数库进行选择;二是利用,MATLAB,提供的标准文件对用户设置加以验证。,1.,对,MATLAB,编译器应用程序,mbuild,的配置,启动配置:在,MATLAB,指令窗口运行,mbui

11、ld-setup,命令,,>>mbuild-setup,Select a compiler:,,[1] Lcc C version 2.4 in C:\MATLAB6P5\sys\lcc,,[2] Microsoft Visual C/C++ version 6.0 in D:\Program Files\Microsoft Visual Studio,,[0] None,,Compiler:,2,,The default options file:,,"D:\Documents and Settings\sllu\Application Data\MathWorks\MATLAB\R13\c

12、ompopts.bat",,is being updated from C:\MATLAB6P5\BIN\WIN32\mbuildopts\msvc60compp.bat...,,7,2.,验证配置的正确性,验证分两步进行:首先验证,mbuild,命令是否可以将,C,源码转换成,EXE,文件;然后再验证,mcc,命令是否可以将,M,文件转换成,EXE,文件。,mcc,命令可以在,M,文件转换成,C,源码后,自动调用,mbuild,命令,将,C,源码转换成,EXE,文件。,,利用,MATLAB,自带的,ex1.c,和,hello.m,来验证,mbuild,和,mcc,命令。,(,1,)验证,me

13、x,应用程序,,先将,\extern\example\cmath,目录下的,ex1.c,文件复制到自己的目录下,并改名为,my_ex1.c,。,>>mbuild my_ex1.c,%,生成,my_ex1.exe,文件,,在,Windows,的,DOS,窗口运行,my_ex1.exe,文件查看其正确性。,(,2,)验证,mcc,应用程序,先将,\extern\example\compiler,目录下的,hello.m,文件复制到自己的目录下,并改名为,my_hello.m,。,>>mcc -p my_hello.m,,在,Windows,的,DOS,窗口运行,my_hello.exe,文件查看

14、其正确性。,D:\Documents and Settings\sllu\My Documents\MATLAB\MYFILE\mex\my_ex1,,1 3 5,,2 4 6,,1.0000+7.0000i 4.0000+10.0000i,,2.0000+8.0000i 5.0000+11.0000i,,3.0000+9.0000i 6.0000+12.0000i,D:\Documents and Settings\sllu\My Documents\MATLAB\MYFILE\mex\my_ex1,,Hello,World,,8,9.3,创建,MEX,文件,

15、,,创建,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,用户图

16、形界面等资源。,,9.3.1 C,语言,MEX,文件的构成,程序的构成主要由入口子程序和计算功能子程序两部分组成。,void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray*prhs[] ),,{,,/*,用来完成,MATLAB,与计算子程序之间通信任务的代码*,/,,},(1),入口子程序,,入口子程序必须是,mexFunction,,其构成形式为:,,mexFunction,函数的参数含义为:,,nrhs,:为输入参数的数目。,,prhs,:为输入参数数组,是指针数组。,,nlhs,:为输出参数的数目。,,p

17、lhs,:为输出参数数组,是指针数组。,,9,入口子程序的作用是在,MATLAB,系统与被调用的外部子程序之间建立通信联系。,(2),计算功能子程序,,计算功能子程序包含所有的实际需要完成的功能源代码,可以是用户以前所编写的算法和程序,以函数的形式存在。,,C,语言,MEX,文件必须包含,mex.h,库:#,include,”,mex.h,”,。,mex.h,库中包含了,C,语言,MEX,文件所需要的,mex-,函数和,matrix.h,库(定义了,mx-,函数)。,,,mex-,和,mx-,函数是,MATLAB,提供与外界程序接口的函数。,mx-,函数用来实现,MATLAB,的矩阵操作;,m

18、ex-,函数用来实现从,MATLAB,环境中获取矩阵数据并返回信息。,9.3.2 C,语言,MEX,文件的建立,timestwo.c,,#include "mex.h,“,,/*,计算功能子程序,timestwo,,计算一个数的两倍*,/,,void timestwo(double y[], double x[]),,{,,y[0] = 2.0*x[0];,,},,/*,入口子程序,mexFunction*/,,void mexFunction( int nlhs, mxArray *plhs[],,,int nrhs, const mxArray *prhs[] ),,{,,double *

19、x,*y;,,int mrows,ncols;,,10,/*,检查输入输出参数,*/,,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]) ||,,!(mr

20、ows==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);,,},在,MATLAB,命令窗口运行,,>>mex timestwo

21、.c,,>>y=timestwo(3),y=,,6,,11,9.3.3,由,M,文件创建,C MEX,文件,,M,脚本文件不能编译成,MEX,文件,必须把,M,脚本文件改写,M,函数文件才能进行编译。,,利用,MATLAB,编译器来由,M,函数文件创建,MEX,文件,使用,“,mcc,–,x,”,命令。,%circle.m,,function circle(x,y,r,varargin) if nargin<3,,x=0; y=0; r=1;,,End,,%,画圆,,t=0:0.1:2*pi;,,x1=sin(t);,,y1=cos(t);,,p

22、lot(x1*r+x,y1*r+y,,‘,r,’,);%,圆心,(x,y),,半径,r,,%,填色,,flag=0;,,if nargin>3,,flag=varargin{1};,,end,,if flag,,fill(x1*r+x,y1*r+y,'b'),,end,,axis square;,在,MATLAB,命令窗口运行,,>>mcc,–,x circle.m,,>>circle,>>circle(1,1,2,1),,12,9.4,创建独立的外部程序,EXE,文件,MEX,文件只能在,MATLAB,环境中运行;而,EXE,文件可以独立于,MATLAB,环境运行。,,用来创建独立应用程序的

23、源代码可以是,M,文件、,C,语言文件或者这些文件的组合。不管是哪一种文件格式,都应该包含有主函数,如,C,语言的,main,函数。,,得到的,exe,文件如果要正常运行,需要下列文件:,,,mbuild,编译得到的,bin,目录下的所有文件;,,所调用的,MEX,文件;,,MATLAB,提供的数学库;,,MATLAB,提供的图形库。,mcc,指令的典型调用格式,(可以利用,mcc-?,或,help mcc,查询帮助):,,mcc -x filename1 filename2,,由,M,函数文件得到,MEX,文件,filename1.dll,,mcc -m filename,,由不包含绘图指令

24、的,M,文件得到可执行的,exe,文件,(c),,3.,mcc -p filename,,由不包含绘图指令的,M,文件得到可执行的,exe,文件,(c++),,4.,mcc -B sgl filename,,由含绘图指令的,M,文件得到可执行的,exe,文件,(c),,5.,mcc -B sglcpp filename,,,由包含绘图指令的,M,文件得到可执行的,exe,文件,(c++,独立应用程序,),注意:,“,-,”,与,mcc,之间必须有空格!,,13,main.m mrank.m,,%main.m,,function main,,r=mrank(5),,,%mra

25、nk.m,,function r=mrank(n),,%,向量,r,的每一个元素代表了一个魔方方阵的秩,,r=zeros(n,1);,,for k=1:n,,r(k)=rank(magic(k));,,end,在,MATLAB,指令窗口运行命令,,>>mcc -m main mrank,%,由,M,文件生成,exe,文件,在,Windows,的,DOS,窗口运行,D:\Documents and Settings\sllu\My Documents\MATLAB\MYFILE\mex\main,,r=,,1,,2,,3,,3,,5,,14,circle_main.m circle_fun.

26、m,,,%circle_main.m,,function circle_main,,circle_fun(1,1,2,1),,%circle_fun.m,,function circle_fun(x,y,r,varargin),,if nargin<3,,x=0; y=0; r=1;,,end,,%,画圆,,t=0:0.1:2*pi;,,x1=sin(t);,,y1=cos(t);,,plot(x1*r+x,y1*r+y,'r');,,%,填色,,flag=0;,,if nargin>3,,flag=varargin{1};,,end,,if flag,,fill(x1*r+x,y

27、1*r+y,'b'),,end,,axis square;,在,MATLAB,指令窗口运行命令,,>>mcc,–,B sgl circle_main,在,DOS,窗口运行:,,D:\Documents and Settings\sllu\My Documents\MATLAB\MYFILE\mex\circle_main,,15,9.5 Notebook,Notebook,(笔记本)是,MATLAB,与,Microsoft Word,的完美结合,使用户能在,Word,环境下灵活地使用,MATLAB,的数学运算和可视化功能,营造一个融文字处理、科学计算、工程设计于一体地工作环境。,9.5.1 N

28、otebook,的安装,,启动,MATLAB,后,在命令窗口中运行指令,,>>note-setup,,根据自己计算机所用,Word,的版本等,在提示下操作 ,直到出现,“,Notebook setup is complete,”,,,则表示安装结束。,9.5.2 Notebook,的启动,,1.,创建,M-book,文件,(1),从,Word,中启动,Notebook,,选择,Word,窗口的菜单,“,文件,”,,“,新建,”,,在出现的对话框中,选择,“,m-book,”,,则出现如图所示的新建对话框,选择,“,m-book,”,图标,按,“,确定,”,按钮。当保存文件时,默认的文件名为,

29、“,The MATLAB Notebook v1.doc,”,。,,16,(2),从,MATLAB,中启动,Notebook,在,MATLAB,命令窗口输入,“,notebook,”,命令,就可以启动,Notebook,。,,notebook,,打开一个新的,M-book,文档,,notebook FileName,打开已存在的,M-book,文件,,,FileName,应包括文件的完整路径和文件名。,,2. M-book,的界面,M-book,的界面比普通的,Word,多一个,“,Notebook,”,菜单 。,9.5.3 Notebook,的使用,,1.,输入细胞(群)的创建和运行,在,N

30、otebook,中,凡参与,Word,和,MATLAB,之间信息交换的部分,就称为,”,细胞(群),“,。,(1),只创建不运行输入细胞(群),在英文状态下按普通的文本输入方式,输入,MATLAB,命令,可以是独立行或嵌在文本中,然后用光标选中,按组合键,“,Alt-D,”,,或选择菜单,“,Notebook,”——“,Define Input Cell,”,,则所选中的文本形式命令就变成了输入细胞。,(2),创建并同时运行输入细胞,,在英文状态下按普通的文本输入方式,输入,MATLAB,命令,然后用光标选中,按组合键,“,Ctrl-Enter,”,,或选择菜单,“,Notebook,”——“

31、,Evaluate Cell,”,,则所选中的文本形式命令就会自动变成输入细胞,并得出运算结果,即输出细胞。,,17,2.,自初始化细胞及其应用,自初始化细胞(,AutoInit Cell,)与输入细胞唯一不同是:自初始化细胞会在用户启动,Notebook,时被自动送去运算,而输入细胞则不具备这种功能。,创建自初始细胞的方法是先将文本形式的,MATLAB,命令或已存在的输入细胞用光标选中,然后选择菜单,“,Notebook,”——“,Define AutoInit Cell,”,,则选中的文本形式,MATLAB,命令就会自动变成,AutoInit,格式。,3.,输出细胞,,输出细胞是,MATL

32、AB,的输出结果,包括数据、图形和出错信息。,,输出数据的有效数字、图形的大小都可以借助,“,Notebook,”——“,Notebook Options,”,菜单项打开的对话框进行设置。,(,1,)自初始化细胞的创建,为了避免其它文件或命令窗口中变量的改变影响该文件,保证文件输入输出数据的一致性,可以用,“,clear,”,命令作为该文件的第一个自初始化细胞。,(,2,)工作内存的初始化,4.,计算区,计算区(,Calc Zone),是一个由文本、输入细胞和输出细胞组成的连续区,用于实现某个具体的问题。,,创建计算区的方法是:先选定一个包含文本、输入细胞和输出细胞的连续区,然后选择菜单,“,

33、Notebook,”,,“,Define Calc Zone,”,;要运行计算区,可将光标置于计算区的任何位置,然后选择菜单,“,Notebook,”,,“,Evaluate Calc Zone,”,。,,18,5.,取消定义细胞(群),取消定义细胞的方法是,先选定细胞,然后选择菜单,“,Notebook,”——“,Undefine Cells,”,,或当光标置于单元中时按,“,Alt-U,”,按钮,则该细胞就变成,“,Normal,”,样式的文本。,6.,整个,M-book,文件的运行,,菜单,“,Notebook,”——“,Evaluate M-book,”,是运行整个,M-book,

34、文件,即把文档中所有输入细胞送到,MATLAB,中去运行。,,7.,删除,M-book,文件所有选中的输出单元,当在撰写报告或布置作业时,如果需要删除所有的输出细胞,可以选择菜单,“,Notebook,”——“,Purge Selected output Cells,”,,则会删除选中的所有输出细胞。,,9.5.4,细胞的样式,与其它,Word,模板一样,,M-book,模板通过,”,样式,“,确定细胞的字体、字号和字色。,样式名,含义,字体,Input,输入细胞,10,磅,,(points),深绿色英文粗体,Courier New,Output,输出细胞,(,数据和字符,),10,磅,(po

35、ints),蓝色英文细体,Courier New,AutoInit,自初始化细胞,10,磅,(points),深蓝色英文粗体,Courier New,Error,出错提示,10,磅,(points),深红色英文粗体,Courier New,用户可通过,【,格式:样式,】,菜单打开的对话框进行修改。,,19,小结,,1,)了解,MATLAB,编译器的功能,利用编译器可以实现与,C,语言文件之间的交互,得到脱离,MATLAB,空间运行的独立执行程序。,,2,)掌握,mex,、,mbuild,、,mcc,三个命令的含义及其完成的操作。,,,mex,指令将,C,文件转换成,MEX,文件;,,,mbui

36、ld,指令将,C,文件转换成独立执行程序;,,,mcc,指令将,M,函数文件转换成,C,文件,并且可以调用,mex,、,mbuild,来生成,MEX,或独立执行文件。,,Windows,下,MEX,文件的后缀为,.dll,,可执行文件后缀为,.exe,。,,3,)熟悉,Notebook,的安装和使用。,,人有了知识,就会具备各种分析能力,,,明辨是非的能力。,,所以我们要勤恳读书,广泛阅读,,,古人说“书中自有黄金屋。,,”通过阅读科技书籍,我们能丰富知识,,,培养逻辑思维能力;,,通过阅读文学作品,我们能提高文学鉴赏水平,,,培养文学情趣;,,通过阅读报刊,我们能增长见识,扩大自己的知识面。,,有许多书籍还能培养我们的道德情操,,,给我们巨大的精神力量,,,鼓舞我们前进,。,

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

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!