![用MEX文件实现Matlab中调用C函数 matlab如何调用函数](http://img.aihuau.com/images/02111102/02043643t017259d32aa85fe177.jpg)
我在这里提供了一个模板,以后写MEX可以参考这个用。这个程序的功能是输入两个数,输出一个2x2的矩阵,里面是这两个数的和差积商。
#include "mex.h"
void mexFunction( int nlhs, mxArray *plhs[], int nrhs, constmxArray *prhs[]){ double*matrix_ptr; double*a_ptr, *b_ptr; if(nlhs> 1) { mexErrMsgTxt("Too many outputarguments."); } if(nrhs!= 2) { mexErrMsgTxt("Must have twoinput arguments."); } plhs[0]= mxCreateDoubleMatrix(2, 2, mxREAL);matrix_ptr = mxGetPr(plhs[0]); a_ptr =mxGetPr(prhs[0]); b_ptr =mxGetPr(prhs[1]);this_is_a_function_of_which_i_dont_care_about_the_name(matrix_ptr,a_ptr, b_ptr);
}
voidthis_is_a_function_of_which_i_dont_care_about_the_name(doublematrix_ptr[], double a_ptr[], double b_ptr[]){ doublea = a_ptr[0]; doubleb = b_ptr[0]; matrix_ptr[0] = a + b;matrix_ptr[1] = a - b;matrix_ptr[2] = a * b;matrix_ptr[3] = a / b;return;}
拿到这段代码,把它们复制到一个xxxxxx.c的文本中,然后在Matlab中用mexxxxxxx.c的指令进行编译(第一次用时可能要先用mex-setup指令设置编译器),编译出的mex文件就可以当m文件使用,如,c=xxxxxx(3,4),则c =
7.0000 12.0000 -1.0000 0.7500
下面讲这个代码怎么改。首先,要包含mex.h,不然很多函数不能用。有两个函数,一个叫mexFunction,它的名字和参数是不能随便改的。这些参数是很重要的:nlhs是在Matlab中调用这个MEX时等号左边的参数个数,plhs是一个指针数组(即每一个元素都是一个指针),然后每一个指针指着一个在Matlab中调用时等号左边的参数。后面两个参数同理是等号右边的。两个if很明显是检测参数是否正确了,为安全起见。 plhs[0]= mxCreateDoubleMatrix(2, 2,mxREAL);是给等号左边的第一个参数分配一个2x2的double空间,我们最后的2x2矩阵结果就是要存在这里的。然后三个mxGetPr可以理解为把奇怪的mxArray*类型转成double*。最后一行,传入我们自定义的函数。自定义的函数的目的就是修改plhs,在这个例子中只有一个输出参数所以只修改plhs[0]。很简单吧。注意:1、数组的寻址是按列优先的。2、Matlab中默认都是double类型,整数也是,所以不要用int*接收。3、一定谨慎区别指针与指针数组。其他的资料就都是英文的了,问Google吧。