C# + MATLAB編程

最近在做一個asp.net網站程序,有個需求是利用離散點生成等高線,一開始研究了半天如何生成等高線的思想,後來感覺太麻煩了,想試着用matlab做一下。基本思想是:先在matlab裏寫好m文件,裏面包括一個函數。然後將m文件編譯成dll庫供後臺調用,思想很簡單,但有些設置比較麻煩,應該是操作系統或matlab軟件本身版本的問題,記錄以下:

      1、開發工具:vs2010+ matlab 2012;

      2、安裝matlab(注意版本問題,之前裝了matlab2010,但是隻是調試過程中是可行的,發佈成網站之後調用matlab生成的dll就不工作了,找了半天沒找到原因,後來試着裝了一個新版本matlab 2012,好了)

      3、安裝MCRInstaller.exe(路徑:D:\Program Files\MATLAB\R2012b\toolbox\compiler\deploy\win32)  

      4、設置環境變量:我的電腦-屬性-高級-環境變量-系統變量-PATH-編輯,在變量值輸入框中,不要刪除以前的字符串,在最前面加入MCR的安裝路徑,如:"D:\Program Files\MATLAB\MATLAB Compiler Runtime\v80\bin\win32;" 然後確定、保存、重啓電腦。(我就是不知道需要這兩步,老是在C#創建Matlab的訪問對象時,出現:“xxx的類型初始值設定項引發異常。”,完全不理解是什麼原因,被耽擱了大量時間,直到安裝了Matlab 2008b,仔細閱讀它生成的readme.txt才知道)

     5、設置matlab編譯環境。在matlab的Command window中輸入mbuild -setup顯示如下

>> mbuild -setup

    6、編寫m文件

    7、在matlab中調用deploytool 命令編譯m文件,生成動態鏈接庫dll

    8、在vs工程中引用生成的dll,同時還要加載MWArray.dll鏈接庫

    9、引用matlab文件及核心代碼,注意matlab的傳值參數類型,Cont爲生成的dll鏈接庫,CCont爲類名。 

   

   using MathWorks.MATLAB.NET.Arrays;
   using MathWorks.MATLAB.NET.Utility;
   using Cont;
   ....
   CCont myC = new CCont();
   MWStructArray res = (MWStructArray)myC.Contour((MWNumericArray)x11, (MWNumericArray)x21, (MWNumericArray)y11, (MWNumericArray)y21,
                 (MWNumericArray)x_num1, (MWNumericArray)y_num1, (MWNumericArray)zArr.ToArray());

  10、OK!


    應用matlab第一次加載時運行還是比較慢的,但計算確實比較方便。在運行的時候可以利用多線程或ajax技術,提高用戶界面友好性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章