资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,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
展开阅读全文