Math 版 (精华区)

发信人: ysc (bajie), 信区: Math
标  题: 用c编写mex程序  [part 4] (转信)
发信站: 哈工大紫丁香 (Sun Oct 22 09:01:36 2000), 转信

发信人: fasiondog (乱了), 信区: MathTools       
发信站: BBS 水木清华站 (Mon Apr  5 12:50:30 1999)

发信人: dodoo (虚怀), 信区: Programming
标  题: 用C编写mex程序  [PART 4]
输入数据是在函数调用之前已经在Matlab里申请了内存的,由于mex函数与Matlab共用同
一个地址空间,因而在prhs[]里传递指针就可以达到参数传递的目的。但是,输出参数
却需要在mex函数内申请到内存空间,才能将指针放在plhs[]中传递出去。由于返回指针
类型必须是mxArray,所以Matlab专门提供了一个函数:mxCreateDoubleMatrix来实现内
存的申请,函数原型如下:
mxArray *mxCreateDoubleMatrix(int m, int n, mxComplexity ComplexFlag)
m:待申请矩阵的行数
n:待申请矩阵的列数
为矩阵申请内存后,得到的是mxArray类型的指针,就可以放在plhs[]里传递回去了。但
是对这个新矩阵的处理,却要在函数内完成,这时就需要用到前面介绍的mxGetPr。使用
mxGetPr获得指向这个矩阵中数据区的指针(double类型)后,就可以对这个矩阵进行各
种操作和运算了。下面的程序是在上面的show.c的基础上稍作改变得到的,功能是将输

//reverse.c 1.0


#include "mex.h"

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

     int nrhs, const mxArray *prhs[])

{

 double *inData;

 double *outData;

 int M,N;

 int i,j;



 inData=mxGetPr(prhs[0]);

 M=mxGetM(prhs[0]);

 N=mxGetN(prhs[0]);


 plhs[0]=mxCreateDoubleMatrix(M,N,mxREAL);

 outData=mxGetPr(plhs[0]);


 for(i=0;i<M;i++)

  for(j=0;j<N;j++)

   outData[j*M+i]=inData[(N-1-j)*M+i];

}


当然,Matlab里使用到的并不是只有double类型这一种矩阵,还有字符串类型、稀疏矩

阵、结构类型矩阵等等,并提供了相应的处理函数。本文用到编制mex程序中最经常遇到

的一些函数,其余的详细情况清参考Apiref.pdf。


--

※ 来源: 心网 cag.seu.edu.cn [FROM: 202.119.30.69]

--

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: ysc.bbs@smth.org]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:7.245毫秒