前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#.Net与MATLAB集成

C#.Net与MATLAB集成

作者头像
用户1637609
发布2018-04-12 15:39:51
1.4K0
发布2018-04-12 15:39:51
举报
文章被收录于专栏:马洪彪马洪彪

在数学分析工具方面,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程序不反馈,最终将输出结果反馈给调用者。

代码语言:javascript
复制
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分析一样,只是其分析过程实现了集成、自动化。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-12-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档