mex檔案

mex檔案

MEX檔案是一種可在matlab環境中調用的C語言(或fortran)衍生程式,mex的編譯結果實際上就是一個帶輸出函式mexFunction 的dll檔案

基本介紹

  • 中文名:mex檔案
  • 外文名:MATLAB和Executable
  • 介紹:在matlab環境中調用的C語言
  • 定義:輸出函式mexFunction 的dll檔案
簡介,MEX的編寫,MEX檔案格式,操作輸入數據,操作輸出數據,完整的代碼示例,MEX的編譯,MEX的調用,MEX環境配置,

簡介

MEX從字面上是MATLAB和Executable 兩個單詞的縮寫。
.MEX檔案是一種可在matlab環境中調用的C(或fortran)語言衍生程式,MEX檔案的後綴名按32位/64位分別為 .mexw32/.mexw64。MEX檔案是由C或Fortran語言編寫的原始碼,經matlab編譯器處理而生成的二進制檔案。它是可以被matlab解釋器自動裝載並執行的動態連結程式,類似windows下的dll檔案。
MEX檔案實現了一種其它語言與MATLAB的接口,通過MEX檔案可以在MATLAB中像調用內嵌函式一樣調用使用C語言Fortran等語言編寫的函式,實現了代碼重用,同時也能提高MATLAB環境中數據處理的效率

MEX的編寫

mex的編譯結果實際上就是一個帶輸出函式mexFunction 的dll檔案,所以寫MEX程式其實就是寫一個DLL程式。編寫MEX程式的編輯器可以使用MATLAB的代碼編輯器,也可使用自己的C++編輯器,如VS2008等。

MEX檔案格式

#include "mex.h"void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ){}
四個參數分別用來輸出和輸入數據: nlhs 是輸出參數個數,plhs 是輸出參數指針;nrhs 是輸入參數個數,prhs 是輸入參數指針。
注意: 對輸出和輸入參數的操作都是通過指針的方式進行的。

操作輸入數據

對輸入數據進行操作,需要通過MEX函式mxGetPr 得到數據的指針地址。 mxGetM 和 mxGetN 得到矩陣數據的行和列 (返回整數)。對於實矩陣,我們可以定義 double *M; 來對實矩陣數據操作。如:
double *M;int m,n;//指針指向第一個參數的數據地址M = mxGetPr(prhs[0]);m = mxGetM(prhs[0]);n = mxGetN(prhs[0]);
MATLAB矩陣數據的存儲順序是"從上到下,從左到右"的,這點和Fortran是一樣的。也就是說對於MATLAB的m x n的矩陣A。 A(1,1) 就是 *M,A(2,1) 就是 *(M+1) ,以此類推,A(i,j) 就是 *(M + m*(j-1) + (i-1)).
注意: MATLAB的指標從1開始,C的指標從0開始。

操作輸出數據

對於輸出數據,需要首先用專門的mex函式分配記憶體空間,如:
plhs[0] = mxCreateDoubleMatrix(m,n, mxINT32_CLASS,mxREAL); //生成m x n 的實矩陣。
同輸入數據一樣,要對輸出數據操作,我們也需要一個指向數據的指針變數,如
double *A;A = mxGetPr(plhs[0]);

完整的代碼示例

創建檔案 timestwoalt.c,其內容如下:
#include "mex.h"void timestwo_alt(double *y, double x){        *y = 2.0*x;}void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ){        double *M;    int m,n;    //指針指向第一個參數的數據地址    M = mxGetPr(prhs[0]);    m = mxGetM(prhs[0]);    n = mxGetN(prhs[0]);        plhs[0] = mxCreateDoubleMatrix(m,n, mxINT32_CLASS,mxREAL); //生成m x n 的實矩陣,分配記憶體空間    double *A;    A = mxGetPr(plhs[0]);        timestwo_alt(A,*M);     //調用並直接賦值到指針指向的輸出變數}

MEX的編譯

如編譯連結C語言的MEX檔案源程式,在MATLAB的控制視窗中輸入:mex timestwoalt.c生成一個名為timestwoalt.mexw32的MEX檔案

MEX的調用

運行:在MATLAB的控制視窗中輸入
timestwoalt(10)
結果為
ans =
20.0000 + 0.0000i

MEX環境配置

MEX檔案的編寫和編譯需要兩個基本條件:一是必須按照MATLAB要求配置接口組件和相關工具,二是要有C語言或Fortran語言的編譯器
Matlab中的配置使用如下命令按照提示進行:
karry

相關詞條

熱門詞條

聯絡我們