本文转载自:herohbc
这篇文章介绍一下Matlab为mexFunction提供的一些常用函数。在调用这些函数的时候,只需要包含头文件mex.h即可。
1. 输出函数
1.1 void mexErrMsgTxt(const char *error_msg);
在Matlab的Command Window中显示错误信息,并终止程序运行。
如用来判断输入参数的个数是否正确。
if (nrhs != 1)
{
mexErrMsgTxt("One input argument required.");
}
1.2 void mexErrMsgIdAndTxt(const char * identifier, const char * err_msg, ...);
在Matlab的Command Window中显示错误信息的标识符和具体内容,并终止程序运行。 identifier表示错误信息的标识符,可以标明错误发生的位置和类型等信息。后面的省略号可以用来输出额外的参数。这个函数的用法和C语言的printf有点相似。
如用来判断输出参数的个数是否正确。
if (nlhs > 1)
{
mexErrMsgIdAndTxt( "MATLAB:yprime:maxlhs", "Too many output arguments.");
}
也可以写成下述形式。
if (nlhs > 1)
{
mexErrMsgIdAndTxt( "MATLAB:yprime:maxlhs", "There are %d output arguments.", nlhs);
}
1.3 void mexWarnMsgTxt(const char *warn_msg);
在Matlab的Command Window中显示警告信息,但并不终止程序运行。用法与mexErrMsgTxt函数相同。
1.4 void mexWarnMsgIdAndTxt(const char * identifier, const char * warn_msg, ...);
在Matlab的Command Window中显示警告信息的标识符和具体内容,但并不终止程序运行。用法与mexErrMsgIdAndTxt函数相同。
1.5 int mexPrintf(const char *fmt, ...);
在Matlab的Command Window中输出格式化的文本信息,和C语言的printf函数用法相同。
2. 数据操纵函数
2.1 size_t mxGetM(const mxArray *pa);
获得pa所指向的数组的行数。在Win32平台上,typedef unsigned int size_t;
2.2 size_t mxGetN(const mxArray *pa);
获得pa所指向的数组的列数。
2.3 double *mxGetPr(const mxArray *pa);
获得pa所指向的数组的首地址。这时pa指向的数组必须是double类型的。要注意的是,在pa所指向的数组元素是按列存储的,和C语言的按行存储不同。但数组下标和C语言一样,也是从0开始。
2.4 double mxGetScalar(const mxArray *pa);
返回pa所指向的数组的第一个实数。如果mxArray不是double类型,则自动转化为double类型。大多数情况下,当pa只指向的mxArray只有一个元素时,可以使用该函数。
2.5 bool mxIsEmpty(const mxArray *pa);
判断pa所指向的mxArray是否为空。如果为空,则返回1;否则返回0。
2.6 bool mxIsNumeric(const mxArray *pa);
判断pa所指向的mxArray是否为数值。如果是,则返回1;否则返回0。
2.7 mxArray *mxCreateDoubleMatrix(mwSize m, mwSize n, mxComplexity flag);
创建一个double类型的矩阵,初值设为0,m表示行数,n表示列数。flag可取值为mxREAL或mxCOMPLEX,表示实数矩阵或复数矩阵。返回矩阵的首地址。同样注意,矩阵的元素是按列存储的。
typedef size_t mwSize;
typedef enum
{
mxREAL,
mxCOMPLEX
}mxComplexity;
如第一个输出参数是一个10*10的实数矩阵。
plhs[0] = mxCreateDoubleMatrix(10, 10, mxREAL);
2.8 mxArray *mxCreateDoubleScalar(double value);
创建包含一个元素的double类型矩阵,并将值设置为value。
未完待续……