mexme自动编写墨西哥人的过程文件。你给mexme C的一个片段,数值计算,以及参数的列表,它生成一个有效的墨西哥人. cpp文件。生成的代码编译Linux (gcc)和Windows (Visual Studio c++)。新的1.1版本中,它写冗长的输入和输出验证代码。这样你可以编写一个墨西哥人文件无需手动编码调用mx * API函数。它的灵感来自SciPy编织函数。
例如:翻译这段(non-vectorizable)。m代码,应用递归滤波器到C:
函数[y] = myrecursivefilter (x,α)
y = 0(大小(x));
y (1) = x(1) *α;
2 = 2:长度(x)
(二)= y (ii-1) *(1α)+ x (ii) *α;
结束
结束
步骤1:myrecursivefilter写。csnip which does the same thing as the m file:
x y[0] =[0] *α;
(mwSize i = 1;我< x_length;我+ +){
[我]y = x[我]*α+ y(张)*(1α);
}
第二步:定义参数函数(Matlab):
inputargs = [InputNum (“x”),…
InputNum(“阿尔法”,真的,真的,“双”,“α> 0 & &α< 1)];%标量
%的最后一个条件
outputarg = OutputNum (' y ', ' x_length 1 ');
第三步:生成一个完全成熟的c文件可以编译与墨西哥人:
用= mexme (myrecursivefilter.csnip, inputargs outputarg)
writefile (“myfilt.c”,用);
墨西哥人myfilt.c
x = randn (1 e6, 1);
y = myfilt (x,。1);
情节((x, y))
用=
/ * # include和#定义没有显示* /
# include“mexmetypecheck.c”
空白mexFunction (int nlhs mxArray * plhs [],
int nrhs, const mxArray * prhs [])
{
/ *输入输出样本* /
如果(nlhs ! = 1 | | nrhs ! = 2)
mexErrMsgTxt(”功能必须1 2参数和返回值");
const mxArray * x_ptr = prhs [0];
const mwSize x_m = mxGetM (x_ptr);
const mwSize x_n = mxGetN (x_ptr);
const mwSize x_length = x_m = = 1 ?x_n: x_m;
const mwSize x_numel = mxGetNumberOfElements (x_ptr);
const int x_ndims = mxGetNumberOfDimensions (x_ptr);
const mwSize * x_size = mxGetDimensions (x_ptr);
const双* x =(双*)mxGetData (x_ptr);
const mxArray * alpha_ptr = prhs [1];
如果(mxGetNumberOfElements (alpha_ptr) ! = 1)
mexErrMsgTxt(“参数α(# 2)必须标量”);
const双α=(双)mxGetScalar (alpha_ptr);
如果(!(α> 0 & &α< 1))
mexErrMsgTxt(“参数α(# 2)没有通过测试\“α> 0 & &α< 1 \ ");
mwSize y_dims [] = {x_length 1};
plhs [0] = mxCreateNumericArray (2 y_dims mxDOUBLE_CLASS mxREAL);
mxArray * * y_ptr = &plhs [0];
双* y =(双*)mxGetData (* y_ptr);
/ * * /实际功能
# include“myfilt.csnip”
}
对于每一个参数定义,mexme生成额外的“魔法”变量。例如,如果变量x,然后在C:
x是数据
x_m是第一维的大小
x_n第二维度的大小
x_length的长度是一个向量
x_numel数组中元素的个数
的号码是x_ndims维度
x_size相当于Matlab代码大小(x)
x_ptr mxArray包含x是一个引用数据
如果x是复杂、x_r x_i数据的真实和想象的成分。
mexme目前不支持稀疏数据或非数字类型但它支持任万博1manbetx何类型的全数字阵列(int8、单、双等)。
引用作为
帕特里克Mineault (2023)。mexme -墨西哥人写文件(//www.tianjin-qmedu.com/matlabcentral/fileexchange/31257-mexme-write-mex-files-in-no-time), MATLAB中央文件交换。检索。