
我在這里提供了一個(gè)模板,以后寫MEX可以參考這個(gè)用。這個(gè)程序的功能是輸入兩個(gè)數(shù),輸出一個(gè)2x2的矩陣,里面是這兩個(gè)數(shù)的和差積商。
#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;}
拿到這段代碼,把它們復(fù)制到一個(gè)xxxxxx.c的文本中,然后在Matlab中用mexxxxxxx.c的指令進(jìn)行編譯(第一次用時(shí)可能要先用mex-setup指令設(shè)置編譯器),編譯出的mex文件就可以當(dāng)m文件使用,如,c=xxxxxx(3,4),則c =
7.0000 12.0000 -1.0000 0.7500
下面講這個(gè)代碼怎么改。首先,要包含mex.h,不然很多函數(shù)不能用。有兩個(gè)函數(shù),一個(gè)叫mexFunction,它的名字和參數(shù)是不能隨便改的。這些參數(shù)是很重要的:nlhs是在Matlab中調(diào)用這個(gè)MEX時(shí)等號(hào)左邊的參數(shù)個(gè)數(shù),plhs是一個(gè)指針數(shù)組(即每一個(gè)元素都是一個(gè)指針),然后每一個(gè)指針指著一個(gè)在Matlab中調(diào)用時(shí)等號(hào)左邊的參數(shù)。后面兩個(gè)參數(shù)同理是等號(hào)右邊的。兩個(gè)if很明顯是檢測(cè)參數(shù)是否正確了,為安全起見。 plhs[0]= mxCreateDoubleMatrix(2, 2,mxREAL);是給等號(hào)左邊的第一個(gè)參數(shù)分配一個(gè)2x2的double空間,我們最后的2x2矩陣結(jié)果就是要存在這里的。然后三個(gè)mxGetPr可以理解為把奇怪的mxArray*類型轉(zhuǎn)成double*。最后一行,傳入我們自定義的函數(shù)。自定義的函數(shù)的目的就是修改plhs,在這個(gè)例子中只有一個(gè)輸出參數(shù)所以只修改plhs[0]。很簡(jiǎn)單吧。注意:1、數(shù)組的尋址是按列優(yōu)先的。2、Matlab中默認(rèn)都是double類型,整數(shù)也是,所以不要用int*接收。3、一定謹(jǐn)慎區(qū)別指針與指針數(shù)組。其他的資料就都是英文的了,問(wèn)Google吧。
愛華網(wǎng)



