我不会提供完整的差异清单,而是分享我的看法。
如果您仔细阅读您提供的维基页面,您会经常看到类似“Octave支持两者,而MATLAB需要第一个”的句子。这表明Octave的开发人员试图使Octave语法比MATLAB更好。
这种态度使得Octave完全失去了它的目的。Octave背后的想法是(或者应该说变成了),提供一个开源的替代方案来运行m-code。如果它试图变得“更好”,那么它就试图变得与大多数人使用它的原因不符合。根据我的经验,除了非常简单,非常短的内容之外,以MATLAB编写的代码在Octave中永远不会一次性运行成功 -- 对于任何相当大的函数,我总是不得不在它能在Octave中运行之前翻译很多东西,如果不是从头开始重写。为什么这样做更好,我真的不明白......
此外,如果您学习Octave,您将了解到Octave允许的语法很多,在MATLAB中不允许。也就是说--在Octave中编写的代码通常不能在MATLAB中正常运行,需要进行许多转换。反过来也是不兼容的!
我还可以继续说:MathWorks为MATLAB开发了许多工具箱,有Simulink及其相关产品,在Octave中没有相应的东西(是的,你需要为所有这些付款。但通常你的雇主/学校会做到这一点,至少它存在),证明符合几个行业标准的测试工具,验证工具,需求管理系统,报告生成,更大的社区和用户群等等。MATLAB只是更大事物的一小部分。Octave只是Octave。
所以,我的建议是:
为什么要避免Octave-only的语法呢?因为在科学领域经常有大量的代码库是完全用MATLAB编写的。有教授、工程师、学生、专业编码人员等许多人都熟知MATLAB的复杂细节,而对Octave则了解不足。
如果你找到了新工作,而新办公室里的每个人都说西班牙语,那么要求所有人从现在开始都讲英语就显得有点自以为是了,只是因为你不会/不喜欢说西班牙语。MATLAB和Octave也是一样的道理。
注:可以在启动Octave时包含“--traditional”标志以运行Octave的“传统模式”,这样当使用某些Octave-only的语法时就会出错。
MATLAB首先是一种商业产品。因此,MATLAB中的所有内容基本上都可以正常工作。所有核心功能都很稳定,如果您正在处理一个特殊项目,那么MATLAB可能会向您出售一个附加的领域特定.m文件集,其中包含了许多额外的功能。它不便宜,但是可以工作并且可以在没有投诉的情况下完成任务。
Octave始终展现其开源和免费信息的根源。它是免费的,并且每次机会它都会提醒你它是免费的。它是由热爱Linux操作系统的志愿者开发的。因此,Octave勉强运行于Windows系统上。令人惊讶的是,有这么多的MATLAB功能存在于Octave中。
但是问题来了。每当您尝试做一些更复杂的事情时,Octave就突然以微妙而难以理解的方式崩溃了。哎呀--终端驱动程序在OpenGL层的某个地方发生了溢出。您无法打印。哎呀--图形绘制在字体方面做了奇怪的事情。祝你好运弄清楚为什么。哎呀--Octave和其他一些模糊的免费软件之间存在一些隐藏的依赖关系,因此它无法编译。祝你好运找出是哪个。
而Octave的回应是:嘿!这是免费软件!您拥有所有源代码,可以自己修复所有这些漏洞!也许如果我有无限的时间和资源,我可以花费全部时间在自由软件中修复漏洞,但我个人没有。如果我在学术界工作,我可能会这样做。
因此,在选择MATLAB或Octave时,核心问题归结为一个问题。有趣的是,在选择商业与免费软件变体时,这个问题总是相同的。
问题就是:
你比时间更有钱吗?
Octave是基本上是MATLAB的开源版本。它就是为此而编写的。MATLAB有一个非常好的GUI,使其使用起来更加容易,但是下一个稳定版本的Octave也将拥有一个GUI,我已经在不稳定的版本中测试过了,并且看起来非常fantastic。Octave因为是由一群志愿者开发和维护,所以更加容易出现bug,而MATLAB的开发则是由行业投入数百万美元资助的。我仍然是一名学生,正在使用MATLAB的学生版,但我考虑一旦发布了带有GUI的稳定版本,就转换到Octave上。
MATLAB可能比Octave更加强大,算法运行更快,但对于大多数应用程序来说,Octave已经足够了,我认为它是一个完全免费的惊人工具,而Octave是完全免费的。
我会建议在可以使用学术版本的情况下尽量使用MATLAB,但是切换到Octave应该是无缝的,因为它们使用完全相同的语法。
最后,还有一个Simulink的问题。如果您想进行仿真或控制系统设计(可能还有其他数百万个用途),Simulink非常棒,并且附带MATLAB。我认为没有其他软件能与之媲美。尽管Scilab显然是一个“好”的开源替代品,但我没有尝试过。
我对Rody Oldenhuis的回答没有太多补充。我的写作策略通常是所有函数都应该在Matlab中运行。
有些特定的函数我会在两个系统上测试,用于以下情况:
a) Octave不需要许可证服务器 - 例如,如果你的机构不支持本地许可证。我曾经在一个系统上使用过它,那个系统没有连接到互联网,将要长时间运行(在实验室的角落里),并被许多不同的用户使用。注意:这不是关于许可成本的问题,而是与技术问题相关。
b) Octave支持其他平台,例如树莓派 (http://wiki.octave.org/Rasperry_Pi) - 这可能会很方便。
Octave和MATLAB有很多相似之处。但是Octave是一个命令行界面。你必须在命令提示符中输入每个命令,而MATLAB则带有最佳的GUI。我建议你先使用MATLAB学生版;在掌握基本课程后,永久使用GNU Octave。
现在GNU Octave带有GUI,但它是一个开发版本。对于GNU Octave,有一些GUI前端,如guioctave、xoctave(不免费)、DomainMath IDE等。