C#.Net與MATLAB整合

來源:互聯網
上載者:User

標籤:解決   mem   自動化   dcom   更新   pre   情況下   控制   tty   

在數學分析工具方面,MATLAB無疑是佼佼者,除了作為軟體工具外,MATLAB的自訂程式設計語言以及混合編程的支援,使其可以與Python、R之類數學分析語言媲美。尤其是在一些傳統領域的研究,由於其研究領域的專業性,研究人員一般是該專業科班出身,而電腦則是副業,因此MATLAB的應用要遠比Python和R廣泛。

MATLAB擁有眾多的演算法包,.Net平台下的F#是用於資料分析的語言,但相比較而言,MATLAB的演算法更多,計算效率更高,而且MATLAB的繪圖能力很強;另一方面,MATLAB在傳統的UI介面、程式功能控制、系統軟體整合等方面略遜,因此將C# WinForm等與MATLAB結合起來,實現高效、便捷、整合的數學分析是一個很好的解決方案,而MATLAB的混合編程則可以支援該方案的實現。

MATLAB的混合編程,即將MATLAB平台(軟體、計算引擎、DCOM服務、命令列介面等)與C#.Net等平台結合起來,分別負責某部分功能,相互傳遞資料和命令,共同實現資料分析。MATLAB與C#.Net實現混合編程的方式有兩種,一種是將MATLAB指令碼編譯為.Net程式集(dll),然後C#.Net引用該程式集實現資料分析;另一種是C#調用MATLAB執行MATLAB指令碼(m檔案),也就是俗稱使用MATLAB引擎的方式。

兩種整合方式各有優缺點,例如編譯為.Net程式集,受限於.Net程式集版本等,且需要編譯後使用,不利於版本更新;直接調用MATLAB引擎,則需要安裝MATLAB軟體。選擇何種整合模式,可根據具體需求、情境確定。網上有不少關於方案一的說明,本帖就方案二的實現做一概要說明。

MATLAB平台提供了DCOM服務、命令列介面兩種介面方式,網上一般可以看到DCOM服務的方式,該方式可以直接將命令字串傳遞給MATLAB執行個體(根據MATLAB類型反射建立MATLAB執行個體),使用其Excute方法執行代碼,並可以擷取到傳回值。次方法調用時,MATLAB將DCOM服務提供給調用者,因此執行過程和結果MATLAB程式不反饋,最終將輸出結果反饋給調用者。

System.Type oType = System.Type.GetTypeFromProgID("Matlab.Application"); object ostr = System.Activator.CreateInstance(oType); object results = oType.InvokeMember("Execute", BindingFlags.InvokeMethod, null, ostr, new object[] { data });

上述方式的一個缺點是,當MATLAB執行耗時或者出錯時,不易排查,因為調用者僅能擷取到執行結果,無法擷取到MATLAB指令碼中的debug、info等資訊,因此適用於演算法成熟、固定的情境。在演算法靈活多變或者不成熟的情況下,跟蹤指令碼執行無疑是重要的,此時可採用方式二,即調用MATLAB命令列執行。

調用MATLAB命令列執行,MATLAB將啟動應用程式,然後執行指令碼,執行過程中的輸出資訊可以輸出到命令視窗中,類似於分析人員執行使用MATLAB分析一樣,只是其分析過程實現了整合、自動化。

 

 

C#.Net與MATLAB整合

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.