主要内容

创建C源文件墨西哥人arrayProduct.c

这个例子展示了如何编写一个墨西哥人文件来调用一个C函数arrayProduct在MATLAB®使用MATLAB中定义的数组矩阵C API。您可以查看完整的源文件在这里

使用这个示例中,您需要:

如果你想使用自己的C语言开发环境,明白了自定义构建与墨西哥人脚本选项为更多的信息。

C函数arrayProduct

下面的代码定义了arrayProduct函数,乘以1 xn矩阵y由一个标量值x在数组并返回结果z。您可以使用这些相同的C语句在c++应用程序。

空白arrayProduct(双x,双* y,双* z, int n) {int我;(我= 0;我< n;我+ +){x * y z[我]=[我];}}

创建源文件

打开MATLAB编辑器,创建一个文件,文档墨西哥人文件包含以下信息。

/ * * arrayProduct。c -在MATLAB外部接口* *增加一个输入标量(乘数)* * (inMatrix) * 1 xn矩阵和输出1 xn矩阵(outMatrix) * *调用语法:* * outMatrix = arrayProduct(乘数,inMatrix) * *这是一个墨西哥人申请MATLAB。* /

加入C / c++头文件,mex.h,包含MATLAB API函数声明。

# include“mex.h”

保存文件在你的MATLAB路径,例如,在c: \工作,并命名为arrayProduct.c。你的墨西哥人文件的名称arrayProduct

创建网关程序

每一个C程序都有main ()函数。MATLAB使用网关程序,mexFunction的入口点函数。添加以下mexFunction代码。

* / / *网关功能无效mexFunction (int nlhs, mxArray * plhs [], int nrhs, const mxArray * prhs[]){/ *变量声明这里代码* / / * * /}

此表描述的输入参数mexFunction

参数 描述
nlhs 数量的输出(左侧)参数,或的大小plhs数组中。
plhs 输出参数的数组。
nrhs 数量的输入(右)参数,或的大小prhs数组中。
prhs 输入参数的数组。

验证墨西哥人文件输入和输出参数

验证数量的墨西哥人使用文件输入和输出参数nrhsnlhs参数。

检查两个输入参数,乘数inMatrix,请使用此代码。

如果(nrhs ! = 2) {mexErrMsgIdAndTxt (“MyToolbox: arrayProduct: nrhs”、“两个输入必需的。”);}

使用这个代码来检查一个输出参数,产品outMatrix

如果(nlhs ! = 1) {mexErrMsgIdAndTxt (“MyToolbox: arrayProduct: nlhs”,“一个输出要求。”);}

验证参数类型使用plhsprhs参数。这段代码验证乘数,由prhs [0]是一个标量。

/ *确保第一个输入参数是标量* /如果(! mxIsDouble (prhs [0]) | | mxIsComplex (prhs [0]) | | mxGetNumberOfElements (prhs [0]) ! = 1) {mexErrMsgIdAndTxt (“MyToolbox: arrayProduct: notScalar”、“输入乘数必须是一个标量。”);}

这段代码验证inMatrix,由prhs [1]是类型

如果(! mxIsDouble (prhs [1]) | | mxIsComplex (prhs [1])) {mexErrMsgIdAndTxt (“MyToolbox: arrayProduct: notDouble”,“必须类型双输入矩阵。”);}

验证inMatrix是一个行向量。

/ *检查的行数第二个输入参数是1 * / (mxGetM (prhs [1]) ! = 1) {mexErrMsgIdAndTxt (“MyToolbox: arrayProduct: notRowVector”、“输入必须是一个行向量。”);}

创建计算程序

添加arrayProduct代码。这个函数是你计算程序的源代码,在MATLAB环境下执行您想要使用的功能。

空白arrayProduct(双x,双* y,双* z, int n) {int我;(我= 0;我< n;我+ +){x * y z[我]=[我];}}

计算程序是可选的。或者,您可以将代码中mexFunction功能块。

编写代码实现跨平台的灵活性

MATLAB提供了预处理器宏,mwsize为整数,表示大小值,基于这个平台。计算程序声明数组的大小int。取代int声明为变量nmwsize

空白arrayProduct(双x,双* y,双* z, mwSize n) {mwSize我;(我= 0;我< n;我+ +){x * y z[我]=[我];}}

声明变量的计算程序

把下列变量声明mexFunction

  • 声明变量的输入参数。

    双倍增;/ *输入标量* /双* inMatrix;/ * 1 xn输入矩阵* /
  • 声明ncols输入矩阵的大小。

    mwSize ncols;* / / *大小的矩阵
  • 声明输出参数,outMatrix

    双* outMatrix;/ *输出矩阵* /

以后你分配mexFunction这些变量的参数。

读取输入数据

阅读标量输入,使用mxGetScalar函数。

/ *得到标量值的输入* /乘数= mxGetScalar (prhs [0]);

使用mxGetDoubles指向函数的输入数据矩阵。

/ *创建一个指针指向的实际数据输入矩阵* / inMatrix = mxGetDoubles (prhs [1]);

使用mxGetN函数矩阵的大小。

/ *得到尺寸输入矩阵* / ncols = mxGetN (prhs [1]);

准备输出数据

创建输出参数,plhs [0],可以使用mxCreateDoubleMatrix函数。

/ *创建输出矩阵* / plhs [0] = mxCreateDoubleMatrix (1 ncols mxREAL);

使用mxGetDoubles函数分配outMatrix参数plhs [0]

/ *得到真实数据在输出矩阵指针* / outMatrix = mxGetDoubles (plhs [0]);

执行计算

传递的参数arrayProduct

/ *调用计算例程* / arrayProduct(乘数,inMatrix、outMatrix ncols);

查看完整的源文件

比较你的源文件arrayProduct.c位于matlabroot走读生/ /墨西哥人例子。打开文件arrayProduct.c在编辑器中。

对于一个c++墨西哥人使用文件示例MATLAB c++数据API,请参阅arrayProduct.cpp。这个API创建墨西哥人文件信息,明白了c++墨西哥人的功能

构建墨西哥人的功能

在MATLAB命令提示符下,构建的函数墨西哥人命令。

墨西哥人arrayProduct.c-R2018a

测试墨西哥人功能

s = 5;一个= (1.5、2、9);B = arrayProduct(年代)
B = 7.5000 10.0000 45.0000

墨西哥人文件输入参数进行验证

它是良好的实践来验证一个MATLAB变量的类型之前调用一个墨西哥人的功能。为了测试输入变量,inputArg,并把它转换成如果有必要,请使用下面的代码。

s = 5;一个= (1.5、2、9);inputArg = int16(一个);如果~ strcmp(类(inputArg),“双”)inputArg =双(inputArg);结束B = arrayProduct(年代,inputArg)

另请参阅

||

相关的话题