
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类型的数据!所以,可用性不大。
首先,要保证MEX文件物历芹编译成功,烂没这个可以从罩毕编译的返回字串中看到。其次,MEX所在的路径必须正确,要在Matlab的路径或你添加的路径中。
最后,MEX文件的入口函数一定要正确,参考例子程序。
希望能帮助你。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)