matlab - c(2)

2019-04-16 14:20

void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])

其中,参数nlhs和nrhs表示MATLAB在调用该MEX文件时等式左端和右端变量的个数,例如在MATLAB命令窗口中输入以下命令:

[a,b,c]=Matlab_1(d,e,f,g) 则nlhs为3,nrhs为4。

MATLAB在调用MEX文件时,输入和输出参数保存在两个mxArray*类型的指针数组中,分别为prhs[]和plhs[]。prhs[0]表示第一个输入参数,prhs[1]表示第二个输入参数,…,以此类推。如上例中,d→prhs[0],e→prhs[1],f→prhs[2],f→prhs[3]。同时注意,这些参数的类型都是mxArray *。

接口过程要把参数传递给计算过程,还需要从prhs中读出矩阵的信息,这就要用到下面的mx-函数和mex-函数。 1.5 常用的mex-函数和mx-函数

在MATLAB6.5版本中,提供的mx-函数有106个,mex-函数有38个,下面我们仅介绍常用的函数。

1.入口函数mexFunction

该函数是C MEX文件的入口函数,它的格式是固定的:

void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])

说明:

MATLAB函数的调用方式一般为:[a,b,c,…]=被调用函数名称(d,e,f,…),nlhs保存了等号左端输出参数的个数,指针数组plhs具体保存了等号左端各参

数的地址,注意在plhs各元素针向的mxArray内存未分配,需在接口过程中分配内存;prhs保存了等号右端输入参数的个数,指针数组prhs具体保存了等号右端各参数的地址,注意MATLAB在调用该MEX文件时,各输入参数已存在,所以在接口过程中不需要再为这些参数分配内存。

2.出错信息发布函数mexErrMsgTxt,mexWarnMsgTxt 两函数的具体格式如下: #include \

void mexErrMsgTxt(const char *error_msg); void mexWarnMsgTxt(const char *warning_msg);

其中error_msg包含了要显示错误信息,warning_msg包含要显示的警告信息。两函数的区别在于mexErrMsgTxt显示出错信息后即返回到MATLAB,而mexWarnMsgTxt显示警告信息后继续执行。

3.mexCallMATLAB和mexEvalString 两函数具体格式如下: #include \

int mexCallMATLAB(int nlhs, mxArray *plhs[],

int nrhs, mxArray *prhs[], const char *command_name); int mexEvalString(const char *command);

mexCallMATLAB前四个参数的含义与mexFunction的参数相同,

command_name可以MATLAB内建函数名、用户自定义函数、M文件或MEX文件名构成的字符串,也可以MATLAB合法的运算符。

mexEvalString用来操作MATLAB空间已存在的变量,它不返回任何参数。 mexCallMATLAB与mexEvalString差异较大,请看下面的例子。 【例2】试用MEX文件求5阶完全图邻接矩阵 的特征值及对应的特征向量。

5阶完全图的邻接矩阵为: 下面是求该矩阵的MEX文件。 [Matlab_2.cpp] #include \

void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[]) {

double x; mxArray *y,*z,*w; int n; if (nrhs!=1)

mexErrMsgTxt(\ if (nlhs != 3)

mexErrMsgTxt(\ if

(!mxIsDouble(prhs[0])||mxGetN(prhs[0])*mxGetM(prhs[0])!=1)

mexErrMsgTxt(\ x=mxGetScalar(prhs[0]);

plhs[0]=mxCreateDoubleMatrix(x,x,mxREAL); plhs[1]=mxCreateDoubleMatrix(x,x,mxREAL); plhs[2]=mxCreateDoubleMatrix(x,x,mxREAL); n=mxGetM(plhs[0]); y=plhs[0]; z=plhs[1]; w=plhs[2];

//利用mexCallMATLAB计算特征值

mexCallMATLAB(1,&plhs[1],1,prhs,\ mexCallMATLAB(1,&plhs[2],1,prhs,\ mexCallMATLAB(1,&plhs[0],2,&plhs[1],\ mexCallMATLAB(2,&plhs[1],1,&plhs[0],\ //演示mexEvalString的功能 mexEvalString(\ mexEvalString(\}

在MATLAB命令窗口输入以下命令:

>> mex Matlab_2.cpp >> clear >> a=magic(5) a =

17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 >> [y,z,w]=Matlab_2(5)

??? Undefined function or variable 'y'. a =

34 48 2 16 30 46 10 14 28 32 8 12 26 40 44 20 24 38 42 6 22 36 50 4 18 y =

0 1 1 1 1


matlab - c(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:不同牧草品种混播组合对株高和产量的影响

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: