首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Matlab 調用 C 程序:MEX 文件編寫與編譯全流程指南

     編輯:關於C語言

Matlab 調用 C 程序:MEX 文件編寫與編譯全流程指南

為什麼用 MEX?

Matlab 矩陣運算極快,但大量 for 循環極慢。將熱點循環移植為 C 語言編譯成 .mexw64(Windows 64位)動態庫,Matlab 可像內建函數一樣調用,顯著提速。

編譯環境配置

Matlab 命令窗執行 mex -setup 選擇 C 編譯器(Visual Studio / MinGW / GCC)。

MEX 源碼結構

  1. 功能子程序:純 C 實現的計算邏輯。
  2. 入口函數 mexFunction:固定簽名
    void mexFunction(int nlhs, mxArray *plhs[],
                     int nrhs, const mxArray *prhs[]);
    • nrhs/prhs:輸入參數個數與指針數組(prhs[i] 指向第 i 個輸入 mxArray)。
    • nlhs/plhs:輸出參數個數與指針數組,函數需分配 mxArray 並掛入 plhs。

示例:雙精度加法 add.c

#include "mex.h"
double add(double x, double y) { return x + y; }

void mexFunction(int nlhs, mxArray *plhs[],
                 int nrhs, const mxArray *prhs[]) {
    double *out = mxGetPr(plhs[0] = mxCreateDoubleMatrix(1,1,mxREAL));
    double a = *mxGetPr(prhs[0]);
    double b = *mxGetPr(prhs[1]);
    *out = add(a, b);
}

編譯:mex add.c 生成 add.mexw64。Matlab 中直接 c = add(1.2, 3.4)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved