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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

135
246
1.0000+7.0000i 4.0000+10.0000i
(2)验证mcc应用程序
2.0000+8.0000i 5.0000+11.0000i 3.0000+9.0000i 6.0000+12.0000i
先将<matlab>\extern\example\compiler目录下的hello.m文件复制到自己的目
!(mrows==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); }
2. 验证配置的正确性
验证分两步进行:首先验证mbuild命令是否可以将C源码转换成EXE文件;然 后再验证mcc命令是否可以将M文件转换成EXE文件。mcc命令可以在M文件转换 成C源码后,自动调用mbuild命令,将C源码转换成EXE文件。
利用MATLAB自带的ex1.c和hello.m来验证mbuild和mcc命令。
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
录下,并改名为my_hello.m。
>>mcc -p my_hello.m
在Windows的DOS窗口运行my_hello.exe文件查看其正确性。
D:\Documents and Settings\sllu\My Documents\MATLAB\MYFILE\mex\my_ex1
6
Hello,World
将C源码文件生成可独立运行文件的mbuild编译器;
可以将M文件转换成C源码文件并调用mex或mbuild编译器生成MEX文件 或exe可执行程序的mcc编译器。
9.1.1 编译器的功能
1. 产生源代码,进而生成MEX文件。
MEX文件可以提高运行速度,并且可以隐藏文件算法,避免非法修改源文件。
2 . 产生C或C++源码,进而生成独立的外部应用程序(EXE文件)。
void timestwo(double y[], double x[])
{
y[0] = 2.0*x[0];
}
ቤተ መጻሕፍቲ ባይዱ
/*入口子程序mexFunction*/
void mexFunction( int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[] )
启动配置:在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
程序的构成主要由入口子程序和计算功能子程序n两rh部s:分为组输成入。参数的数目。
(1) 入入口口子子程程序序必须是mexFunction,其构成形式pnprllhhh为sss::::为为为输输输出出入参参参数数数的数数数组组目,,。是是指指针针数数组组。。
void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray*prhs[] )
>>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
9.1 编译器概述
MATLAB编译器(The MATLAB Compiler,MCC)可以将M文件转化为C或C++ 源代码,然后进一步编译链接成MEX文件或可执行程序或共享库文件。编译后可以 大大提高程序的运行效率,甚至可以脱离MATLAB环境运行程序。
编译器主要包括:
将C源码文件生成MEX文件的mex编译器;
9.1.2 编译器的局限性
1. 不支持M脚本文件的编译。
2. 不支持用户自定义的对象。
3. 不支持eval,input,inline等函数。
4. 不支持Java接口。
9.2 编译器的安装和配置
9.2.1 配置MATLAB编译器的前提准备
1. 计算机必须安装有ANSIC/C++编译器。下面任何一种C/C++编译器均可。
(2)验证mcc应用程序
先将<matlab>\extern\example\mex目录下的yprime.m文件复制到自己的目录 下,并改名为my_yprime_m.m。
4
第4页/共19页
>>mcc-x my_yprime_m
>>my_yprime_m(1,1:4)
ans= 2.0000 8.9685 4.000 -1.0947
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
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...
利用MEX文件,可以使用如Windows用户图形界面等资源。
创建MEX文件有两种方法:
利用C源码编辑器编写C语言MEX文件,经过mex命令编译链接得到MEX文件。
利用M文件编辑器编写M函数文件,经过mcc命令编译链接得到MEX文件。
9.3.1 C语言MEX文件的构成 mexFunction函数的参数含义为:
该程序无需MATLAB环境支持,如果源M文件使用了绘图指令,则需要图形库支持。
3. 产生C MEX的S函数。加快Simulink中自定义的S函数模块的运行速度。 4. 产生C共享库(动态链接库、DLL)或C++静态库。
它们的使用无需MATLAB环境支持,但需要MATLAB的数学库。
1
第1页/共19页
ans=
2.0000 8.9685 4.000 -1.0947
>>which my_yprime
%获得my_yprime.dll文件的位置信息
D:\Documents and Settings\sllu\My Documents\MATLAB\MYFILE\mex\my_yprime.dll
>>clear my_yprime.dll %删除my_yprime.dll文件
(1)验证mex应用程序
先将<matlab>\extern\example\cmath目录下的ex1.c文件复制到自己的目录
下,并改名为my_ex1.c。
>>mbuild my_ex1.c
%生成my_ex1.exe文件
在Windows的DOS窗口运行my_ex1.exe文件查看其正确性。
D:\Documents and Settings\sllu\My Documents\MATLAB\MYFILE\mex\my_ex1
{ /*用来完成MATLAB与计算子程序之间通信任务的代码*/
}
7
第7页/共19页
入口子程序的作用是在MATLAB系统与被调用的外部子程序之间建立通信联系。
(2) 计算功能子程序
计算功能子程序包含所有的实际需要完成的功能源代码,可以是用户以前所编写 的算法和程序,以函数的形式存在。
C语言MEX文件必须包含mex.h库:#include”mex.h”。mex.h库中包含了C语言MEX文 件所需要的mex-函数和matrix.h库(定义了mx-函数)。
3
第3页/共19页
2. 验证配置的正确性
验证分两步进行:首先验证mex命令是否可以将C源码转换成MEX文件;然后 再验证mcc命令是否可以将M文件转换成MEX文件。mcc命令可以在M文件转换成 C源码后,自动调用mex命令,将C源码转换成MEX文件。
利用MATLAB自带的yprime.c和yprime.m来验证mex和mcc命令。
(1)验证mex应用程序
先将<matlab>\extern\example\mex目录下的yprime.c文件复制到自己的目
录下,并改名为my_yprime.c。
>>mex my_yprime.c
%由my_yprime.c文件生成my_yprime.dll文件
>>my_yprime(1,1:4)
%运行my_yprime.dll文件
第6页/共19页
9.3 创建MEX文件
MEX文件的优点:
运行速度快,利用C代码实现循环体要比MATLAB快很多;
对于已存在的C或FORTRAN子程序,可以通过MEX文件在MATLAB环境中直接调用, 而不必重新编写M文件 ;
对于A/D、D/A卡,或其它PC硬件,可以直接用MEX文件进行访问 ;
>>which my_yprime_m
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指令窗口运行mbuild-setup 命令
2
第2页/共19页
9.2.2 为产生MEX文件进行预配置
要实现从M文件到MEX文件的转换,就必须先对M编译器进行正确设置。预 配置包括两个过程:一是根据外部编译器的类型、软件位置对M编译器进行设置; 二是利用MATLAB提供的标准文件对用户设置加以验证。
1. 对MATLAB编译器应用程序mex的配置
mex-和mx-函数是MATLAB提供与外界程序接口的函数。mx-函数用来实现MATLAB的 矩阵操作;mex-函数用来实现从MATLAB环境中获取矩阵数据并返回信息。
9.3.2 C语言MEX文件的建立
timestwo.c
#include "mex.h“ /*计算功能子程序timestwo,计算一个数的两倍*/
[0] None
Compiler: 2
The default options file:
"D:\Documents and Settings\sllu\Application
Data\MathWorks\MATLAB\R13\compopts.bat"
5
is being updated from C:\MATLAB6P第5\5B页IN/共\W19IN页32\mbuildopts\msvc60compp.bat...
{
double *x,*y;
8
int mrows,ncols;
第8页/共19页
/* 检查输入输出参数 */ 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]) ||
相关文档
最新文档