
Matlab中Mex文件的创建和使用方法.ppt
19页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:\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\mexopts.bat" is being updated from C:\MATLAB6P5\BIN\WIN32\mexopts\msvc60opts.bat... Installing the MATLAB Visual Studio add-in ... Updated D:\Program Files\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和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应用程序 先将
6,>>mcc-x my_yprime_m>>my_yprime_m(1,1:4)ans= 2.0000 8.9685 4.000 -1.0947,>>which my_yprime_mD:\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指令窗口运行mbuild-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\compopts.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)验证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[]){ y[0] = 2.0*x[0];}/*入口子程序mexFunction*/void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ){ double *x,*y; int mrows,ncols;,。
