最近在做乙個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的訪問物件時,出現:「***的型別初始值設定項引發異常。」,完全不理解是什麼原因,被耽擱了大量時間,直到安裝了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技術,提高使用者介面友好性。
c matlab 混合程式設計
混編終是乙個繞不開的石頭鴨 so do it!我的版本是 vs2017 matlab2016a matlab中的程式處理 1.需要將主程式寫為函式形式,例如我這個主程式matdll,形參三個 從c 獲取,包括兩個c char 轉為matlab char,乙個float 轉為三維陣列 返回值乙個 返回...
Linux下C ,matlab混合程式設計
使用python呼叫c 呼叫matlab生成的動態庫檔案 1 設定編譯器為gcc,在matlab 命令列依次執行命令mex setup和mbuild setup.2 編寫matlab指令碼 3 生成動態庫檔案。mcc w cpplib libmyfunc t link lib myfunc.m c ...
linux系統中的C MATLAB混合程式設計
我研究的是影象盲去模糊演算法,因為前期msdecomp預處理是在linux下用c 寫成的,而後面的優化過程均是用matlab寫成的,因此我需要將這兩部分的 融合在一起。這裡記錄的是我在虛擬機器中在linux系統下實現matlab呼叫c 函式的過程。首先安裝vmware,並選擇系統檔案為ubuntu1...