使用 C# 呼叫 MATLAB Function

九月 10th, 2009

最近在寫一些演算法的程式,經常要在一堆程式和檔案切換來切換去的,跑完數據還要開 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。
New Project
選擇 .NET component
.NET component
將 M-file 加入,然後按 Build the project,編譯完成會產生 rmse.dll
Add file

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);

demo 範例原始碼下載

※ 如果想在沒安裝 MATLAB 的電腦上執行,需安裝 MATLAB Compiler Runtime (MCR),檔案在安裝目錄的 toolbox\compiler\deploy\win32\MCRInstaller.exe,大小約 150MB

Other, 程式筆記 , , ,

  1. 十一月 5th, 2011 at 16:17 | #1

    这个博客也太久没有更新了。
    两年多了。
    博主大人,你快回来看看我们啊。

  2. 灰灰
    十一月 7th, 2011 at 18:01 | #2

    請問一下
    如果要回傳兩個double的陣列給C#
    要怎麼做?

  3. 二月 7th, 2012 at 16:52 | #3

    yoe8ka安吉白茶价格很不错的哦

Comment pages
  1. No trackbacks yet.