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

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

上述方式的一个缺点是,当MATLAB执行耗时或者出错时,不易排查,因为调用者仅能获取到执行结果,无法获取到MATLAB脚本中的debug、info等信息,因此适用于算法成熟、固定的场景。在算法灵活多变或者不成熟的情况下,跟踪脚本执行无疑是重要的,此时可采用方式二,即调用MATLAB命令行执行。

调用MATLAB命令行执行,MATLAB将启动应用程序,然后执行脚本,执行过程中的输出信息可以输出到命令窗口中,类似于分析人员执行使用MATLAB分析一样,只是其分析过程实现了集成、自动化。

C#.Net与MATLAB集成的更多相关文章

  1. 《量化投资:以MATLAB为工具》连载(2)基础篇-N分钟学会MATLAB(中)

    http://www.matlabsky.com/thread-43937-1-1.html   <量化投资:以MATLAB为工具>连载(3)基础篇-N分钟学会MATLAB(下)     ...

  2. Matlab图像处理入门

    1. Matlab基础 1.1     数据格式 Matlab默认的数据格式为双精度浮点数的矩阵或数组,同时支持其它数据类型.Matlab将单变量看作1´1的数组.Matlab支持的数据类型如下: 索 ...

  3. MATLAB学习笔记(二)——主要是MATLAB的矩阵知识

    PS:主要是讲解矩阵的相应的实现方法,其实MATLAB的很大一部分的优势,就是集成了矩阵级别的运算,并以此为特点,可以进行多维空间上的验证. 让我们懂得了原来线性代数如此有用= - =. (一)MAT ...

  4. 【数学建模】MATLAB语法

    一.向量.矩阵的表示和使用 format long  %小数很多format short %默认4位小数format rat %显示最近的分数format short e %指数格式的数 尾数多少 e ...

  5. BASK、BFSK、BPSK调制方法的Matlab程序实现

    %以下为手动编程方法,也可调用matlab集成函数dmod,具体调制方式见doc. n = [0:0.01:5.99]; x1 = ones(1,100); x2 = zeros(1,100); x3 ...

  6. Python标准库、第三方库和外部工具汇总

    导读:Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据连 ...

  7. Python 标准库、第三方库

    Python 标准库.第三方库 Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具.这些库可用于文件读写 ...

  8. 140种Python标准库、第三方库和外部工具

    导读:Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具. 这些库可用于文件读写.网络抓取和解析.数据连 ...

  9. matlab 下的集成学习工具箱

    matlab 当前支持的弱学习器(weak learners)类型分别为: 'Discriminant' 'knn' 'tree' 可通过 templateTree 定义: 1. fitcensemb ...

随机推荐

  1. ip完整验证详情

    不想跳坑就看一下 之前一直不太会写正则表达式,很多要用到正则表达式的都直接百度,像上次要用正则表达式验证是否是合法的ip地址,然后就上网找,结果就是没找到一个对的,今天就为大家贡献一下,写个对的,并做 ...

  2. mybatis xml中使用where 条件中的in方法

    <select id="queryCount" resultType="cn.bnsr.edu_yun.view.FileView"> SELECT ...

  3. Python爬虫之爬取慕课网课程评分

    BS是什么? BeautifulSoup是一个基于标签的文本解析工具.可以根据标签提取想要的内容,很适合处理html和xml这类语言文本.如果你希望了解更多关于BS的介绍和用法,请看Beautiful ...

  4. 深度学习系列 Part(3)

    这是<GPU学习深度学习>系列文章的第三篇,主要是接着上一讲提到的如何自己构建深度神经网络框架中的功能模块,进一步详细介绍 Tensorflow 中 Keras 工具包提供的几种深度神经网 ...

  5. android版火狐调试器

    Remotely debugging Firefox for Android 使用火狐开发工具可以在桌面上进行远程代码的调试(FF26以上) 具体使用参考: https://developer.moz ...

  6. mouseover事件mouseenter事件

    1. mouseover:会在鼠标进入该元素或者该元素的子元素时触发 mouseenter:只在鼠标进入该元素时触发 mouseout:在鼠标移出该元素或则该元素的子元素时触发 mouseleave: ...

  7. 离线缓存 manifest

    程序的离线缓存由一个叫做manifest的文本文件控制,把需要离线缓存的文件列在里面即可,这个列表还可以控制需要缓存的情况,甚至当用户从缓存地址进入到没有缓存的地址应该显示什么 当浏览器下载解析了ma ...

  8. 自定义Base16加密

                                                                                              自定义Base16加 ...

  9. "use strict"详解

    参考:http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html 目的: 消除JavaScript语法的一些不合理.不严谨之处 ...

  10. css定位讲解

    定位分三种:相对定位,绝对定位,固定定位;     相对定位:position:relatve;     绝对定位:position:absolute; 固定定位:position:fixed; 一, ...