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毫秒