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

C++Builder 呼叫 MATLAB 實現混合程式設計:數值運算與繪圖整合指南

     編輯:關於C++

前言:優勢互補的混合開發策略

C++Builder 擅長 GUI、硬體介面、即時控制;MATLAB 擅長矩陣運算、數值分析、科學繪圖、工具箱生態。兩者結合可實現 **「C++Builder 做架構與介面,MATLAB 做核心演算」** 的高效分工。本文介紹基於 **MATLAB Engine API (DLL)** 的呼叫方法,適用 MATLAB 4.2+ / C++Builder 3.0+ 環境。

實作架構:Engine DLL 共享記憶體

  • MATLAB 提供 32-bit DLL:libeng.dll (Engine), libmat.dll (MAT 檔), libmx.dll (矩陣存取)
  • 透過 implib 產生對應 .lib 靜態連結庫
  • C++Builder 專案連結 .lib,引入 engine.h,即可直接呼叫 MATLAB 函數

環境建置步驟

  1. 產生 .lib:命令列執行 implib libeng.lib libeng.def (同理 libmat.lib, libmx.lib),.def 檔位於 `\extern\include`
  2. 專案設定:
    • Include Path 加入 `\extern\include`
    • Library Path 加入 `\bin` 和 `\extern\include`
    • 專案加入 libeng.lib, libmat.lib, libmx.lib
  3. 執行環境:目標機需安裝 MATLAB Runtime 或完整 MATLAB

核心 API 快速查詢

函數用途
engOpen(NULL)啟動 MATLAB Engine 進程,回傳 Engine* 控制代碼
engClose(ep)關閉 Engine
engEvalString(ep, "cmd")在 MATLAB 執行指令字串
engGetVariable(ep, "var")從 MATLAB 工作區取得變數 (mxArray*)
engPutVariable(ep, "var", arr)將 mxArray* 送入 MATLAB 工作區
mxCreateDoubleMatrix(m,n,mxREAL)建立雙精度實數矩陣
mxGetPr(arr)取得矩陣資料指標 (double*)
mxDestroyArray(arr)釋放 mxArray 記憶體
engOutputBuffer(ep, buf, size)擷取 MATLAB 指令視窗輸出文字

完整範例:矩陣運算與繪圖

#include 
#include 

void DemoMatlab() {
    Engine *ep = engOpen(NULL);           // 1. 啟動 Engine
    if (!ep) return;

    char buffer[200];
    engOutputBuffer(ep, buffer, 200);     // 捕獲輸出

    int data[6] = {1,2,3,4,5,6};
    mxArray *S = mxCreateDoubleMatrix(1, 6, mxREAL);
    mxArray *T = NULL;
    mxSetName(S, "S");
    memcpy(mxGetPr(S), data, 6*sizeof(int)); // 填入資料

    engPutVariable(ep, "S", S);           // 2. 送入工作區
    engEvalString(ep, "T = S ./ (S.^2);"); // 3. 執行運算 (元素除法)
    engEvalString(ep, "plot(S, T);");     // 4. 繪圖 (彈出 MATLAB 圖形視窗)

    T = engGetVariable(ep, "T");          // 5. 取回結果
    // 處理 T 資料...

    mxDestroyArray(S);
    mxDestroyArray(T);
    engClose(ep);                         // 6. 關閉
}

進階應用場景

  • 信號處理:C++ 采集 ADC 資料 → 送入 MATLAB FFT/濾波 → 取回結果顯示
  • 控制系統設計:C++ 即時控制迴路 → MATLAB 識別模型/設計控制器參數 → 回傳參數
  • 報表生成:C++ 收集資料 → MATLAB 統計分析/繪製專業圖表 → 匯出圖片/PDF 嵌入報表
  • 工具箱調用:影像處理、神經網路、優化工具箱等專業功能

注意事項與替代方案

  • 效能:跨進程 COM/管道通訊有延遲,高頻即時迴路不適合
  • 部署:需目標機安裝 MATLAB (授權成本);可改用 **MATLAB Compiler SDK** 產生獨立 DLL/共享庫,免 MATLAB 授權
  • 替代**:Python (NumPy/SciPy/Matplotlib) + python3.dll 嵌入 或 pybind11 綁定,生態免費、部署輕量,現代專案首選
  • 執行緒安全:Engine 非執行緒安全,多執行緒需序列化存取

結語

C++Builder + MATLAB Engine 混合開發曾是科學工程軟體的經典組合。隨著 Python 生態崛起,新專案建議評估 Python 嵌入方案;既有 MATLAB 資產專案,本文架構仍具參考價值。

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