Matlab是矩阵语言,如果运算可以用矩阵实现,其运算速度非常快。但若运算中涉及到大量循环,Matlab的速度令人难以忍受的。当必须使用for循环且找不到对应的矩阵运算来等效时,可以把耗时长的函数用c语言实现,并编译成mex函数可以加快执行速度。Mex文件其实是一种动态链接库,旧版本Matlab可以直接调用.dll,新版本要调用.mexw32或.mexw64文件。
Matlab本身是不带c语言的编译器的,所以要求你的机器上已经安装有VC,BC或Watcom C中的一种。如果你在安装Matlab时已经设置过编译器,那么现在你应该就可以使用mex命令来编译c语言的程序了。如果当时没有选,就在Matlab里键入mex -setup,下面只要根据提示一步步设置就可以了。
测试程序如下(程序存为hello.c):
//hello.c
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
int i;
i=mxGetScalar(prhs[0]);
if(i==1)
mexPrintf("hello,world!/n");
else
mexPrintf("大家好!/n");
}
将当前的工作文件夹设为程序存储的位置,在命令窗口中输入
mex hello.c
正常的话会显示:
使用 'Microsoft Visual C++ 2010 (C)' 编译。
MEX 已成功完成。
这时会生成hello.mexw64,该文件实现所需功能。
此时输入hello(0)
将会打印hello,world!
输入hello(1)
将会打印大家好!
整个程序由一个接口子过程 mexFunction构成。
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
前面提到过,Matlab的mex函数有一定的接口规范,就是指这
nlhs:输出参数数目
plhs:指向输出参数的指针
nrhs:输入参数数目
参考:http://www.cnblogs.com/tjulxh/archive/2012/04/23/2467087.html