在MATLAB中可调用的C或Fortran语言程序称为MEX文件。MATLAB可以直接把MEX文件视为它的内建函数进行调用。MEX文件是动态链接的子例程,MATLAB解释器可以自动载入并执行它。MEX文件主要有以下用途:
#include "mex.h"
void myplus(double x[], double y[], double z[])
{
z[0] = x[0] + y[0];
}
void mexFunction(int nlhs, mxArray * plhs[], int nrhs, const mxArray * prhs[])
{
double *x, *y, *z;
int mrows0, ncols0;
int mrows1, ncols1;
// 检查输入输出变量的个数
if (nrhs != 2)
mexErrMsgTxt("Tow input required.");
else
if (nlhs > 1)
{
mexErrMsgTxt("Too many output arguments.");
}
// 检查输入合法性
mrows0 = mxGetM(prhs[0]);
ncols0 = mxGetN(prhs[0]);
if ( !mxIsDouble(prhs[0]) //|| !mxIsComplex(prhs[0])
|| !(mrows0 == 1 && ncols0 == 1))
mexErrMsgTxt("Input must be all noncomplex scalar double----------");
mrows1 = mxGetM(prhs[1]);
ncols1 = mxGetN(prhs[1]);
if ( !mxIsDouble(prhs[1]) //|| !mxIsComplex(prhs[1])
|| !(mrows0 == 1 && ncols0 == 1))
mexErrMsgTxt("Input must be all noncomplex scalar double++++++++");
// 由于调用格式为z = mexPlus(x, y);此时z为一个空白值,应为输出新建空间
plhs[0] = mxCreateDoubleMatrix(mrows0, ncols0, mxREAL);
//由此决定哪个是输入,哪个是输出
x = mxGetPr(prhs[0]);
y = mxGetPr(prhs[1]);
z = mxGetPr(plhs[0]);
myplus(x, y, z);
}
void mexFunction(int nlhs, mxArray * plhs[], int nrhs, const mxArray * prhs[])