文章出處

在數學分析工具方面,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分析一樣,只是其分析過程實現了集成、自動化。

 

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()