mexme -墨西哥人写文件

写完全有效的墨西哥人. cpp文件包括mexFunction样板基于数字C / c++代码片段

973下载

更新2012年11月13日

查看许可协议

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中央文件交换。检索

MATLAB版本兼容性
创建R2008b
兼容任何释放
平台的兼容性
窗户 macOS Linux

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!
版本 发表 发布说明
1.8.0.0

实现Jan西蒙的建议,包括与Visual Studio的兼容性

1.7.0.0

与Visual Studio添加兼容性和实现Jan西蒙的建议

1.4.0.0

添加输入/输出验证代码生成

1.3.0.0

TestMexMe补充道。在zip文件

1.2.0.0

添加引用逐字

1.0.0.0