- 积分
- 95232
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2011-8-2
- 最后登录
- 1970-1-1
成长值: 32430
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本文摘自知乎,虽然两个答案仅仅一个8个赞,一个5个赞,一个2个赞,但是其中还是指出了很多我们不曾认识到的Matlab的强大之处,在此与大家一起分享!
(原文链接:http://www.zhihu.com/question/27850677,有删改。整理:二爷名声在外)
@Tete
因为专业的缘故,用MATLAB和C++很多,也用过Mathematica和Excel。
个人感觉MATLAB、Mathematica虽然都是数学软件或是说“编程语言”,但是两者的侧重是不一样的。从官网的宣传就可以看出来,MATLAB的宣传语(MATLAB - 技术计算语言)是:The Language of Technical Computing,Mathematica的宣传语(Wolfram Mathematica: Definitive System for Modern Technical Computing)是:The world's definitive system for modern technical computing。MATLAB是language,Mathematica是system(一种mathematical symbolic software),记住这句话很重要。
因此,区别就来了:(我理解)MATLAB更强调开放性、定制性和灵活性,Mathematica更强调整合性、易用性(其实MATLAB在某些领域也十分易用,两者的“易用”概念是不同的)和直接性。有点儿像UNIX和Windows(我不是CS专业,不知道这样的比喻是否恰当)。所以,将两者进行优劣对比意义不是很大。
不过,不得不说的是,Mathematica的官网界面设计(良好的配色、扁平化的图形)、软件界面设计以及输出图形的渲染质量(其实MATLAB可以输出同样渲染质量的图形,只不过要写很多代码,Mathematica的码农已经都将这些功能写好了)确实要比MATLAB好很多,但是这并不意味这Ma就比MA要强大。因为,至少在我个人看来,在真正的工程研究领域,工程师或是科学家不会太在意到底是用黑白表格还是彩色表格来展示自己的成果(除非颜色会造成一定的混淆)。但他们真的很在意,从前用1个小时完成计算,现在是否能半个小时完成;从前功耗为100,现在是否能降到75;从前识别率为50%,现在是否能提高到70%……
下面说说正题:MATLAB到底有多厉害?
我想说,MATLAB真的真的很厉害!
1、数值计算
这是MATLAB的“老本行”。用MATLAB进行数值计算时,代码量往往比Mathematica大,但是当你熟练掌握了这门语言之后,你在编写代码的时候能够建立很清晰的算法逻辑,知其然,亦知其所以然,这对进一步的深入研究是特别有帮助的,在实践过程中你能体会到这一点。
MATLAB的“矩阵计算思想”相当厉害,能够高效地解决很多复杂计算问题。在MATLAB诞生初期,设计者能够把这种抽象的计算形式从实际应用中总结出来,并且设计到软件之中,是十分伟大的事情。而且,矩阵运算、向量运算是MATLAB的计算基础,是“最底层"的计算,所以MATLAB在这方面的优化已经可以说是完美了,不信的话你可以自己用C(或是你认为更高效的语言)写一个矩阵乘法的函数,肯定跑不过MATLAB。
在数值计算方面,MATLAB提供了丰富的工具包(Toolbox),能够满足日常研究的绝大部分需求,如果你想要的功能没有相应的工具包,说明你的研究领域已经较为前沿了,这时候Mathematica也未必帮的了你。
MATLAB对并行运算的支持也越来越强,这是计算的未来。
2、数据分析
MATLAB在这方面是有一条龙服务的:数据采集、处理(可以看做是数值计算过程)、分析、可视化。
数据采集支持很多的文件格式,包括一些新兴的数据文件(netCDF等)。而且MATLAB提供I/O函数,理论上你可以用它实现对任何格式数据文件的处理。而且,现在的MATLAB和硬件的结合越来越紧密,直接从硬件读取数据很方便。
数据处理和数据分析就不多说了,用好了现有的工具包,几乎无所不能。
可视化这方面确实还有待提高,根据我的使用经验,主要弱点在于:图形不漂亮(老毛病了),要是想生成炫丽的图形需要自己写很多代码;UI设计还不是很人性化,一些操作比较繁琐。不过,还是那句话:真搞科研的话,这些都不叫事儿。Nature绝对不会因为你用了大红大绿这种很俗的配色把你的论文拒掉。
3、集成性
说实话,这方面我接触的不是很多,所以不敢评价。但听不少同学说MATLAB在这方面做得越来越好了。(学生可以很容易获得最新的MATLAB,大家懂得。)
要说MATLAB有哪些让人眼前一亮的应用,可能要让你“失望”了。因为MATLAB的amazing之处,真的不在于实现一个“漂亮”的软件或是APP。但是,MATLAB在科学与工程方面的应用远不是“眼前一亮”这个词能够形容的:
可以看看这个网页 http://cn.mathworks.com/academia/students/,里面介绍了学霸们都在用MATLAB做什么。简单摘几例:
上图:密歇根理工大学的学霸使用MATLAB来控制赛车的功率计。
上图:宾夕法尼亚大学的学霸在设计智能机械臂时,使用MATLAB实时处理机械运动数据。
上图:浙江大学的学霸使用MATLAB对生物膜的形成过程进行仿真,并进行数据分析和可视化。
还有一些其他的例子:
Steve Eddins写了一个MATLAB程序:把报纸上的数独题对准摄像头,然后答案就显示在电脑屏幕上了。
把自己编写的MATLAB代码变为C/C++代码,妈妈再也不用担心我的C语言作业了 :P
MATLAB也可以写小游戏的,不过真的是屈才了......
总的来说:
1.MATLAB真的真的很厉害,搞科研的人都深有体会。
2.Mathematica和MATLAB没有太多可比性,不是一个类型的。想长见识,多玩玩Mathematica,想长知识,多用用MATLAB。
3.用MATLAB能优化高速列车车头形状、能模拟生物化学反应、能分析复杂零件受力、能....的MATLAB做个2048游戏、画个钟表、画个正弦波、画个妹子胸部的曲线(还有3D版.....太丧心病狂).....真的是杀鸡用大炮打蚊子了。
@井号键
Mathematica 和 MATLAB 并不是直接的同类产品。
@Tete 的答案说的很对,Matlab 并不是数学软件,而是The Language of Technical Computing,学生时代用的都是很多基本功能,矩阵运算的缘故,所以觉得他是数学软件。而Mathematica我觉得是正儿八经的数学软件,wolfram家出品,没用过客户端,一直用他家网页,想来相差不多。
我觉得matlab最大的价值在于他们的toolbox。他们有各个领域非常优秀的工程人员,这些人把各个领域新出现的算法非常高效可靠地实现出来。所以matlab上实现的高级算法经常代码都很短,开发周期也相应短很多。
MATLAB and Simulink Pricing and Licensing Overview 有兴趣的童鞋可以研究下他们到底有多少toolbox。我日常用image processing 和 signal processing比较多,有一次license被同事check out走以后,发现几个大一点的项目都跑不了了,因为不能调用toolbox里的方法。这也一定程度上说明了为什么matlab认为自己是Technical Computing,而不是基本的数学软件。
另外我觉得matlab真正的对手应该是scipy,开源总是要和闭源的人对着干。现在scipy开始有越来越多的开源组件,渐渐开始可以和matlab分庭抗礼,至少我已经渐渐转向scipy。但是现在来看,在算法效率上scipy还是不能和matlab像比,matlab里面mex那一套我虽然不会,但是我写出来的东西跑不过别人的代码是不争的事实。
@邵恩真
1.用MATLAB搞了个华容道小游戏,并且弄了些图片,看起来还不错,玩了一天。
2.找过不少游戏的MATLAB程序,不过最让我佩服的还是这个飞机类的游戏。
3.在网上看到一个帖子 是用MATLAB把Excel文件变成一幅画的,类似于刺绣。
4.看到的这个3D时钟也是极好的。
5.自己针对一些面试题写的程序,模拟整个问题的过程。
对蚂蚁爬杆问题进行模拟的通用程序|MATLAB/Simulink 程序源码|MATLAB技术论坛
鉴别出1000瓶水中哪瓶水有毒需要几只小白鼠的程序|MATLAB 数学统计与优化|MATLAB技术论坛
6.GUI的应用 很方便。
7.分类 预测 拟合 聚类 各种问题 都能找到很不错的内置函数或是工具箱。
8.从图片中获取坐标值,获得曲线的(x,y)值。使用ginput函数,很不错的东东
9.高数 概率 线代问题 都可以用MATLAB来完成
10.看到过MATLAB三维重建,2000年的建模题也是关于这个的,一直想尝试,可惜找不到原图片。
11.不得不提,Simulink是个很强大的东西,不过这方面的资料比较少,一般要自己看help。
12.与C++联合编程,用MATLAB生成dll文件,从而用C++调用MATLAB程序。
|
|