超级大本营军事论坛

 找回密码
 成为超大会员

QQ登录

只需一步,快速开始

查看: 524|回复: 0
收起左侧

[军事科普] 给工业党浇桶冷水。科学家Matlab被禁,就能换到Python?我看未必能行

[复制链接]
CDer:000563872
发表于 2020-06-17 01:18 | 显示全部楼层 |阅读模式

更多精彩专业军事内容,期待你的加入!

您需要 登录 才可以下载或查看,没有帐号?成为超大会员

x
本帖最后由 biller 于 2020-06-17 01:30 编辑

虽说咱现在不用matlab开发了(准确的说是没有模型要进行数值计算测试,但matlab一定能用来开发一些计算上的应用)。我不是学CS的,但是因为种种原因,对Matlab脚本,Matlab程序和Python2/3都使用过,或者在使用。我认为可以给不从事工科的“工业党”们一点思考。
要是您两种脚本语言都熟悉,您可直接略过此文。在此也不放什么图片,单纯谈谈个人对两个语言和matlab软件本体的使用印象,以及不幸要放弃MATLAB的学生们的对策,和这个事情的一些前因后果(之后也许可以补上一下代码)
Matlab主要面向的是本科和研究生,在工科领域,21世纪环境下,毫无疑问那些现实中的案例是没办法手工计算的,所以我们就需要学生们自己动手用计算机算
但是我们大学里教的是C/C++,这两个东西别说一般工科生,就是一般的程序员也搞不定
殊不知,那些在stack overflow,X乎的C/C++板块上风评巨高的答主,不是某个厂的TD,也应该是高级SD了。进入这个世纪的第二个十年,C++似乎突然睡醒,各个三五年增加一堆新的标准,现在C++ 20大家也已经都看到了……您要是Java这样的相对“人性化”一点的语言都玩不来,那C++最好还是……所以说,用C++写学生的科学计算程序,那是非常不现实的。

但是在matlab社区,能及时给你答案的,很可能就是和你的导师,学长一个级别的普通人物。

>结论:我说我能在本帖篇幅相同的帖子内教你入门MATLAB,是真的。但是我要说能在本帖篇幅相同的帖子内教你入门C/C++,是胡扯。

Matlab一开始是美国新墨西哥大学一个教授用Fortran写的小型矩阵计算工具,用来给学生练习的。用这个小工具,稿纸上算的昏天黑地的大矩阵运算,包括矩阵乘除法,转置,提取,求秩,求行列式,求特征根等运算速度大幅提高,学生的学习效率就提高了。这样一来,依赖线性代数的学科,学生的理解能力就加强了。
单个的实数可以看出一行一列矩阵,对其运算当然也不在话下。很快,MATLAB就成了一个能搞定本科和研究生级别数学数值计算的神器。

这还要加上matlab脚本语言和其应用程序的几个很强大的特性

从最简单的开始:
在70年代就可以支持不事先声明就可以使用变量的做法。
矩阵和单个实数.复数无需区分。而在C/C++里,要定义矩阵就有点麻烦了。如果你事先不知道矩阵的大小,那么你利用数组去实现的话是容易产生索引溢出的问题的。当然,你能说,STL弄个Vector进来。。但是拜托,STL是什么时候的事情?
多项式求值。这一点直接解放了高次函数的求值计算。同期用其他语言实现这一点。。。恐怕这位学生就不用完成本专业的课了。选门CS的课交作业也许已经能混个通过了。
绘图。不用说了,用Excel的都知道。在10年后的MATLAB对GUI做了进一步的改进,绘图操作可以用快捷图标完成,选项可比Excel多
符号运算。

从应用程序的角度看,在图形界面上,Matlab始终提供了存储的所有使用过的矩阵和矩阵的具体数值二维图表(s),学生可以逐步调试程序,逐步观察存储区中所使用矩阵每个元素的变化情况。这个功能在上个世纪80年代左右的环境下及其领先。试想,上个世纪80年代我国的大学生在用什么推演大矩阵运算呢?
Matlab支持用户把自己写的函数单独保存下来,作为单独的函数文件。文件可以在学生之间流动,一个人写了函数,另一个人直接就能用。和C/C++对比,省略了Library这些乱七八糟的东西。C/C++程序开发之间一般不share .c/.cpp和.h文件。
以上这些还有很多。

一来二去,经过几十年发展,matlab开始在科研机构里拥有越来越高的份额。随着更多CS和EE大牛的涌入,更多的m文件开始承载着一些更加专业的功能。比方说图像的,语音的,视频的,力学的,能源热力的,航空的,甚至还有人工智能的……
各个工具包开始和其对应的行业齐头并进,在商用范围内自然是企业自研程序或者使用专用的仿真软件,但是承担造血功能的学术和科研机构里,matlab完全承担了造血功能。

1984年开始引入的Simulink更加扩展了MATLAB的用途,将matlab的计算功能扩展为时间段上的计算。可以进行动态的仿真。电路,电磁,热能,空气动力均可以在Simulink上完成实时的仿真,他加深了学生对于信号和系统动态变化的理解。就拿信号来说把,在黑板上苦哈哈推演复变函数和积分变换才算出来的零极点图,在Simulink里就是实时可见可变的信号赋值,信号随着时间的变化状态一目了然。其次是所有数据均可以导出,而商用的仿真软件也有matlab数据格式的接口。想要变现在技术上没有难度

这个大杀器,不要说现在用C/C++做起来不好弄,就是用Python,重新造个轮子,也够你忙活几个工作日了。这还只是一个信号上的仿真,那要算上热力,流体,电路等等的仿真,再造新的轮子,那还不要命了?

结论:当年大家都在被C/C++折腾,而Java又忙于搞定各平台兼容的年代里,突然弄出一个可以轻易上手的全能冠军,大家都服了。

-----------------------------
以上就是本次事件的背景

软件的进步和科研机构里的份额是螺旋上升,互相促进的。到了本世纪初,我国工业信息化已然要使用欧美标准的前提下,我国的大学里,Matlab当然不让成为工科各学科数字化的标配工具。一个普通本科生,一个学科如果能掌握matlab,对其他不能掌握matlab的学术来说拥有空前绝后的优势,这种优势大到了能抵消其他不会matlab的但是课本掌握很好的学生的成绩的地步。会matlab可以发论文,找工作升学都由帮助。各个大学里工科专业会matlab的学生多,往往这个大学在该学科上也就越强。考虑到第一个十年一部分大学比较水,在那个环境下,能超出教纲要求,掌握matlab技能,可以说是直接和同期的欧美日大学生站在了同一个check point上。

我自己在本科时候(当年也是国内TOP50),matlab用的6的,每100个人里面能有15到20个,用的一般般的,大概也有30到40个人左右,剩下那55或者40个人基本就玩不转了。或者说根本没办反和计算机和平共处一室。而本校作为副业的二本三本学员的学生毕业设计的基本要求是能跑我们写出来的脚本就行。很不幸,当年我设计的是一个结构比较诡异的脚本,循环嵌套层深,没注释,调用外部m文件多,外部函数文件弄了一堆和C风格不一样的函数重载。还给整个系统增加了一个GUI,导致一些同学直到答辩都没能搞懂我的程序是怎么运行而被迫多次答辩...

当然,华约北约那些牛校里这个比例毫无疑问是更大的。这也是他们是C9我们不是C9的原因吧
-----------------------------

Python
我第一次接触python其实比我接触Matlab还早。你应该已经猜到了,不是为了搞原谅宝,而是为了改战地2..这个游戏的脚本是python编写的。
到了后来,为了做一个嵌入式系统的配套实验,正式的用Python开发遥控车和遥控器。
大学以后我们才对高级语言和脚本语言有了正规的学习和理解,当然很多都是自学。考研,哦不,是考魔法师后,Python的运用虽然不如C++和C#,但是使用次数还是增加了。一是因为要给项目写一些辅助性的工具,而是觉得这玩意儿挺有意思。
不需要再git里翻江倒海,一个pip就能把最时髦的工具搞到自己的电脑上。而且用起来又是那么简单,别人造的轮子又快又好,直接拿来用即可。举例来说,Python的人脸识别库,如果你要用matlab写的话,那可真是遭殃,因为你不太可能找到matlab里别人造的人脸识别的轮子,不管是学生还是老师,都不会让你能走这个捷径的。但是python不一样,直接有。您应该已经注意到了,人脸识别是模式识别的一个特例,而模式识别又和近几年特别火的人工智能有很大交集。Python除了处理海量数据效率高以外,最大的一个亮点:人工智能+机器学习就闪亮登场了。Python搞个人脸识别实验多简单?你今天早上看到我的帖子,中午配置完python环境,下午接上摄像头,找到对应的轮子,吃晚饭之前就能看到程序能标出镜头前所有人脸。

Python有一个特别不好的特性:他的脚本结构和和缩进牢牢绑定的。缩进控制了脚本的结构。假如你头昏眼花,漏掉了一个缩进,而假如你这个漏掉的缩进还埋在嵌套的脚本里面,那你可以有的查了....一些解释器不区别Tab和空格带来的缩进,尽管在一定长度上他们应该等效,但他们的二进制表示不同,解释器可能不认。如果你没有很良好的塔码习惯,你百分之百要在Python上吃大亏。而本人,就不喜欢对齐缩进.... ,实在是习惯C全家桶和VS的intellisense了..

同时,你也应该知道,python的默认console和GUI都十分简陋。没有Matlab那样的数据窗格和历史记录,也没有众多可以输入辅助命令的快捷图标,甚至在console下使用python保存文件都需要敲代码。Python默认的数据格式也不是矩阵形势。python要进行矩阵计算,需要numpy包。而即便有numpy包,缺乏必要的显示辅助界面,无疑违背了给学生提供快捷工具的初衷。另外,没有专门的IDE, Python文件变多,变长以后,管理会比较困难。而收费的IDE价格可不便宜。

Python进行科学计算和仿真,是不适合大众用户(在高校学生中)的。Python整个生态都不注重原生GUI工具和GUI输出,能搞完好Python的学生比例比Matlab注定要低。你当然可以说,python不是很简单吗?但我也可以说,对于那些尖子生来说,换语言确实没啥难度,你不管是python和matlab或者lua,或者java,他一定能给你算出想要的东西。但是效果呈现呢?第一是写论文给前辈看,第二是观察过程,给自己看,都不如MATLAB那么直观。那对于那些水平不是特变拔尖的学生来说呢?你matlab都不一定能搞定,更何况GUI提示更少的python。不是所有工科生都擅长码代码!那些课本知识学得好的,但是实在是手残的学生,绝对数量也不少,他们的学习能力的损失,最终会转换成我们高级工程师数量的减少。

更不用说Simulink没有替代品了,用python做Simulink,恐怕要的轮子非常多,我们学生恐怕还得分出时间去处理造轮子的问题.....


当然,除了以上这些,就没有别的能让工业党们冷静一下的东西吗?

Python组织服务器在哪里?
Pip是从哪里把包搞到你电脑上的?
提供GUI的支持Python的 IDE又是哪个国家搞出来的?























相关帖子

最具影响力军事论坛-超级大本营军事论坛欢迎你!超然物外,有容乃大。
您需要登录后才可以回帖 登录 | 成为超大会员

本版积分规则

监狱|手机|联系|超级大本营军事论坛 ( 京ICP备13042948号 | 京公网安备11010602010161 )

声明:论坛言论仅代表网友个人观点,不代表超级大本营军事网站立场

Powered by Discuz © 2002-2021 超级大本营军事网站 CJDBY.net (违法及不良信息举报电话:13410849082)

最具影响力中文军事论坛 - Most Influential Chinese Military Forum

GMT+8, 2021-02-28 06:21 , Processed in 0.022470 second(s), 6 queries , Gzip On, Redis On.

快速回复 返回顶部 返回列表