MATLAB程序如何转成C语言?

MATLAB程序如何转成C语言?,第1张

可以将程序写到embedded

function放到simulink里面利用RTW

workshop就可以生成宴备洞了

里面可以晌枯有矩阵运算matlab基本的函数等,功能还是滚告很丰富的,可以到网上查找相关资料

简单点的,你就用matlab写一个接口程序,封装你的c程序,类似下面这种:(matlab的例子,实现数组相乘,文件为arrayProduct.c)

#include "mex.h"

/* 你的c */

void arrayProduct(double x, double *y, double *z, mwSize n)

{

mwSize i

/* multiply each element y by x */搜谨

for (i=0i<ni++) {

z[i] = x * y[i]

}

}

/* 接口程序 */

void mexFunction( int nlhs, mxArray *plhs[],

int nrhs, const mxArray *prhs[])

{

/*初始化输入输出*/

double multiplier /* input scalar */

double *inMatrix /* 1xN input matrix */

mwSize ncols /* size of matrix */

double *outMatrix /* output matrix */

/* 参数检查,如果程序较毁基简单也可以不用做*/

if(nrhs!=2) {

mexErrMsgIdAndTxt("MyToolbox:arrayProduct:nrhs","Two inputs required.")

}

if(nlhs!=1) {

mexErrMsgIdAndTxt("MyToolbox:arrayProduct:nlhs","One output required.")

}

/* make sure the first input argument is scalar */

if( !mxIsDouble(prhs[0]) ||

mxIsComplex(prhs[0]) ||

mxGetNumberOfElements(prhs[0])!=1 ) {

mexErrMsgIdAndTxt("MyToolbox:arrayProduct:notScalar","Input multiplier must be a scalar."世余基)

}

/* check that number of rows in second input argument is 1 */

if(mxGetM(prhs[1])!=1) {

mexErrMsgIdAndTxt("MyToolbox:arrayProduct:notRowVector","Input must be a row vector.")

}

/* get the value of the scalar input */

multiplier = mxGetScalar(prhs[0])

/* create a pointer to the real data in the input matrix */

inMatrix = mxGetPr(prhs[1])

/* get dimensions of the input matrix */

ncols = mxGetN(prhs[1])

/* create the output matrix */

plhs[0] = mxCreateDoubleMatrix(1,ncols,mxREAL)

/* get a pointer to the real data in the output matrix */

outMatrix = mxGetPr(plhs[0])

/* call the computational routine */

arrayProduct(multiplier,inMatrix,outMatrix,ncols)

}

这个看起来复杂,其实很简单的,就几步:

1、使用mxGet*将输入变为matlab兼容形式

2、使用mxSet*初始化输出空间

3、使用你的C程序运算


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12306592.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存