- 积分
- 91269
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2011-8-2
- 最后登录
- 1970-1-1
成长值: 32430
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
最近病倒卧床,好几天没怎么看电脑。一直在用手机和外界保持联系,有什么来不及处理的。大家还请见谅。去医院之前发个帖子,前两天在知乎看到的,感觉挺不错的,和大家一起分享一下。
-------------------------------------------------------
1.匿名用户(1072赞)
就我在工程领域内的见闻,随便说几句
1.
Matla的最直接优点在于,matlab代码不需要编译,省下你无数debug的时间。只要你果真写过“hello world”以外的代码,自然明白这句话的含义
2.
为什么我要强调工程领域,因为matlab这玩意儿就是为工程师设计的,不是为程序员设计的。工程师对编程的需求,和程序员对编程的需求,其实是不一样的。
对程序员来说,代码不仅是工具,更是产品,所以喜欢关注代码本身。
但对工程师来说,工具就真心只能是工具,用起来方便才是王道,至于他的工作原理是不是优雅,对不起我不关心啊。
比如变量不需要声明,不需要检测类型。计算机科班出身的人会和你说这是多么多么的大忌,但实际使用中便利是很多的,谁用谁知道。
做个直观的比较,两种语言:一种10小时编写,1小时运行;另一种1小时编写,10小时运行。
程序员倾向第一种,无可厚非,因为代码的重复使用率极高,先劳而后逸是常态。比如网站,代码写完了挑战才刚刚开始。
但工程师不是,我建一个模型,重要的是设计过程,重要的是这个模型的物理意义。设计完了,一个模型跑几天几夜根本不是事儿,我回家睡觉就是了。等到结果出来,以后这个模型再也不碰了也无所谓。所以我在乎的是设计过程,人力成本比cpu运行成本高太多。
正如楼下的 @张抗抗 朋友所说:
Matlab追求的是解决问题本身的简洁
当你还在关注“术”或“形”上的东西的时候,说明你还没打算解决什么基本问题
3.
为什么matlab在工程行业内受欢迎,因为其既是科学计算,又是程序语言,还是图形设计软件。。。互相之间还无缝兼容,所以才强大。核心功能上确实有一些强力的竞争对手,但如果分散到各个专业领域,尤其是那些分开来卖的toolbox,就未必能找到合格的替代品了。
不喜欢Matlab的人,认为某某工具比Matlab好的人,因为你们只需要使用那一种工具。所以尽管挑那一个用就是了呗。
matlab还有许多为了大型建模及实体模型而服务的功能,比如Code Generation, Simulink Target, Real Time Workshop等等,恐怕是学生党未必会接触到的东西。所以学生党依据日常做作业的经验而给出的评价,我认为不全面。再说了,高校购买的student version本就不是全套功能。。。
我换个说法好了:如果对你来说matlab只是一种程序语言的话,那对不起,这东西确实不适合你用。
换个更简单的说法:如果你用matlab而从未点开过simulink的话,那你也不用和我争了,我懒得和你争。
如果有人说:我觉得自行车比坦克车好用,因为轻便、节能、环保。
请问我该如何回答他呢?
4.
再说个中国用户普遍体会不到的优点:售后服务。
正版matlab包含tech support,24小时电话伺候,无论是有bug还是自己不会用,神马问题都可以问。个人用户不觉得什么,对企业用户来说有售后没售后是完全不同的概念。
举一个实际工作中遇到的例子:
你觉得python免费好用,各种开源的library也应有尽有,你觉得碉堡了,花钱的matlab简直就是垃圾。
然后你写了个程序,但是结果就是算不对。这就屌了,你不得不花好几天的时间去debug。最痛苦的不是bug,而是你始终怀疑这个bug不是你自己的,是免费开源代码自身的漏洞——我这里指的不是python的漏洞,而是第三方工具包的作者可能自己犯错了
经过了一个星期的努力,挣扎吧,在血和暗的深渊里,你终于确定了是代码自身的问题。
这时候就更屌了,人家是免费软件啊,是开源软件啊,谁有空来给你负责啊?你又不会自己重写library,只好到各种技术论坛上去求助。先不说别人未必愿意搭理你,就算愿意,可是你才是专家啊,你干的活别人不懂啊,所以人家也没办法帮你啊。就这样又过了一个星期。
然后你的工作这样一卡就卡了两个星期,也不知道什么时候能够解决。python是免费的是吗?可是美国码农时薪40刀/时,两个星期的人力成本就足够你买matlab了,还有找零
5.
程序员逼格太高,跟你谈算法谈架构,但是对不起啊,我们的侧重点不一样啊。
好比一个医生说青龙偃月刀不适合做手术,所以这玩意儿弱爆了。那没办法,什么事都是你说了算,你赢了行吗?
过去有人提醒我不要在知乎上和程序员对喷,如今我是服了。世界上不是只有程序员一种工作,请你睁开眼睛看看别人的世界
再逐条说几个细节:
矩阵表达,据我所知这是matlab的强项,也是创业初期matlab能够在一堆科学计算中脱颖而出的关键。所以这一条我实在不知道你的喷点在哪里,请阐明细节
说matlab的代码“丑陋”,“不优雅”。这就真没法说了,请先定义优雅。另外你觉得C比java好看吗?法语比日语优雅吗?还是那句话,光说这些主观感觉的我实在无法回答
——————————————————————————
我真是服了一些喷子了
我这帖一没强买强卖,二没贬低别家,我连横向比较都尽量减少了,单纯分享一下自己的使用体验而已。就这样还能有人喷?还让不让人说话了?知乎是你家开的?
工具就是工具,通过贬低别人的工具来彰显自己水平的人,我真是开眼界了,水平真是惊世骇俗啊。
有不同意见的我欢迎交流,至于满嘴喷粪的我劝你三思,这毕竟是我的地盘,到时候你辛苦半天喷出一大坨,我点点鼠标就给删了。你说到底是谁比较酸爽呢?
2.匿名用户(161赞)
如果说的是matlab整个产品,我觉得短时间内是不可能的。
如果是符号计算,matlab的确不行。
即使是matlab比较擅长的有大量矩阵和向量的数值计算,和一些优良的库相比,也不一定效率最高。
但是,matlab发展到今天,这些都不是matlab最重要的部分了。
matlab一直在推广的是model based design,来看个海报:
没错,mathworks在说,他家的软件结合model based design这种设计方法,辅助了一台火星探测器的设计。看到上面的海报里面说的380,000 simulations,你可能觉得这个设计方法中,matlab的产品的作用仅仅是仿真,但是这不一定,看下一个例子:
这个是个国内的例子,电动汽车的电源管理,注意上面的话:100% of code generated , 这里说的code是C语言代码,这些C代码的target device是嵌入式设备。
这就意味着那不仅仅是仿真了,模型是能够直接生成代码的。
所以,python要取代它。
除了数值计算。
需要开源社区设计出一个比较成熟的仿真软件。
而仿真软件还要能够支持code generation。
这本质上是一堆不同的编译器(嵌入式设备众多,还需要厂家的配合才行)。
PS:
1.
当初Cleve Moler设计matlab是帮学生减轻负担,避免他们去学Fortran(LINPACK)。但是,作为一个工程师的Jack的加入,肯定会把这个东西往工程上靠。那么数值计算是foundation,但是在这个foundation上如何发挥才是使得matlab不一样了的地方。
而这个Foundation的部分,可以在后续的release中慢慢地优化,使用更好的开源实现,或者是直接购买一些商业实现库。
但是,如果发挥出来的整个体系成了不可替代的了,那这就不仅仅是一个数学分析工具了,而是一个从开始的需求分析,模型验证,以及到实现,整个设计流程都包含的工程平台了。
2.
楼主说的不能web,如果要把matlab作为服务器端语言,我确实还没有看到类似的应用。但是,如果只是一些网络应用,比如web crawler,网上其实挺多的。
matlab里面有几个简单的网络接口函数,比如urlread可以读取网页,还有xmlread。
这个函数是用java的库写的,因为matlab里面是集成了JVM的,其实在你的matlab 代码里面可以直接调用java的libraries。
只是,这些属于undocumented范畴,这里有个网站就专门挖掘这些:
Undocumented Matlab
目前的web server一般都是动态生成html页面了。我确实还没有见到这方面的应用。
但是,如果是生称静态的html页面,那么matlab其实一直都可以。
Cleve Moler的博客其实使用matlab写的:
MATLAB Central
上面链接里是Cleve Moler的一篇博客,这片博客里面有图片,有代码,还有文字。
Cleve在写这样一篇博客的时候,其实只是写了一个m文件,里面有注释,在cell mode里面注明了各个地方的title。然后在editor里面publish。
在发布的过程中,matlab会把运行结果中的图也自动加入最后生成的html文件里(图片放在单独文件夹)。
在m文件中还支持Latex,这些会在生称的html被自动转换成文字或者公式的图片。
在那篇博客的文末的右边,有个 “get the matlab code”链接,你可以把它的m文件下载下来自己看下,然后自己发布一下,看看生称的html文件是怎样的。
3.
楼主说的脚本,其实matlab就是一种脚本语言。
这也是为什么它的调试会比较方便。
你不需要一个专门的入口,你可以从m文件的任何一个位置开始运行你的程序。
matlab的编辑器有一个cell mode,使用它,你可以把m中的任何一个你想要单独运行的部分放在一个cell里面,只执行这个cell。
另外,说到windows的操作。
在matlab里面可以直接执行dos命令。
所以在涉及到了windows的比较复杂一点的操作,可以用批处理写好batch,然后在matlab里面调用。
当然,你可以用matlab先生称一个batch,然后运行。
4.
最后,虽然matlab是一个商业软件。
但是在matlab这个商业平台上是有“开源社区”的。
matlab的File Exchange是一个很活跃的社区。
3.古十长(10赞)
虽然python里面有一个完全模仿matlab做的工具叫做spyder,然后里面有个包也是包含了各种类似matlab的函数,模仿到了甚至一些简单的功能matlab代码复制过去,根据python语法改一改,马上就可以用了;
但是,毕竟在一些别的方面matlab是这个领域最专业的,它里面内置了很多函数在python里面是不带有的,就算python有,但是也没有matlab快;再说了,matlab里面的simulink,神经网络工具箱,小波分析工具箱,或者现在2013版里面新引入的在射频电磁场方面仿真用的工具箱,这些别说python了,别的软件也不一定有matlab好使。。。
回头再看看题主的问题,你说matlab功能太单一了,那是你用matlab的功能用的还不多(其实也没有人可以用上matlab里面的所有功能。。。)
然后如果说不能做网站不能做脚本,那我只能说,题主,请注意,合适的问题请用合适的工具来完成,因为我常用C++,Python,Matlab,Mathematica等东西,但是对于某个我想做的功能,我都会选择最适合做这件事情的工具,而不是去想着怎么一招吃遍天;
哦,另外,说到脚本,其实matlab也差不多可以做类似的事情的,我就写过matlab改系统的各种东西,重命名MP3的各种东西,还有搬运漫画打包之类的小代码。。
4.张贱(17赞)
以我曾经试图用python+各种包来代替matlab做一门机器学习方面的课为例子来说明一下即使用不到matlab里各种高级的仿真功能等等,python也不可能代替matlab:
这个课的作业大致就是一些PCA和LLE这样的线性非线性的降维技术,班上大多数理智的人都用了matlab,而我装逼情绪爆发用的是python,numpy+scipy+sklearn(前两个大概是最容易让大家以为matlab要被python代替的包了)。事实证明大家都异常轻松的作业把我折腾得够呛。例如在做一个矩阵特征分解的时候一个实对称矩阵愣是能给我分解出复数特征值来,最后查证是包里的bug……我觉得很难想象matlab这种商业软件会在这种常用函数里出bug。
当然即使抛去这些包里存在的各种bug,单单是写起来比matlab麻烦就够了,毕竟像高校里用matlab的人大多数都是用这货来发paper的研究生们。单单验证想法就别谈别的了,当然是写起来越简单越好。翻到paper的dl前两天写的matlab代码现在看看都觉得丑,那时候连a1a2a3这种丑陋的变量名都写得出来怎么还会有闲心关心python的缩进。
所以说,除非matlab大力打击盗版让盗版绝迹(这事儿貌似也不好弄),否则python是肯定搞不过它的。
------------------------------------------------------
最近脑袋反应比较迟钝,希望大家一起来讨论讨论。上次在我的那个帖子里面支持python那些也希望过来看看,不同的观点进行撞击才会有更好的收获!
最后给大家拜个早年,提前祝大家新年快乐!
|
评分
-
查看全部评分
|