mex文件的MEX的编写

 我来答
阿瑟倇
2016-05-17 · TA获得超过133个赞
知道答主
回答量:172
采纳率:50%
帮助的人:61.2万
展开全部

mex的编译结果实际上就是一个带输出函数mexFunction 的dll文件,所以写MEX程序其实就是写一个DLL程序。编写MEX程序的编辑器可以使用MATLAB的代码编辑器,也可使用自己的C++编辑器,如VS2008等。 #include mex.hvoid mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ){}四个参数分别用来输出和输入数据: nlhs 是输出参数个数,plhs 是输出参数指针;nrhs 是输入参数个数,prhs 是输入参数指针。
注意: 对输出和输入参数的操作都是通过指针的方式进行的。 对输入数据进行操作,需要通过MEX函数mxGetPr 得到数据的指针地址。 mxGetM 和 mxGetN 得到矩阵数据的行和列 (返回整数)。对于实矩阵,我们可以定义 double *M; 来对实矩阵数据操作。如: double *M;int m,n;//指针指向第一个参数的数据地址M = mxGetPr(prhs[0]);m = mxGetM(prhs[0]);n = mxGetN(prhs[0]);MATLAB矩阵数据的存储顺序是从上到下,从左到右的,这点和Fortran是一样的。也就是说对于MATLAB的m x n的矩阵A。 A(1,1) 就是 *M,A(2,1) 就是 *(M+1) ,以此类推,A(i,j) 就是 *(M + n*(j-1) + (i-1)).
注意: MATLAB的指标从1开始,C的指标从0开始。 创建文件 timestwoalt.c,其内容如下: #include mex.hvoid timestwo_alt(double *y, double x){        *y = 2.0*x;}void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ){        double *M;    int m,n;    //指针指向第一个参数的数据地址    M = mxGetPr(prhs[0]);    m = mxGetM(prhs[0]);    n = mxGetN(prhs[0]);        plhs[0] = mxCreateDoubleMatrix(m,n, mxINT32_CLASS,mxREAL); //生成m x n 的实矩阵,分配内存空间    double *A;    A = mxGetPr(plhs[0]);        timestwo_alt(A,*M);     //调用并直接赋值到指针指向的输出变量}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式