主要内容

在C MEX文件中传递标量值

通过标量作为矩阵

这个例子展示了如何编写一个传递标量值的MEX文件。

假设你有以下的C代码,timestwo,它的输入是标量a1——- - - - - -1矩阵,翻倍。

Void timesttwo (double y[], double x[]) {y[0] = 2.0*x[0];返回;}

C代码分析

要查看作为MEX文件编写的函数,请打开timestwo.c在MATLAB®编辑器。

在C/ c++中,编译器检查函数实参的数量和类型。然而,在MATLAB中,您可以向函数传递任意数量或类型的参数;函数负责检查参数。MEX文件还允许可变输入。MEX文件必须安全地处理任意数量的受支持类型的输入或输出参数。金宝app

这段代码检查参数的正确数量。

if(nrhs != 1) {mexrrmsgidandtxt ("MATLAB: timesttwo:invalidNumInputs", "One input required.");} else if(nlhs>1) {mexrrmsgidandtxt ("MATLAB: timesttwo:maxlhs", "输出参数太多");}

这段代码检查输入是否为实的标量双精度值。

mrows = mxGetM (prhs [0]);ncols = mxGetN (prhs [0]);if(!mxIsDouble(prhs[0]) || mxIsComplex(prhs[0]) || !(mrows==1 && ncols==1)) {mexrmsgidandtxt ("MATLAB: timesttwo:inputNotRealScalarDouble", "Input must be a noncomplex scalar double.");}

构建和测试示例

构建MEX文件。

墨西哥人- v-R2018atimestwo.c

调用的函数。

x = 2;y = timestwo (x)
y = 4

通过值传递标量

这个例子展示了如何编写一个MEX文件,它通过值传递一个标量。

mxGetScalar函数返回标量的值,而不是指向标量变量副本的指针,x

下面的C代码实现了timestwo_alt函数。

Void timestwo_alt(double *y, double x) {*y = 2.0*x;}

比较timestwo_alt函数签名timestwo函数签名。

Void timestwo_alt(double *y, double x)
Void timesttwo (double y[], double x[])

输入值x是类型标量吗.在timestwo函数时,输入值是一个矩阵类型

要查看作为MEX文件编写的函数,请打开timestwoalt.c在MATLAB编辑器中。

将调用与timestwo_alt响应号召timestwo

/*获取输入x的标量值*/ /*注意:mxGetScalar返回一个值,而不是指针*/ x = mxGetScalar(prhs[0]);/*指定一个指向输出的指针*/ y = mxgetdouble (plhs[0]);/*调用timestwo_alt子程序*/ timestwo_alt(y,x);
/*为每个输入和输出赋值指针。*/ x = mxgetdouble (prhs[0]);y = mxGetDoubles (plhs [0]);/*调用timetwo子程序。* / timestwo (y、x);

的值xmxGetScalar是标量而不是指针。