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程序运算
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)