创建C源文件墨西哥人arrayProduct.c
这个例子展示了如何编写一个墨西哥人文件来调用一个C函数arrayProduct
在MATLAB®使用MATLAB中定义的数组矩阵C API。您可以查看完整的源文件在这里。
使用这个示例中,您需要:
能够编写C或c++源代码。你用MATLAB编辑器创建这些文件。
通过MATLAB编金宝app译器支持。编译器支持的最新列表,请参阅金宝app金宝app支持和兼容的编译器的网站。
墨西哥人
构建脚本。
如果你想使用自己的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 |
输入参数的数组。 |
验证墨西哥人文件输入和输出参数
验证数量的墨西哥人使用文件输入和输出参数nrhs
和nlhs
参数。
检查两个输入参数,乘数
和inMatrix
,请使用此代码。
如果(nrhs ! = 2) {mexErrMsgIdAndTxt (“MyToolbox: arrayProduct: nrhs”、“两个输入必需的。”);}
使用这个代码来检查一个输出参数,产品outMatrix
。
如果(nlhs ! = 1) {mexErrMsgIdAndTxt (“MyToolbox: arrayProduct: nlhs”,“一个输出要求。”);}
验证参数类型使用plhs
和prhs
参数。这段代码验证乘数
,由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
声明为变量n
和我
与mwsize
。
空白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)
另请参阅
墨西哥人
|mexFunction
|mxCreateDoubleMatrix