Octave和MATLAB之间的区别

288
我是一名程序员,懂得 Python, Ruby 和一些 C,现在正在考虑学习 GNU Octave 还是 MATLAB。我知道它们有很多共同点,但是语法和数据结构的相似程度并不清楚。以上链接展示了几个例子,它们在语法上是相似或者相同的。整个语言是否都是这样呢?
我想学习这门语言以便进行更多的科学计算,可能使用一些图像分析库。
此外,MATLAB 的价格值得吗?

9
既然你是学生,值得检查一下你的学校是否为学生提供免费或廉价的Matlab;我的本科和研究生学校都提供这样的服务,这使得决定使用Matlab变得更容易。 - Danica
26
是的,但是当他离开大学去研究中心时,他将不得不购买它,到那时他只会知道Matlab而不了解其他替代品。因此,从长远考虑,如果你想在科学领域建立职业生涯(似乎他想要),你不应该忽视这一点。更不用说这样的许可证通常也不能用于集群。 - carandraug
3
在你还是学生的时候,你可以花大约100美元购买Matlab许可证。当然,如果你想要其他一些工具箱,每个工具箱额外需要29美元。因此,如果你不知道你可能需要哪些工具箱,很难证明这个费用是值得的。 - Ben A.
27
我今天刚开始学习Octave,因为我正在学习机器学习,老师推荐学习Octave(因为Octave是免费的,而MATLAB很贵,因为先用Octave或MATLAB让机器算法工作起来,学生会更加高效,然后再转到Java或C++)。 - Anthony
7
建议您使用Python和OpenCV。 - gukoff
显示剩余5条评论
9个回答

242

我不会提供完整的差异清单,而是分享我的看法。

如果您仔细阅读您提供的维基页面,您会经常看到类似“Octave支持两者,而MATLAB需要第一个”的句子。这表明Octave的开发人员试图使Octave语法比MATLAB更好。

这种态度使得Octave完全失去了它的目的。Octave背后的想法是(或者应该说变成了),提供一个开源的替代方案来运行m-code。如果它试图变得“更好”,那么它就试图变得与大多数人使用它的原因不符合。根据我的经验,除了非常简单,非常短的内容之外,以MATLAB编写的代码在Octave中永远不会一次性运行成功 -- 对于任何相当大的函数,我总是不得不在它能在Octave中运行之前翻译很多东西,如果不是从头开始重写。为什么这样做更好,我真的不明白......

此外,如果您学习Octave,您将了解到Octave允许的语法很多,在MATLAB中不允许。也就是说--在Octave中编写的代码通常不能在MATLAB中正常运行,需要进行许多转换。反过来也是不兼容的!

我还可以继续说:MathWorks为MATLAB开发了许多工具箱,有Simulink及其相关产品,在Octave中没有相应的东西(是的,你需要为所有这些付款。但通常你的雇主/学校会做到这一点,至少它存在),证明符合几个行业标准的测试工具,验证工具,需求管理系统,报告生成,更大的社区和用户群等等。MATLAB只是更大事物的一小部分。Octave只是Octave。

所以,我的建议是:

  • 弄清楚您的学校是否会支付MATLAB的费用。通常他们会这样做。
  • 如果你能拿到钱,购买MATLAB并学习如何正确使用它,长远来看这是更好的选择。
  • 如果你真的无法筹集到资金,可以使用Octave,但一定要学习MATLAB的语法,并避免使用Octave-only的语法。(见注)

为什么要避免Octave-only的语法呢?因为在科学领域经常有大量的代码库是完全用MATLAB编写的。有教授、工程师、学生、专业编码人员等许多人都熟知MATLAB的复杂细节,而对Octave则了解不足。

如果你找到了新工作,而新办公室里的每个人都说西班牙语,那么要求所有人从现在开始都讲英语就显得有点自以为是了,只是因为不会/不喜欢说西班牙语。MATLAB和Octave也是一样的道理。

注:可以在启动Octave时包含“--traditional”标志以运行Octave的“传统模式”,这样当使用某些Octave-only的语法时就会出错。


27
关于JIT的缺乏,Octave开发版本已经实现了它。我不知道什么时候会发布,但我已经构建过它,对于循环代码来说差异非常大。另外,为了避免Octave特有的语法,还有Octave的--traditional选项。我并不是说Matlab代码总是可以在Octave上运行,但随着每个新版本的发布,这种情况越来越好,并且兼容性是他们的优先考虑因素之一(更不用说不同的Matlab版本之间存在足够的不兼容性了)。 - carandraug
15
如果你有自由更改Matlab,添加额外的语法或不同的函数,你会称之为坚持优秀的语法吗?这些功能是用户实现的,它们不会破坏兼容性。往往新的东西被拒绝的原因是这个。Matlab语言是Octave语言的子集。如果你认为这个想法很棒,那么你应该加入,因为它是一个社区项目,具有社区开发的特性。 - carandraug
20
@RodyOldenhuis 这不是要复制另一个软件。Octave的开发并不是从那个方向开始的,只是用户不断提交补丁使其更加朝那个方向发展。http://www.sciencedirect.com/science/article/pii/S0959152412000911 - carandraug
9
任何编程工具的制造商曾经因为软件漏洞而被成功追究责任吗? - Martin Beckett
6
啊,算了吧。正确性比所有其他东西都更重要 :) - Rody Oldenhuis
显示剩余32条评论

89
更加完整的关于Octave与Matlab不同之处的链接请参见Octave的常见问题解答页面。理论上,所有在Matlab中可运行的代码都可以在Octave中运行,并且Octave的开发人员会将与Matlab不兼容的问题视为错误。所以,您第一个问题的答案在理论上是肯定的。当然,所有软件都有bug,Octave和Matlab(是的,Matlab也有)都无法避免这些问题。您可以报告它们,有人会尝试修复它们。
Octave还具有额外的功能,其中大部分是额外的语法,我认为这使得代码更可读、更有意义,特别是如果您习惯了其他编程语言。
但Octave不仅仅只是在经济成本方面更具优势。Octave在自由方面也是免费的,它是自由软件,但我认为这不是发泄关于软件自由的地方。
我只在Octave中进行图像处理,并发现图像包适合我的需求。然而,我不知道您的情况。所以,对于是否值得花费这些成本的问题,我的答案是否定的,但肯定有人不同意。

27

MATLAB首先是一种商业产品。因此,MATLAB中的所有内容基本上都可以正常工作。所有核心功能都很稳定,如果您正在处理一个特殊项目,那么MATLAB可能会向您出售一个附加的领域特定.m文件集,其中包含了许多额外的功能。它不便宜,但是可以工作并且可以在没有投诉的情况下完成任务。

Octave始终展现其开源和免费信息的根源。它是免费的,并且每次机会它都会提醒你它是免费的。它是由热爱Linux操作系统的志愿者开发的。因此,Octave勉强运行于Windows系统上。令人惊讶的是,有这么多的MATLAB功能存在于Octave中。

但是问题来了。每当您尝试做一些更复杂的事情时,Octave就突然以微妙而难以理解的方式崩溃了。哎呀--终端驱动程序在OpenGL层的某个地方发生了溢出。您无法打印。哎呀--图形绘制在字体方面做了奇怪的事情。祝你好运弄清楚为什么。哎呀--Octave和其他一些模糊的免费软件之间存在一些隐藏的依赖关系,因此它无法编译。祝你好运找出是哪个。

而Octave的回应是:嘿!这是免费软件!您拥有所有源代码,可以自己修复所有这些漏洞!也许如果我有无限的时间和资源,我可以花费全部时间在自由软件中修复漏洞,但我个人没有。如果我在学术界工作,我可能会这样做。

因此,在选择MATLAB或Octave时,核心问题归结为一个问题。有趣的是,在选择商业与免费软件变体时,这个问题总是相同的。

问题就是:

你比时间更有钱吗?


2
另一个问题是:你可能最终会在哪些公司工作,他们使用什么?很可能是出于同样的原因,他们使用Matlab。 - user276648

14

Octave是基本上是MATLAB的开源版本。它就是为此而编写的。MATLAB有一个非常好的GUI,使其使用起来更加容易,但是下一个稳定版本的Octave也将拥有一个GUI,我已经在不稳定的版本中测试过了,并且看起来非常fantastic。Octave因为是由一群志愿者开发和维护,所以更加容易出现bug,而MATLAB的开发则是由行业投入数百万美元资助的。我仍然是一名学生,正在使用MATLAB的学生版,但我考虑一旦发布了带有GUI的稳定版本,就转换到Octave上。

MATLAB可能比Octave更加强大,算法运行更快,但对于大多数应用程序来说,Octave已经足够了,我认为它是一个完全免费的惊人工具,而Octave是完全免费的。

我会建议在可以使用学术版本的情况下尽量使用MATLAB,但是切换到Octave应该是无缝的,因为它们使用完全相同的语法。

最后,还有一个Simulink的问题。如果您想进行仿真或控制系统设计(可能还有其他数百万个用途),Simulink非常棒,并且附带MATLAB。我认为没有其他软件能与之媲美。尽管Scilab显然是一个“好”的开源替代品,但我没有尝试过。


2
因为它是由一群志愿者开发和维护的,而MATLAB的开发则是由工业界投入数百万美元资金的。项目中的资金数量并不是质量和无缺陷的原因。也许甚至没有相关性。 - gagarine
1
他们使用完全相同的语法吗?不,他们并没有。 - Cris Luengo

8
我刚开始使用Octave。我知道有人使用MATLAB。正如上面提到的一个主要区别是Octave有一个命令行界面,而MATLAB有一个图形用户界面(GUI)。对我来说,拥有GUI非常有利于调试。
在Octave中,你必须执行命令才能看到矩阵的长度等信息,但在MATLAB中,它使用良好的界面很好地展示了一切。但Octave是免费的,并且适用于我所做的基本任务。如果您确定只需要做基本工作或者现在不确定您需要什么,那么选择Octave。当您真正感到需要时,可以付费使用MATLAB。

2
Octave有一个GUI,目前还处于beta版本。在执行Octave时使用命令--force-gui。 - ig343
6
从Octave 4版本开始,默认的用户界面是GUI。 - Ruslan

7
MATLAB之所以如此受欢迎和特殊,是因为它在不同学科领域拥有出色的工具箱。由于您的主要目标是学习MATLAB,因此如果您使用Octave或MATLAB并没有什么区别!只是购买MATLAB却没有任何酷炫的工具箱(这基本上取决于您的专业)并不是一个合理的开支!您可以通过Octave开始良好的学习,并在互联网上跟随大量的MATLAB教程。

4

我对Rody Oldenhuis的回答没有太多补充。我的写作策略通常是所有函数都应该在Matlab中运行。

有些特定的函数我会在两个系统上测试,用于以下情况:

a) Octave不需要许可证服务器 - 例如,如果你的机构不支持本地许可证。我曾经在一个系统上使用过它,那个系统没有连接到互联网,将要长时间运行(在实验室的角落里),并被许多不同的用户使用。注意:这不是关于许可成本的问题,而是与技术问题相关。

b) Octave支持其他平台,例如树莓派 (http://wiki.octave.org/Rasperry_Pi) - 这可能会很方便。


3
嵌套函数和闭包现在已被许多语言支持,包括MATLAB。JavaScript将闭包作为一种一流的设计原则。
不幸的是,Octave不支持闭包(具有词法作用域的嵌套函数)。
根据Bug:handles to nested functions are not yet supported,人们甚至可能会得出开发人员不想或无法正确处理它的印象。顺便说一下,这个2013年的错误已在2020年被修复。
这将破坏很多代码,无解决方案。

我不确定这个说法是否仍然准确。嵌套函数在Octave中得到了实现,我发现它们比Matlab更加灵活:例如,在脚本中声明函数(除了lambda函数之外的其他函数),这在我上次尝试时在Matlab中是不可能的。 - MayeulC
@MayeulC,“更具通用性”这部分实际上两面都有利弊。 - Wolfgang Kuehn
1
链接已损坏。 - Peter Mortensen

-1

Octave和MATLAB有很多相似之处。但是Octave是一个命令行界面。你必须在命令提示符中输入每个命令,而MATLAB则带有最佳的GUI。我建议你先使用MATLAB学生版;在掌握基本课程后,永久使用GNU Octave。

现在GNU Octave带有GUI,但它是一个开发版本。对于GNU Octave,有一些GUI前端,如guioctave、xoctave(不免费)、DomainMath IDE等。


3
Octave的开发版本(3.7.5)带有本地图形用户界面,看起来相当不错! - kjetil b halvorsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接