在数学分析工具方面,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分析一样,只是其分析过程实现了集成、自动化。