algorithmlixuan 2020-06-12
近日,哈工大又上了一波热搜,原因是哈工大学生收到「工科神器」MATLAB正版软件被取消激活的通知,显示相关授权已被中止。同样被禁用的还有哈工程学生。
MATLAB是MathWorks公司的,是世界上最强大的统计编程语言之一。很多高校都购买了正版,这一波幺蛾子正是因为实体清单来的。
Mathworks随后回应称,刚接到通知,根据实体清单,无法再提供服务。
说到具体影响,很多同学在说用不了正版用盗版就行了。
但事实上,对学术界的影响还是很大的。毕竟即便你用盗版的MATLAB完成了计算,也无法用计算结果来发表论文。
工程制造方面,包括汽车、电气、电子信息等,MATLAB都是最基础的计算仿真工具,国内现行没有可以完全覆盖MATLAB工作台生态的软件。现今禁令的对象只是两所高校的学生,如果对象扩展到其他的高校,乃至国内工程师的话,许许多多科研人员的科研将很难开展,工程师也将面临失业。
往深了说,禁用MATLAB的行为,展示了美国决定保护技术知识产权的决心。其实更应该解决的是软件的依赖问题。正是因为这种根本性软件的依赖,才有了诸多卡脖子的境遇。
就像探索科技(techsugar)分析师王树一在文章中写道,MATLAB被禁,不代表开源的Python和Julia就可以随便用,甚至祖宗辈的C语言也不一定安全。就像Arm新技术被禁止华为使用,不代表华为就能自由使用所谓开源的RISC-V,开源技术的主导者仍然是美国。
「被禁用Matlab——如果牛顿定律是美国人发明并申请专利的,估计都要一并被禁用——之后,我们是要认真考虑,是否从底层构建一套非美系开发工具链,从语言到编译器、仿真器,不要依赖于开源软件,或者幻想专利过期就可以随便用,如同RISC-V的例子,只要是美国技术,总会找到方法禁止你用。毕竟美国人疯起来,哥伦布也挡不住。」
兵来将挡,水来土掩。
那么接下来,我们来看看如何搭建工作环境来替代MATLAB的功能呢?
由于机器学习大热,Python在近两年获得了许多开发人员的青睐。而语言本身的逐步完善也给开发者很好的编程体验。以Python为例,把IDE的需求分为两种场景:普通编程和动态编程。
普通编程,就不得不提到Spyder——一个模仿「MATLAB」的简单集成开发环境。Spyder的设计高度接近MATLAB,方便开发者观察和修改数组的值。界面由许多窗格构成:
如果是MATLAB开发者,看到Spyder的界面一定会感到无比亲切。总之,在普通编程的领域,Spyder可以提供大部分的功能,同时也更易于上手。
动态编程领域,Jupyter Notebook的人气非常之高。就开发者使用感受而言,Jupter确实提供了很良好的开发体验。
一方面,它的文档集成了所有工作信息,并且导入文件重新运行也很方便。另一方面,Jupyter引入了Cell,每个实验可以只跑一小个Cell里的代码,这无疑是开发者的福音。直接看到小段代码的运行结果而不被冗杂的工作所拖累,大大提高了开发效率。
其实就软件开发而言,MATLAB最大的优势一定是矩阵运算和仿真。MATLAB的全称是Matrix Lab,翻译成中文为矩阵实验室,因此它的基本结构是数组。
但Python为了解决数组数组运算也花了不少功夫。
NumPy可以被称作MATLAB数组运算的替代品,它的种种操作都高度「模仿」了MATLAB的操作。NumPy支持持高阶大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
除了NumPy,Python还有一个库叫做SciPy。这个库提供了一些高阶运算功能,它的定位是一个开源的Python算法库和数学工具包。
SciPy包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
绘图方面,matplotlib帮了大忙。matplotlib是Python编程语言及其数值数学扩展包 NumPy的可视化操作界面。它利用了通用的图形用户界面工具包,如Tkinter, wxPython, Qt或GTK+。
matplotlib在绘图方面还是很受Python开发者欢迎的,甚至在绘图效果方面比MATLAB更加优秀,这里就有一个绘图对比,可以看到matplotlib的绘图更为清晰。
当然Python还有很多库也提供了数值分析的帮助,例如Pandas,Blaze等。
Simulink是MATLAB生态中一个非常重要的「特色」。它是用于动态系统和嵌入式系统的多领域模拟和基于模型的设计工具,在各个领域都为工程师提供了很大的帮助。
Python中暂时没有官方的文档和相应的库来替代Simulink的功能,其他语言中也很难找到类似的仿真环境。
但是,Github上有这样一个开源的工具叫做Simupy,看到这个名字开发者大概就已经恍然大悟了,这确实是一个意图替代Simulink的Python仿品。
Github的介绍中提到,Simupy是用于仿真互连的动态系统模型的框架,并提供了一个基于Python的开源工具,该工具可用于基于模型和系统的设计和仿真工作流程中。
如果Python想在主流语言上站稳脚跟,发布官方的Simupy应该也只是时间的问题。总的来说,讨论MATLAB禁用的问题时,Simulink确实很难去寻找替代品。
吴恩达在自己的机器学习课程中也推荐过可以替代MATLAB的Octave。
也有专家表示,「Octave本来就是MATLAB强有力的竞争品,捏着鼻子大部分场景应该能替代。」
Octave界面,和MATLAB很像,因此对于换软件的开发者来说,极易上手,几乎是保留了原本的工作台生态。
在费用上,Octave占了很大的优势。Octave 完全免费且开源,MATLAB是商业软件,价格很昂贵。
价格昂贵意味着完善的服务,大量的资源。但同时也意味着:需要庞大的空间。在这方面,Octave的安装程序占用空间和MATLAB比可谓是「沧海一粟」。许许多多工科生不得不卸载MATLAB的主要原因还是为了内存空间。
因此,对于需要做深度科学研究的学者来讲,完整的丰富的MATLAB库提供了非常大的帮助。而对于普通的科研小白,或许Octave也是个不错的选择。
在语法和绘图功能方面,Octave和MATLAB极其类似。语法几乎是完全迁移,并且增添了许多人性化的设计。绘图功能也并不弱于MATLAB,甚至输出格式更多,公式更强大。有开发者反应Octave绘图速度要比MATLAB慢一些。
也有知乎网友激动地表示,国产软件已经在路上了。半年内实现MATLAB科学计算与图形显示的70%;1 年内100%全部实现;3年内完全实现Simulink。
毕竟MATLAB的源代码是用三种不同的语言编写的,即C,C + + 和 Java。禁了MATLAB不假,我们自己写!
总体来说,MATLAB的生态庞大,确实功能齐全。从1984年诞生到现在,已经有36年的历史了,比Python还要早7年。
2020年6月份TIOBE编程社区最新发布的编程语言排行榜上看:
Python位居第三位,MATLAB位列第15。
如果禁用持续下去,转战Python将是一个不错的选择,除了Simulink之外,Python其实可以解决绝大部分MATLAB的应用问题,Simulink也有其他的替代方案,比如控制系统仿真用MSC Easy5等等。
科学计算方面,还可以用Octave,Julia,R等替代。