Social Icons

twitterfacebookgoogle plusrss feedemail

1/01/2013

使用 C# 呼叫 MATLAB Function

沒有留言:
以下文章轉至:http://blog.linym.net/archives/564/comment-page-1#comments
最近在寫一些演算法的程式,經常要在一堆程式和檔案切換來切換去的,跑完數據還要開 MATLAB 畫圖,一直重複這些動作實在是很麻煩,所以把它寫成 Windows Form 用滑鼠點一點就 OK 了,其中繪圖部份就要利用 C# 去 call MATLAB 來作,查了許多資料,發現有很多種方法,但比較簡單方便的應該是用 MATLAB Builder NE for .NET 將 MATLAB 程式編譯成 .NET 可執行的元件。
1. 首先準備好你要 compiler 的 M-file,測試的 M-file 如下(由檔案讀取 x, y 數據曲線圖):
  1. function rmse(file)  
  2.   
  3. data = load(file);  
  4. x = data(:,1);  
  5. y = data(:,2);  
  6.   
  7. plot(x,y,'LineWidth',1);  
  8.   
  9. xlabel('Iteration');  
  10. ylabel('RMS error');  
2. 開啟 MATLAB 並在 command windows 輸入:deploytool
新建一個 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 加入。
4. 加入 Namespace
using MathWorks.MATLAB.NET.Arrays;
using rmse;
5. 使用方式
Rmse demo = new Rmse();
MWArray fileName = @"rmse.txt";
demo.rmse(fileName);
※ 如果想在沒安裝 MATLAB 的電腦上執行,需安裝 MATLAB Compiler Runtime (MCR),檔案在安裝目錄的 toolbox\compiler\deploy\win32\MCRInstaller.exe,大小約 150MB