资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,1,九、,MATLAB,编译器和,Notebook,编译器概述,编译器的安装和配置,创建,MEX,文件,创建独立的外部程序,EXE,文件,Notebook,2,9.1,编译器概述,MATLAB,编译器(,The MATLAB Compiler,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.,产生,C MEX,的,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+,编译器均可。,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,文件到,MEX,文件的转换,就必须先对,M,编译器进行正确设置。预配置包括两个过程:一是根据外部编译器的类型、软件位置对,M,编译器进行设置;二是利用,MATLAB,提供的标准文件对用户设置加以验证。,1.,对,MATLAB,编译器应用程序,mex,的配置,启动配置:在,MATLAB,指令窗口运行,mex-setup,命令,mex-setup,Select a compiler:,1 Lcc C version 2.4 in C:MATLAB6P5syslcc,2 Microsoft Visual C/C+ version 6.0 in D:Program FilesMicrosoft Visual Studio,0 None,Compiler:,2,The default options file:,D:Documents and SettingsslluApplication DataMathWorksMATLABR13mexopts.bat,is being updated from C:MATLAB6P5BINWIN32mexoptsmsvc60opts.bat.,Installing the MATLAB Visual Studio add-in .,Updated D:Program FilesMicrosoft Visual Studiocommonmsdev98templateMATLABWizard.awx,from C:MATLAB6P5BINWIN32MATLABWizard.awx,5,2.,验证配置的正确性,验证分两步进行:首先验证,mex,命令是否可以将,C,源码转换成,MEX,文件;然后再验证,mcc,命令是否可以将,M,文件转换成,MEX,文件。,mcc,命令可以在,M,文件转换成,C,源码后,自动调用,mex,命令,将,C,源码转换成,MEX,文件。,利用,MATLAB,自带的,yprime.c,和,yprime.m,来验证,mex,和,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,应用程序,先将,externexamplemex,目录下的,yprime.c,文件复制到自己的目录下,并改名为,my_yprime.c,。,which my_yprime,%,获得,my_yprime.dll,文件的位置信息,D:Documents and SettingsslluMy DocumentsMATLABMYFILEmexmy_yprime.dll,clear my_yprime.dll,%,删除,my_yprime.dll,文件,(,2,)验证,mcc,应用程序,先将,externexamplemex,目录下的,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,D:Documents and SettingsslluMy DocumentsMATLABMYFILEmexmy_yprime_m.dll,9.2.2,为产生独立外部应用程序进行预配置,要实现从,M,文件到独立外部应用程序的转换,也必须先对,MATLAB,编译器进行正确设置。预配置包括两个过程:一是根据外部编译器的类型、软件位置对,MATLAB,编译器进行设置,同时对,MATLAB C,数学函数库进行选择;二是利用,MATLAB,提供的标准文件对用户设置加以验证。,1.,对,MATLAB,编译器应用程序,mbuild,的配置,启动配置:在,MATLAB,指令窗口运行,mbuild-setup,命令,mbuild-setup,Select a compiler:,1 Lcc C version 2.4 in C:MATLAB6P5syslcc,2 Microsoft Visual C/C+ version 6.0 in D:Program FilesMicrosoft Visual Studio,0 None,Compiler:,2,The default options file:,D:Documents and SettingsslluApplication DataMathWorksMATLABR13compopts.bat,is being updated from C: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,。,mbuild my_ex1.c,%,生成,my_ex1.exe,文件,在,Windows,的,DOS,窗口运行,my_ex1.exe,文件查看其正确性。,(,2,)验证,mcc,应用程序,先将,externexamplecompiler,目录下的,hello.m,文件复制到自己的目录下,并改名为,my_hello.m,。,mcc -p my_hello.m,在,Windows,的,DOS,窗口运行,my_hello.exe,文件查看其正确性。,D:Documents and SettingsslluMy DocumentsMATLABMYFILEmexmy_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 SettingsslluMy DocumentsMATLABMYFILEmexmy_ex1,Hello,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.1 C,语言,MEX,文件的构成,程序的构成主要由入口子程序和计算功能子程序两部分组成。,void mexFunction( int nlhs, mxArray *plhs, int nrhs, const mxArray*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.2 C,语言,MEX,文件的建立,timestwo.c,#include mex.h,“,/*,计算功能子程序,timestwo,,计算一个数的两倍*,/,void timestwo(double y, double x),y0 = 2.0*x0;,/*,入口子程序,mexFunction*/,void mexFunction( int nlhs, mxArray *plhs,int nrhs, const mxArray *prhs ),double *x,*y;,int mrows,ncols;,10,/*,检查输入输出参数,*/,if(nrhs!=1) ,mexErrMsgTxt(One input required.);, else if(nlhs1) ,mexErrMsgTxt(Too many output arguments);,/*,输入只能是一个双精度型的实数,*/,mrows = mxGetM(prhs0);,ncols = mxGetN(prhs0);,if( !mxIsDouble(prhs0) | mxIsComplex(prhs0) |,!(mrows=1 & ncols=1) ) ,mexErrMsgTxt(Input must be a noncomplex scalar double.);,/*,为输出参数创建矩阵,输出指针指向该矩阵 *,/,plhs0 = mxCreateDoubleMatrix(mrows,ncols, mxREAL);,/*,输入指针输出指针赋值 *,/,x = mxGetPr(prhs0);,y = mxGetPr(plhs0);,/*,调用功能子程序 *,/,timestwo(y,x);,在,MATLAB,命令窗口运行,mex timestwo.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 nargin3,flag=varargin1;,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,环境运行。,用来创建独立应用程序的源代码可以是,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,由不包含绘图指令的,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),%mrank.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 SettingsslluMy DocumentsMATLABMYFILEmexmain,r=,1,2,3,3,5,14,circle_main.m circle_fun.m,%circle_main.m,function circle_main,circle_fun(1,1,2,1),%circle_fun.m,function circle_fun(x,y,r,varargin),if nargin3,flag=varargin1;,end,if flag,fill(x1*r+x,y1*r+y,b),end,axis square;,在,MATLAB,指令窗口运行命令,mcc,B sgl circle_main,在,DOS,窗口运行:,D:Documents and SettingsslluMy DocumentsMATLABMYFILEmexcircle_main,15,9.5 Notebook,Notebook,(笔记本)是,MATLAB,与,Microsoft Word,的完美结合,使用户能在,Word,环境下灵活地使用,MATLAB,的数学运算和可视化功能,营造一个融文字处理、科学计算、工程设计于一体地工作环境。,9.5.1 Notebook,的安装,启动,MATLAB,后,在命令窗口中运行指令,note-setup,根据自己计算机所用,Word,的版本等,在提示下操作 ,直到出现,“,Notebook setup is complete,”,则表示安装结束。,9.5.2 Notebook,的启动,1.,创建,M-book,文件,(1),从,Word,中启动,Notebook,选择,Word,窗口的菜单,“,文件,”,“,新建,”,,在出现的对话框中,选择,“,m-book,”,,则出现如图所示的新建对话框,选择,“,m-book,”,图标,按,“,确定,”,按钮。当保存文件时,默认的文件名为,“,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.,输入细胞(群)的创建和运行,在,Notebook,中,凡参与,Word,和,MATLAB,之间信息交换的部分,就称为,”,细胞(群),“,。,(1),只创建不运行输入细胞(群),在英文状态下按普通的文本输入方式,输入,MATLAB,命令,可以是独立行或嵌在文本中,然后用光标选中,按组合键,“,Alt-D,”,,或选择菜单,“,Notebook,”“,Define Input Cell,”,,则所选中的文本形式命令就变成了输入细胞。,(2),创建并同时运行输入细胞,在英文状态下按普通的文本输入方式,输入,MATLAB,命令,然后用光标选中,按组合键,“,Ctrl-Enter,”,,或选择菜单,“,Notebook,”“,Evaluate Cell,”,,则所选中的文本形式命令就会自动变成输入细胞,并得出运算结果,即输出细胞。,17,2.,自初始化细胞及其应用,自初始化细胞(,AutoInit Cell,)与输入细胞唯一不同是:自初始化细胞会在用户启动,Notebook,时被自动送去运算,而输入细胞则不具备这种功能。,创建自初始细胞的方法是先将文本形式的,MATLAB,命令或已存在的输入细胞用光标选中,然后选择菜单,“,Notebook,”“,Define AutoInit Cell,”,,则选中的文本形式,MATLAB,命令就会自动变成,AutoInit,格式。,3.,输出细胞,输出细胞是,MATLAB,的输出结果,包括数据、图形和出错信息。,输出数据的有效数字、图形的大小都可以借助,“,Notebook,”“,Notebook Options,”,菜单项打开的对话框进行设置。,(,1,)自初始化细胞的创建,为了避免其它文件或命令窗口中变量的改变影响该文件,保证文件输入输出数据的一致性,可以用,“,clear,”,命令作为该文件的第一个自初始化细胞。,(,2,)工作内存的初始化,4.,计算区,计算区(,Calc Zone),是一个由文本、输入细胞和输出细胞组成的连续区,用于实现某个具体的问题。,创建计算区的方法是:先选定一个包含文本、输入细胞和输出细胞的连续区,然后选择菜单,“,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,文件,即把文档中所有输入细胞送到,MATLAB,中去运行。,7.,删除,M-book,文件所有选中的输出单元,当在撰写报告或布置作业时,如果需要删除所有的输出细胞,可以选择菜单,“,Notebook,”“,Purge Selected output Cells,”,,则会删除选中的所有输出细胞。,9.5.4,细胞的样式,与其它,Word,模板一样,,M-book,模板通过,”,样式,“,确定细胞的字体、字号和字色。,样式名,含义,字体,Input,输入细胞,10,磅,(points),深绿色英文粗体,Courier New,Output,输出细胞,(,数据和字符,),10,磅,(points),蓝色英文细体,Courier New,AutoInit,自初始化细胞,10,磅,(points),深蓝色英文粗体,Courier New,Error,出错提示,10,磅,(points),深红色英文粗体,Courier New,用户可通过,【,格式:样式,】,菜单打开的对话框进行修改。,19,小结,1,)了解,MATLAB,编译器的功能,利用编译器可以实现与,C,语言文件之间的交互,得到脱离,MATLAB,空间运行的独立执行程序。,2,)掌握,mex,、,mbuild,、,mcc,三个命令的含义及其完成的操作。,mex,指令将,C,文件转换成,MEX,文件;,mbuild,指令将,C,文件转换成独立执行程序;,mcc,指令将,M,函数文件转换成,C,文件,并且可以调用,mex,、,mbuild,来生成,MEX,或独立执行文件。,Windows,下,MEX,文件的后缀为,.dll,,可执行文件后缀为,.exe,。,3,)熟悉,Notebook,的安装和使用。,人有了知识,就会具备各种分析能力,,明辨是非的能力。,所以我们要勤恳读书,广泛阅读,,古人说“书中自有黄金屋。,”通过阅读科技书籍,我们能丰富知识,,培养逻辑思维能力;,通过阅读文学作品,我们能提高文学鉴赏水平,,培养文学情趣;,通过阅读报刊,我们能增长见识,扩大自己的知识面。,有许多书籍还能培养我们的道德情操,,给我们巨大的精神力量,,鼓舞我们前进,。,
展开阅读全文