Matlab.Net混编

来源:互联网 发布:移动硬盘排名知乎 编辑:程序博客网 时间:2024/04/30 17:59
1.什么是Matlab.Net技术
这是第一次的比较正式的场合提出这一概念Matlab.Net技术,我将他作为Matlab和.Net混合编程技术的简称。注意Matlab支持Java,C/C++的混合编程,我们这里指的是与.NET技术的混合编程(常见的.NET编程平台语言有C#,VB.Net,C++.Net)。
2.为什么要用Matlab.Net技术
1)Matlab拥有大量的科学计算函数库,可以提供给.net直接使用;
2)Matlab拥有自己的编译器和开发平台,语法简单,容易掌握;

3)Matlab作为科研项目和数学计算的首选平台,已经有大量的现成资源;
4)matlab拥有大量的行业工具箱,如控制,图像处理,数学计算等等,可以很方便开发各类专业程序。C#作为一个软件开发平台,没有提供这些丰富的工具箱函数,虽然有开源类库支持,但也有限,并且学习曲线大。不适合科研人员。
总之,Matlab.net可以提高生产力,提高开发效率和增加代码的重复使用。
3.使用Matlab.Net技术的环境
Matlab.Net技术在Matlab 2012a中支持.NET 4.0。
Matlab.Net的开发环境是:Matlab(2006a及以上版本)+.Net 2.0/3.0/3.5/4.0(版本支持情况详见Matlab Builder NE工具箱的 Realease Notes)+ Visual Studio 2005/2008/2010,建议采用Matlab 2012a + .Net 4.0。
客户端运行环境:Matlab MCR(和开发版本Matlab 对应)+.Net 环境
重要提示:采用Matlab.Net技术,在服务器端(Web)或者客户端(WinForm)都必须安装 MCR(2012a大约300M)。
4.Matlab.Net开发人员必备条件
这一条真的很重要。先说必备条件:
1.基本的Matlab语法要懂。最好有一定的Matlab编程经验。
注:没有开发经验,调试错误比较困难,找不出问题。曾经有一个朋友写了一个函数,我说你测试一下,他居然不懂怎么在Matlab中测试他写好的函数。这样的同学混编能不出问题吗,再好的书和教程也学不会啊,即使学会了,能深入多久?
2.既然是Matlab.Net开发,那.NET下的编程语言,必须会一门,最好有一定的开发经验。
注:最终是需要用到.NET中去的,那么基本的.NET开发环境熟练使用不,断点调试,基本语法懂不懂?这些是基本的,但很多做混编的同学真的不一定都懂。上次碰到一个女研究生,也是做混编,编译不了。我叫他检查下.NET Framework安装了对应的版本没有,她问我,“什么是.NET Framework?”,你说我是什么心情?真心想学东西,这些都必须懂啊。这些问题叫我怎么教你,怎么指导你。现在社会,大家都很忙,一味的索取,没有贡献是不行的。我也不可能有那么多时间给你们做这些基本的指导。所以才有了这份指南。
3.对软件开发过程、程序运行过程、算法有基本了解。
注:这一条是综合性质的。说实话,达到要求的人太少。因为现在大部分做混编的人都是为了混毕业,做毕业设计或者课题。基本知识参差不齐,解决问题就闪人了,也不会帮助他人,也不会留下什么,来无影,去无踪。真正想学混编,想在以后长期使用的朋友,软件开发的基本知识还是要加强。因为混编和其他程序一样,不是一帆风顺的,也有很多错误,到你焦头烂额的时候,有时候找1个小错误就得好几天,人都快逼疯了。这就是考验你基本功底的时候。强大的综合素质能力和编程习惯可以减少你犯错的几率,或者提高你的编程效率。
5.确信你真的有必要用Matlab.Net吗?
能够准确搞清楚这个问题的真正意义的人不多,为什么,因为长期做这个的人不多。或者说对2个平台其中任意一种精通的不多。
1.用Matlab混编实现的功能,在.NET平台下有没有?
注:根据我的不完全统计,学生中,有大约30%的Matlab.Net新手用混编的原因是需要画图。每次我很痛苦的回答,.Net下有很漂亮,很完善的绘图组件,比如MSChart,还有开源的。为啥为了一个画图就去用Matlab,这不是杀鸡用牛刀么?想想根本原因还是在于开发者对.NET平台不够精通,稍微懂一点的人,有过开发经验,Google,百度搜一下,开源.NET绘图控件,出来的很多,也有很完善的例子,帮助文档。
2.不用混编行不行?或者只用其中1个平台。
注:.NET平台下也有大量的开源类库,如数学类库Math.Net,所有有些矩阵计算,方程求解、微积分、概率论等基本的数学操作,就没必要用Matlab了。如Aforge.Net也是开源项目,里面包括了图像处理,神经网络等工具箱。还有很多类似的,只是你不知道而已。甚至你需要,我可以提供一些高性能的商业性数学类库。可以说对大部分人来说,任何一个平台,都可以满足你所有的需求。“只有你想不到,没有你做不到”这对大部分人来说,不是一句空话。能只用1个平台,最好不过。
另外,很多人用,NET是由于做UI方便,殊不知,Matlab也有很完善的GUI开发工具。也很容易做出漂亮的界面。为什么没人用呢?有人是不知道,有人的确不需要,但如果你对Matlab稍微了解多一点,任何一本书都会介绍的。如果你会Matlab,同样一个平台能够完成的事情,为什么要用2个呢。当然客户要求除外。
3.客户要求,功能和环境能否满足。 
注:这一点要特别强调,客户是否能够接受安装MCR这个庞然大物,前面已经说过,这是必须的。另外Matlab的工具箱中,并不是所有的都能混编,如果涉及到不能混编的工具箱,有没有替代办法,这都要搞清楚。很多人问神经网络行不行(至少20%)的人问过,当前以前不行,但是在Matlab 2012a中,官方文件已经列出来了,支持sim,不支持train。同样列举几个不能用于混编环境的工具箱:
Filter Design HDL Coder 
Model-Based Calibration Toolbox   
Robust Control Toolbox    
SimBiology  
Spreadsheet Link EX (for Microsoft Excel) 
Symbolic Math Toolbox  (所以符号计算不支持哦) 
SystemTest
6.Matlab混合编程三部曲
如果你仔细看过上面的内容,有一定的基础,那么可以试一试了,具体例子可以看Matlab Builder NE的帮助文件哦。
1.在.NET中编写好M函数(使用的函数要可编译);
2.打开deploytool工具,选择.NET Assembly,编译为dll文件;    
3.建立C#.Net项目,添加生成的dll文件引用,利用智能提示调用方法,注意类型转换和结果。
7.Matlab混合编程注意事项
    目前位置,Matlab与.Net混合编程的技术资料书籍基本没有,有一本国外的,没见过样子,RMB要200多元,没舍得买。最全的资料也就是Matlab Builder NE工具箱的帮助了。要养成习惯,看帮助。