Matlab中Mex文件的创建和使用方法资料

上传人:鲁** 文档编号:591946847 上传时间:2024-09-19 格式:PPT 页数:19 大小:581.01KB
返回 下载 相关 举报
Matlab中Mex文件的创建和使用方法资料_第1页
第1页 / 共19页
Matlab中Mex文件的创建和使用方法资料_第2页
第2页 / 共19页
Matlab中Mex文件的创建和使用方法资料_第3页
第3页 / 共19页
Matlab中Mex文件的创建和使用方法资料_第4页
第4页 / 共19页
Matlab中Mex文件的创建和使用方法资料_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《Matlab中Mex文件的创建和使用方法资料》由会员分享,可在线阅读,更多相关《Matlab中Mex文件的创建和使用方法资料(19页珍藏版)》请在金锄头文库上搜索。

1、1九九、MATLAB编编译译器器和和Notebookv编译器概述器概述v编译器的安装和配置器的安装和配置v创建建MEX文件文件 v创建独立的外部程序建独立的外部程序EXE文件文件vNotebook29.1 编译器概述编译器概述 MATLAB编译器(The MATLAB Compiler,MCC)可以将M文件转化为C或C源代码,然后进一步编译链接成MEX文件或可执行程序或共享库文件。编译后可以大大提高程序的运行效率,甚至可以脱离MATLAB环境运行程序。 编译器主要包括: 将C源码文件生成MEX文件的mex编译器; 将C源码文件生成可独立运行文件的mbuild编译器; 可以将M文件转换成C源码文

2、件并调用mex或mbuild编译器生成MEX文件或exe可执行程序的mcc编译器。9.1.1 编译器的功能编译器的功能1.产生源代码,进而生成产生源代码,进而生成MEX文件文件。 MEX文件可以提高运行速度,并且可以隐藏文件算法,避免非法修改源文件。2 . 产生产生C或或C源码,进而生成独立的外部应用程序(源码,进而生成独立的外部应用程序(EXE文件)。文件)。 该程序无需MATLAB环境支持,如果源M文件使用了绘图指令,则需要图形库支持。3. 产生产生C MEX的的S函数。函数。加快Simulink中自定义的S函数模块的运行速度。4. 产生产生C共享库(动态链接库、共享库(动态链接库、DLL

3、)或)或C+静态库。静态库。 它们的使用无需MATLAB环境支持,但需要MATLAB的数学库。39.1.2 编译器的局限性编译器的局限性1.不支持M脚本文件的编译。2.不支持用户自定义的对象。3.不支持eval,input,inline等函数。4.不支持Java接口。9.2.1 配置配置MATLAB编译器的前提准备编译器的前提准备1. 计算机必须安装有计算机必须安装有ANSIC/C+编译器。编译器。下面任何一种C/C+编译器均可。l Microsoft Visual C/C+5.0以上版本。l Borland C/C+5.0以上版本。l LCC C (MATLAB自带,只能用于生成MEX文件)

4、。2. 在安装在安装MATLAB时,选中组件时,选中组件l MATLAB Compilerl C/C+ Math Libraryl MATLAB C/C+ Graphics Library9.2 编译器的安装和配置编译器的安装和配置49.2.2 为产生为产生MEX文件进行预配置文件进行预配置 要实现从M文件到MEX文件的转换,就必须先对M编译器进行正确设置。预配置包括两个过程:一是根据外部编译器的类型、软件位置对M编译器进行设置;二是利用MATLAB提供的标准文件对用户设置加以验证。1. 对对MATLAB编译器应用程序编译器应用程序mex的配置的配置启动配置:在MATLAB指令窗口运行mex-

5、setup 命令mex-setupSelect 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:2The default options file: D:Documents and SettingsslluApplication DataMathWorksMATLABR13mexopts.bat is being updated from C:MATL

6、AB6P5BINWIN32mexoptsmsvc60opts.bat. Installing the MATLAB Visual Studio add-in . Updated D:Program FilesMicrosoft Visual Studiocommonmsdev98templateMATLABWizard.awx from C:MATLAB6P5BINWIN32MATLABWizard.awx 52. 验证配置的正确性验证配置的正确性 验证分两步进行:首先验证mex命令是否可以将C源码转换成MEX文件;然后再验证mcc命令是否可以将M文件转换成MEX文件。mcc命令可以在M文件转

7、换成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:D

8、ocuments and SettingsslluMy DocumentsMATLABMYFILEmexmy_yprime.dllclear my_yprime.dll %删除my_yprime.dll文件(2)验证mcc应用程序 先将externexamplemex目录下的yprime.m文件复制到自己的目录下,并改名为my_yprime_m.m。6mcc-x my_yprime_mmy_yprime_m(1,1:4)ans= 2.0000 8.9685 4.000 -1.0947which my_yprime_mD:Documents and SettingsslluMy Document

9、sMATLABMYFILEmexmy_yprime_m.dll9.2.2 为产生独立外部应用程序进行预配置为产生独立外部应用程序进行预配置 要实现从M文件到独立外部应用程序的转换,也必须先对MATLAB编译器进行正确设置。预配置包括两个过程:一是根据外部编译器的类型、软件位置对MATLAB编译器进行设置,同时对MATLAB C数学函数库进行选择;二是利用MATLAB提供的标准文件对用户设置加以验证。1. 对对MATLAB编译器应用程序编译器应用程序mbuild的配置的配置启动配置:在MATLAB指令窗口运行mbuild-setup 命令mbuild-setupSelect a compiler

10、: 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:MATLAB6P5BINWIN32mbuildoptsmsvc60co

11、mpp.bat. 72. 验证配置的正确性验证配置的正确性 验证分两步进行:首先验证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

12、.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+1

13、2.0000iD:Documents and SettingsslluMy DocumentsMATLABMYFILEmexmy_ex1Hello,World89.3 创建创建MEX文件文件 创建创建MEX文件有两种方法文件有两种方法:l 利用C源码编辑器编写C语言MEX文件,经过mex命令编译链接得到MEX文件。l 利用M文件编辑器编写M函数文件,经过mcc命令编译链接得到MEX文件。 MEX文件的优点文件的优点:l 运行速度快,利用C代码实现循环体要比MATLAB快很多;l对于已存在的C或FORTRAN子程序,可以通过MEX文件在MATLAB环境中直接调用,而不必重新编写M文件 ;l对于A

14、/D、D/A卡,或其它PC硬件,可以直接用MEX文件进行访问 ;l利用MEX文件,可以使用如Windows用户图形界面等资源。 9.3.1 C语言语言MEX文件的构成文件的构成 程序的构成主要由入口子程序和计算功能子程序两部分组成。void mexFunction( int nlhs, mxArray *plhs, int nrhs, const mxArray*prhs ) /*用来完成MATLAB与计算子程序之间通信任务的代码*/ (1) 入口子程序 入口子程序必须是mexFunction,其构成形式为: mexFunction函数的参数含义为:nrhs:为输入参数的数目。prhs:为输入

15、参数数组,是指针数组。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

16、环境中获取矩阵数据并返回信息。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) mexErrMs

17、gTxt(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.); /* 为输出参数创建矩阵,输出指针指向该矩阵 */

18、 plhs0 = mxCreateDoubleMatrix(mrows,ncols, mxREAL); /* 输入指针输出指针赋值 */ x = mxGetPr(prhs0); y = mxGetPr(plhs0); /* 调用功能子程序 */timestwo(y,x);在MATLAB命令窗口运行mex timestwo.cy=timestwo(3)y= 6119.3.3 由由M文件创建文件创建C MEX文件文件 M脚本文件不能编译成MEX文件,必须把M脚本文件改写M函数文件才能进行编译。 利用MATLAB编译器来由M函数文件创建MEX文件,使用“mcc x”命令。 %circle.mfunc

19、tion circle(x,y,r,varargin) if nargin3 flag=varargin1;endif flag fill(x1*r+x,y1*r+y,b)endaxis square;在MATLAB命令窗口运行mcc x circle.mcirclecircle(1,1,2,1)129.4 创建独立的外部程序创建独立的外部程序EXE文件文件 MEX文件只能在MATLAB环境中运行;而EXE文件可以独立于MATLAB环境运行。 用来创建独立应用程序的源代码可以是M文件、C语言文件或者这些文件的组合。不管是哪一种文件格式,都应该包含有主函数,如C语言的main函数。 得到的exe

20、文件如果要正常运行,需要下列文件:l mbuild编译得到的bin目录下的所有文件;l 所调用的MEX文件;l MATLAB提供的数学库;l MATLAB提供的图形库。mcc指令的典型调用格式(可以利用mcc-?或help mcc查询帮助):1.mcc -x filename1 filename2 由M函数文件得到MEX文件filename1.dll2.mcc -m filename 由不包含绘图指令的M文件得到可执行的exe文件(c)3. mcc -p filename 由不包含绘图指令的M文件得到可执行的exe文件(c+)4. mcc -B sgl filename 由含绘图指令的M文件得

21、到可执行的exe文件(c)5. mcc -B sglcpp filename 由包含绘图指令的M文件得到可执行的exe文件(c+独立应用程序)注意:注意:“”与与mcc之间必须有空格!之间必须有空格!13main.m mrank.m%main.m function mainr=mrank(5)%mrank.mfunction r=mrank(n)%向量向量r的每一个元素代表了一个魔方方阵的秩的每一个元素代表了一个魔方方阵的秩r=zeros(n,1);for k=1:n r(k)=rank(magic(k);end在MATLAB指令窗口运行命令mcc -m main mrank %由M文件生成e

22、xe文件在Windows的DOS窗口运行D:Documents and SettingsslluMy DocumentsMATLABMYFILEmexmainr= 1 2 3 3 514circle_main.m circle_fun.m%circle_main.mfunction circle_maincircle_fun(1,1,2,1)%circle_fun.mfunction circle_fun(x,y,r,varargin) if nargin3 flag=varargin1;endif flag fill(x1*r+x,y1*r+y,b)endaxis square;在MATLA

23、B指令窗口运行命令mcc B sgl circle_main在DOS窗口运行:D:Documents and SettingsslluMy DocumentsMATLABMYFILEmexcircle_main159.5 Notebook Notebook(笔记本)是MATLAB与Microsoft Word的完美结合,使用户能在Word环境下灵活地使用MATLAB的数学运算和可视化功能,营造一个融文字处理、科学计算、工程设计于一体地工作环境。9.5.1 Notebook的安装的安装 启动MATLAB后,在命令窗口中运行指令note-setup根据自己计算机所用Word的版本等,在提示下操作

24、,直到出现“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打开一个新的

25、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”,或选择菜单“N

26、otebook”“Define Input Cell”,则所选中的文本形式命令就变成了输入细胞。(2) 创建并同时运行输入细胞 在英文状态下按普通的文本输入方式,输入MATLAB命令,然后用光标选中,按组合键“Ctrl-Enter”,或选择菜单“Notebook”“Evaluate Cell”,则所选中的文本形式命令就会自动变成输入细胞,并得出运算结果,即输出细胞。172. 自初始化细胞及其应用自初始化细胞及其应用 自初始化细胞(AutoInit Cell)与输入细胞唯一不同是:自初始化细胞会在用户启动Notebook时被自动送去运算,而输入细胞则不具备这种功能。 创建自初始细胞的方法是先将文

27、本形式的MATLAB命令或已存在的输入细胞用光标选中,然后选择菜单“Notebook”“Define AutoInit Cell”,则选中的文本形式MATLAB命令就会自动变成AutoInit 格式。 3. 输出细胞输出细胞 输出细胞是MATLAB的输出结果,包括数据、图形和出错信息。 输出数据的有效数字、图形的大小都可以借助“Notebook”“Notebook Options”菜单项打开的对话框进行设置。(1)自初始化细胞的创建 为了避免其它文件或命令窗口中变量的改变影响该文件,保证文件输入输出数据的一致性,可以用“clear”命令作为该文件的第一个自初始化细胞。 (2)工作内存的初始化4

28、. 计算区计算区 计算区(Calc Zone)是一个由文本、输入细胞和输出细胞组成的连续区,用于实现某个具体的问题。 创建计算区的方法是:先选定一个包含文本、输入细胞和输出细胞的连续区,然后选择菜单“Notebook”“Define Calc Zone”;要运行计算区,可将光标置于计算区的任何位置,然后选择菜单 “Notebook”“Evaluate Calc Zone”。 185. 取消定义细胞(群)取消定义细胞(群) 取消定义细胞的方法是,先选定细胞,然后选择菜单“Notebook”“Undefine Cells”,或当光标置于单元中时按“Alt-U”按钮,则该细胞就变成“Normal”样

29、式的文本。 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输入细

30、胞10磅 (points)深绿色英文粗体Courier NewOutput输出细胞(数据和字符)10磅(points)蓝色英文细体Courier NewAutoInit自初始化细胞10磅(points)深蓝色英文粗体Courier NewError出错提示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的安装和使用。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号