本文转自头条号 工控自动化联盟
有些程序员会鄙视MATLAB,甚至认为MATLAB不是一门语言,到底是为什么,是因为MATLAB容易学吗?
一、 1号大神告诉你为什么:
鄙视是无知啊。用MATLAB的,基本上不是程序员,根本不鸟这事。
对程序员来说,代码是产品,这个产品要被执行成百上千次,所以必须考虑代码的质量和效率。
对用MATLAB的人来说,代码是工具,代码的执行结果才是产品。只要有结果,前面怎么来的当然是越简单、越省时间最好。代码只需要执行几次或几十次,讨论执行效率的意义很小,编程效率才是首要的。
打个比方,产品设计中要估计一个参数值,但是这个参数没那么好算。
若按程序员的思维,那就是整理逻辑、确定算法、写程序、优化、测试。编程花一周,执行1秒钟得到结果。
按工程师的思维,老子用MATLAB写个简单的仿真模型,拿所有可能的参数都仿一遍。编程1小时,执行1小时得到结果。后面那1小时还不需要我干活,可以顺便写个文档、回个邮件什么的。比上面精心设计一个程序有效率多了。
反过来说,如果也用其他语言按上面的参数扫描法仿真呢?当然编程效率也能提高,但是MATLAB里太多函数库是现成的,根本不需要你写;而用普通的高级语言,你得从头造轮子。Python还好,但那也是因为python在科学计算方面全面仿MATLAB。
你跟我说MATLAB太随意、太吃内存、太慢,我不在乎。它可以省我1周的时间啊。
二、大神2给你讲解
走歪了的科研狗来答一发,靠matlab入编程的门,进行数据分析,现在已经转到python瞎捣鼓。
打个比方,matlab是一个偏科很严重的工科特长生,但程序员更喜欢各方面均衡发展的全科生。
程序员的工作是啥?写爬虫,做软件,开发游戏,做网站搭服务器等等,matlab能实现吗?其实部分功能是可以的,但是编程体验和用户体验比较差。
Matlab的长处在于,控制系统设计与分析、金融工业建模和仿真模拟等。这里有个匿名用户的更专业的回答来说明这一点,给大佬打call!!匿名用户:为什么很多程序员会鄙视MATLAB?这些功能如果让程序员来用其他编程语言能实现吗?显然是可以的,但是投入的时间成本显然比直接学习matlab仿真模拟工具箱要大得多。重复造轮子并不好玩,而且造出来的轮子还不一定比matlab好用。
三、大神3给你讲解
脱离matlab坑的原因之一,就是要把我们开发的一个新算法做成一个软件推广应用,一开始用matlab的GUI实现了这个软件,拿着m文件给导师,被反驳:万一别人没有matlab怎么运行?那就编译成exe呗,然后编译完,文件大小直逼1GB,相当于把matlab的内核都编进去了
matlab自学小白,用的是matlab自带的应用程序打包功能,如有更高级的编译办法请大佬指正QWQ
用之前还要安装十多分钟。。。结果打开一看是个很基本的功能界面,用户体验极差。
做了模块m文件转成dll给c++调用,没有matlab的环境要安装打包的matlab compiler runtime然后各种设置,加载的方式变量定义啥的都要改变,确实比较麻烦,但是确实写m只用了几十行,c++下估计得好几百行,另外m转c代码的话对版本还有要求,转的代码还不尽人意,不知道有没有只打包所需lib和h文件的方法
后来用python重新实现,代码量减少了一半不说,编译完了之后的exe只有20MB。
四、大神4讲解
1. 一般来说,做科研模拟仿真的确很难超越Matlab。能有Matlab就一定会用,节省时间、而且算法可靠。我只遇到过一次做一个激光场分布的计算,没有用Matlab而直接用C++,只是因为当时有一台IBM的新机器,是128位的特殊Unix系统。就直接用源码编译运行。大概算了一个星期左右就出结果,还是很快的。当时一台3、5万的工作站要跑两三个月也未必能算完;
2. 我们学校Matlab集群应该部署很多年了。百度“东南大学+Matlab”即可找到使用方法;
3. 做科研,Matlab是很重要,但一些C与C++的基础编程也很重要。不是能编写GUI或者Web就是编程。
其实这么多年来的新进研究生,在编程能力上的自我评价在改变。以往都说自己能够调试多少行代码,熟悉哪些算法。现在来的研究生,说自己编程能力强,只是会写GUI,或者能弄个网站,写一点javascript。这与我们在科研工作中的编程是差的比较远的。如何做插值,如何保证没有累积误差,如何找到合适的神经网络结构与避免局部最优,这些才是我们需要研讨与培养的编程能力。
五、大神5讲解
1.MATLAB 是一个研究工具而不算一个构建工具。如果将其与C,C++,JAVA等做对比是不合适的。我们会比较示波器与计算机吗?也因为这样,许多程序员可能不会理解MATLAB的效用。
2.MATLAB 对于主机性能要求还是比较高的。我们科研中一般会将MATLAB部署在最好的工作站上,然后共享使用。这与服务器类似。一般机器上跑MATLAB,特别是做上规模的模拟是很难的。
3.研究MATLAB的圈子比较小。目前高校研究生或许在做项目时候会用MATLAB,但研讨计算机编程技术大多在C,JAVA等。主要原因之一是就业。而一些高层次MATLAB编程,大都是博士阶段。其实仿真中,每个环境用什么样的计算方法,都是要细致研究,否则会浪费很多的时间。这样的研究圈子很小,用电邮研讨会更多一点。
我想用好MATLAB是需要环境的,我有两点想法:
1. MATLAB 很考验计算资源,需要用足够强大的机器才能发挥其作用。目前我们学校与mathwork公司签订了大客户合同。校园内部免费使用MATLAB,同时在一个大计算机集群上部署了400个开放用例,校内师生可以做大型模拟。
2. 需要做一些深度高阶的培训。目前市面上的MATLAB还比较初级。一些高阶使用,比如用GPU加速计算方面,都没有涉及。有限元方面,人工神经网络方面都还是N年前的资料。需要更多高手做点培训。
我还是很感谢能有MATLAB这样的工具使用,应该说MATLAB是一个软示波器,能够助力我国基础研究发展。只有用好它,没有什么鄙视的。