matlab如何编译mex文件

作者&投稿:再奚 (若有异议请与网页底部的电邮联系)
matlab怎么调用mex文件~

通过MEX文件可以在MATLAB中像调用内嵌函数一样调用现有的使用C语言和Fortran等语言编写的函数,实现了代码重用,同时也能解决MATLAB循环效率低的缺点,提高MATLAB环境中数据处理的效率。MEX文件的后缀名为.mexw32MEX文件的编写和编译需要两个基本条件:一是必须按照MATLAB应用程序接口组件和相关工具,二是要有C语言或Fortran语言的编译器。需要对MATLAB系统进行设置,使MATLAB系统知道使用系统的哪一个C语言编译器,以及其参数和路径。MEX文件系统设置:>>mex–setup按照提示进行,最后出现Done…系统配置完毕。C语言MEX文件的建立C语言MEX文件的建立1.MEX文件的结构a)计算子程序b)入口子程序,voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){/*用户特定的代码….*/}2.创建timestwoalt.c#include"mex.h"voidtimestwo_alt(double*y,doublex){*y=2.0*x;}voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){double*y;doublex;/*检查参数*/if(nrhs!=1){mexErrMsgTxt("Oneinputargumentrequired.");}elseif(nlhs>1){mexErrMsgTxt("Toomanyoutputarguments.");}elseif(!mxIsNumeric(prhs[0])){mexErrMsgTxt("Argumentmustbenumeric.");}elseif(mxGetNumberOfElements(prhs[0])!=1||mxIsComplex(prhs[0])){mexErrMsgTxt("Argumentmustbenon-complexscalar.");}/*为输出参数创建变量*/plhs[0]=mxCreateDoubleMatrix(1,1,mxREAL);/*为参数x、y赋值,x为值,而y为指针(由于MATLAB没有值传递,所以用指针才能得到修改后的y值,不然修改的是y的一个副本,为临时变量,在函数返回时,y值没有变化,不能得到希望的结果)*/x=mxGetScalar(prhs[0]);y=mxGetPr(plhs[0]);/*调用timestwo_alt子函数*/timestwo_alt(y,x);}3.编译链接C语言的MEX文件源程序,在MATLAB的控制窗口中输入:mextimestwoalt.c生成一个名为timestwoalt.mexw32的MEX文件4.运行:在MATLAB的控制窗口中输入x=2;y=timestwoalt(x)输出:y=4MEX文件实现了一种C语言与MATLAB的接口,其实际的计算功能仍在C语言形式的计算子程序中完成,而入口子程序的功能是检查参数以匹配C语言的参数规范(howto?)。当有C语言编写的大型程序时,不必用MATLAB语言重新编写,只要将此C语言程序作为一个计算子程序,然后编写一个入口子程序,完成参数的匹配,然后编译成MEX文件即可。MEX文件的另外一个功能是可以将MATLAB编程中的瓶颈问题,如多重循环等,将此类费时的指令用C语言实现,然后作必要的入口子程序,编译成MEX文件,可以有效地提高MATLAB的效率。S-函数创建器限制了C语言S-函数的功能:只能有一个输入信号和一个输出信号,而且只能处理double类型的数据!所以,可用性不大。

程序源文件编译后的文件。相比m文件,mex文件执行速度更快。不能像查看m文件一样查看mex文件,原因是mex文件是二进制文件。

通过MEX文件可以在MATLAB中像调用内嵌函数一样调用现有的使用C语言和Fortran等语言编写的函数,实现了代码重用,同时也能解决MATLAB循环效率低的缺点,提高MATLAB环境中数据处理的效率。
MEX文件的后缀名为 .mexw32
MEX文件的编写和编译需要两个基本条件:一是必须按照MATLAB应用程序接口组件和相关工具,二是要有C语言或Fortran语言的编译器。
需要对MATLAB系统进行设置,使MATLAB系统知道使用系统的哪一个C语言编译器,以及其参数和路径。
MEX文件系统设置:
>> mex –setup按照提示进行,最后出现Done…系统配置完毕。
C语言MEX文件的建立
C语言MEX文件的建立
1. MEX文件的结构
a) 计算子程序
b) 入口子程序,void mexFunction(int nlhs, mxArray *plhs[],int nrhs,const mxArray *prhs[]){ /*用户特定的代码….*/ }
2. 创建timestwoalt.c
#include "mex.h"
void timestwo_alt(double *y, double x)
{
*y = 2.0*x;
}
void mexFunction( int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[] )
{
double *y;
doublex;
/* 检查参数 */
if (nrhs != 1) {
mexErrMsgTxt("One input argument required.");
} else if (nlhs > 1) {
mexErrMsgTxt("Too many output arguments.");
} else if (!mxIsNumeric(prhs[0])) {
mexErrMsgTxt("Argument must be numeric.");
} else if (mxGetNumberOfElements(prhs[0]) != 1 || mxIsComplex(prhs[0])) {
mexErrMsgTxt("Argument must be non-complex scalar.");
}
/* 为输出参数创建变量 */
plhs[0] = mxCreateDoubleMatrix(1,1,mxREAL);
/*
为参数 x、y赋值,x为值,而y为指针
(由于MATLAB没有值传递,所以用指针才能得到修改后的y值,
不然修改的是y的一个副本,为临时变量,在函数返回时,y值没有变化,
不能得到希望的结果)
*/
x = mxGetScalar(prhs[0]);
y = mxGetPr(plhs[0]);
/* 调用timestwo_alt 子函数 */
timestwo_alt(y,x);
}
3. 编译链接C语言的MEX文件源程序,在MATLAB的控制窗口中输入:mex timestwoalt.c生成一个名为timestwoalt.mexw32的MEX文件
4. 运行:在MATLAB的控制窗口中输入
x=2;
y=timestwoalt(x)
输出:y=4
MEX文件实现了一种C语言与MATLAB的接口,其实际的计算功能仍在C语言形式的计算子程序中完成,而入口子程序的功能是检查参数以匹配C语言的参数规范(how to?)。
当有C语言编写的大型程序时,不必用MATLAB语言重新编写,只要将此C语言程序作为一个计算子程序,然后编写一个入口子程序,完成参数的匹配,然后编译成MEX文件即可。
MEX文件的另外一个功能是可以将MATLAB编程中的瓶颈问题,如多重循环等,将此类费时的指令用C语言实现,然后作必要的入口子程序,编译成MEX文件,可以有效地提高MATLAB的效率。
S-函数创建器限制了C语言S-函数的功能:只能有一个输入信号和一个输出信号,而且只能处理double类型的数据!所以,可用性不大。

先用mbuild -setup选择安装编译器
再用指令
mex c文件件名
编译


matlab中.m文件怎样进行编译
直接运行.m文件,如果有错,会在command window 里进行提示的。再点击错误处就会跳到相应的错误行。

MATLAB7.0 的compiler如何把.p文件编译成了vc6.0调用的DLL文件
假设你的文件名叫做myfun.p 在命令行输入:>> mcc -W lib:myfun -T link:lib myfun.p 你就会产生相应的dll和.h文件。这是我的测试结果:如果你是高版本的matlab,直接试用deploytool, 图形化界面,非常简单。

MATLAB R2011a 如何安装编译器,如何生成exe文件?
Matlab编译器是独立于matlab主程序的一个模块,名字叫做Matlab Compliler,你需要找到这个模块,安装完毕,才可以使用mcc -m xxx.m 编译出可执行的exe文件 希望能对你有帮助

如何将Matlab的M文件变成EXE文件
如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:一、生成独立可执行的程序(exe文件)步骤 1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++6.0,我基于VS 2003实现。2、设置编译器。在matlab命令行输入mbuild ...

MATLAB 2011b 如何将 smulink 编译生成可运行的 exe 文件?具体步骤或者...
我的机器上没装2011b,这里以2008a为例说明步骤。其它版本大同小异。1、打开模型。2、按Ctrl+E打开仿真参数设置对话框。3、选择Solver类型为固定步长求解器。需要注意,Simulink代码生成只能使用固定步长。4、在代码生成页面,按Build按钮生成exe文件。当然,有一些参数可以酌情设置,涉及的面比较宽,建议...

如何使用matlab与vs编译器
(1)在 MATLAB 环境中使用 mcc 命令;(2)在系统命令环境中使用 mcc.exe (在Windows上);(3)在 MATLAB 环境中使用 Deployment Tool。4. 程序发布 (1)使用 MATLAB 命令 builder;(2)使用 Deployment Tool 图形化工具。一般来说,需要发布的文件有3个:(1)编译得到的可执行文件或库函数...

求大神看下,如何在matlab2014a中进行编译器的设置,发现和2008以及2010...
添加Matlab2013a与VS2013的支持文件 具体路径为:R2013a\\bin\\win32\\mexopts VS2013_Support_For_Matlab_2013_32bit.zip 因系统为32位,所以选择32bit下载,解压后的文件copy至mexopts目录下;ok,至此可以编译,修改!

matlab如何更新exe文件中mat文件
2、将您修改后的mat文件保存在工程文件夹内。3、打开matlab编译器,选择“DeployTool”工具。4、选择“AddFiles”选项,将您修改后的mat文件添加到编译器中。5、选择“Package”选项,配置您需要编译的exe文件的相关设置。6、点击“Package”按钮,开始编译您的exe文件。7、编译完成后,您可以在编译器中...

如何配置64位Matlab的编译器
1. 选择“Build” – “Configuration Manager”菜单,打开配置管理器。点击新建解决方案平台。2. 选择“x64”平台,点击确定按钮。3. 这时候配置管理器中的平台已经改成刚才选择的x64了,这时候编译出来的就是64位程序了。可以在工具栏的平台下拉框中快速切换目标平台。4. 如果在选择平台的下拉列表里...

matlab中函数编写结束后需要编译吗
不需要。MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。MATLAB是一个解释型的语言不需要编译,它既可以在命令窗口中一句一句的执行,也可以创建一个脚本整个的执行。编译就是把高级语言变成计算机可以识别的2进制语言,计算机只...

东宝区14746356136: matlab mex 编译器怎么编译文件 -
塞饱舒兰: 通过MEX文件可以在MATLAB中像调用内嵌函数一样调用现有的使用C语言和Fortran等语言编写的函数,实现了代码重用,同时也能解决MATLAB循环效率低的缺点,提高MATLAB环境中数据处理的效率.MEX文件的后缀名为 .mexw32 MEX文...

东宝区14746356136: matlab如何编译mex文件 -
塞饱舒兰: 先用mbuild -setup选择安装编译器再用指令mex c文件件名编译

东宝区14746356136: 怎么用matlab中的mex文件 -
塞饱舒兰: 程序源文件编译后的文件.相比m文件,mex文件执行速度更快.不能像查看m文件一样查看mex文件,原因是mex文件是二进制文件.

东宝区14746356136: matlab 把c文件 编译成mex64 文件 -
塞饱舒兰: 下面是编译步骤:1. 设置编译器(1)在MATLAB命令窗口中运行mex –setup,出现下列提示:Please choose your compiler for building external interface (MEX) files:Would you like mex to locate installed compilers [y]/n?(2)选择y,MATLAB将自动...

东宝区14746356136: 求助!请问用MATLAB生成MEX文件的具体步骤是什么? -
塞饱舒兰: mex -setpu 先选择你的编译器 然后mex -xxx.cpp 就可以了

东宝区14746356136: 如何在matlab上运行c语言写的程序 -
塞饱舒兰: 1.准备好C语言程序,清楚C语言的入口函数2.编写mexfunction函数.mexfunction函数为C语言与MATLAB语言的接口函数.调用实例在mylinedetect.c文件中.在MATLAB中调用mex指令编译相关文件,将C语言编译为MEX文件.3.编译完成后,...

东宝区14746356136: 如何在matlab环境下完成mex文件编译器的配置,并选择合适的fortran语言编译器
塞饱舒兰: [r,c] = find(R == max(R(:))); 检索R中最大元素所在的位置(行标r和列标c)thetap = theta(c(1)); theta()是自定义函数

东宝区14746356136: 在matlab环境中如何调用mexwin32文件 -
塞饱舒兰: 和matlab里面的函数一样,按照函数名,直接调用就可以,mexwin32文件要放在当前目录下,注意函数的输入输出参数的数目和格式就行.

东宝区14746356136: matlab中用什么实现公式编译 -
塞饱舒兰: 由于时间仓促,简单地学习了如何将.m文件打包为.exe文件 首先介绍一下MATLAB编译器 MATLAB编译器 功能1、产生C源码,并进而生成MEX文件.这种MEX文件的优点是:一,当程序变量为实数,或向量化程度较低,或含有循环结构时,...

东宝区14746356136: mex文件的MEX的编写 -
塞饱舒兰: mex的编译结果实际上就是一个带输出函数mexFunction 的dll文件,所以写MEX程序其实就是写一个DLL程序.编写MEX程序的编辑器可以使用MATLAB的代码编辑器,也可使用自己的C++编辑器,如VS2008等. #include mex.hvoid ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网