最近在寫一些演算法的程式,經常要在一堆程式和檔案切換來切換去的,跑完數據還要開 MATLAB 畫圖,一直重複這些動作實在是很麻煩,所以把它寫成 Windows Form 用滑鼠點一點就 OK 了,其中繪圖部份就要利用 C# 去 call MATLAB 來作,查了許多資料,發現有很多種方法,但比較簡單方便的應該是用 MATLAB Builder NE for .NET 將 MATLAB 程式編譯成 .NET 可執行的元件。
1. 首先準備好你要 compiler 的 M-file,測試的 M-file 如下(由檔案讀取 x, y 數據曲線圖):
- function rmse(file)
- data = load(file);
- x = data(:,1);
- y = data(:,2);
- plot(x,y,'LineWidth',1);
- xlabel('Iteration');
- ylabel('RMS error');
2. 開啟 MATLAB 並在 command windows 輸入:deploytool
新建一個 project,名稱為 rmse。
選擇 .NET component
將 M-file 加入,然後按 Build the project,編譯完成會產生 rmse.dll
新建一個 project,名稱為 rmse。
選擇 .NET component
將 M-file 加入,然後按 Build the project,編譯完成會產生 rmse.dll
3. 將 .dll 加入 Visual Studio 參考(Reference)
在方案總管右鍵選「加入參考」>「瀏覽」,將剛剛編譯完成的 .dll 以及 MATLAB 安裝目錄底下的 toolbox\dotnetbuilder\bin\win32\v2.0\MWArray.dll 加入。
在方案總管右鍵選「加入參考」>「瀏覽」,將剛剛編譯完成的 .dll 以及 MATLAB 安裝目錄底下的 toolbox\dotnetbuilder\bin\win32\v2.0\MWArray.dll 加入。
4. 加入 Namespace
using MathWorks.MATLAB.NET.Arrays;
using rmse;
using MathWorks.MATLAB.NET.Arrays;
using rmse;
5. 使用方式
Rmse demo = new Rmse();
MWArray fileName = @"rmse.txt";
demo.rmse(fileName);
Rmse demo = new Rmse();
MWArray fileName = @"rmse.txt";
demo.rmse(fileName);
※ 如果想在沒安裝 MATLAB 的電腦上執行,需安裝 MATLAB Compiler Runtime (MCR),檔案在安裝目錄的 toolbox\compiler\deploy\win32\MCRInstaller.exe,大小約 150MB