Octave和MATLAB之间的区别?[关闭]


271

我是一个了解Python,Ruby和一些C的程序员,他们正试图决定学习GNU Octave还是Matlab。我知道它们有很多共同点,但是我尚不清楚语法甚至数据结构有多相似。每个人都说它们“相似”,但是没有人说它们实际上有多相似。上面的链接显示了几个示例,它们在语法上相似或相同,这对整个语言都是正确的吗?

我正在尝试学习通用语言,以进行更多的科学计算,可能使用一些图像分析库。我知道我可以编程使用许多其他语言,但是我的顾问说,了解MATLAB或Octave在科学中至关重要。

此外,Matlab是否值得付出代价?我没有很多钱,但是如果图书馆或其他地方有重要区别,我相信我会找到钱的。


8
由于您是学生,因此值得检查您的学校是否免费/便宜地为学生提供了matlab;我的本科和研究生学校都这样做,这使得选择使用matlab变得更加容易。
Dougal 2012年

22
是的,但是当他离开大学去某个研究中心时,他将不得不购买它,届时他将只了解Matlab,而不是替代品。因此,从长远角度考虑,如果您想成为科学界的佼佼者,而这似乎是他想要的,那么您不应该忽略这一点。更不用说这种许可证通常也不能用于集群。
carandraug 2012年

2
当您是一名学生时,您应该可以获得约100美元的Matlab许可。如果您需要其他一些工具箱,则可获赠,每个工具箱额外收取29美元。因此,不知道您可能想要/需要哪些工具箱,很难证明成本的合理性。
Ben A.

22
+1我今天刚开始学习Octave,因为我目前正在学习机器学习,并且老师建议学习Octave(因为它是免费的,因为METLAB昂贵,并且学生将可以更有效地使用机器算法首先使用Octave或METLAB,然后使用它,然后再使用Java或C ++)
Anthony

7
我建议您使用python + opencv
gukoff 2013年

Answers:


235

除了向您提供完整的差异列表之外,我将向您提供有关此问题的观点。

如果仔细阅读所提供的Wiki页面,您会经常看到诸如“ Octave支持两者,而MATLAB需要第一个同时支持”之类的句子。这表明Octave的开发人员试图使Octave语法“优于” MATLAB。

这种态度使八度完全失去了目的。Octave背后的想法是(或者已经变成,我应该说,请参阅下面的评论)以拥有一种运行m代码的开源替代方案。如果它试图变得“更好”,那么它就会尝试变得与众不同,这与大多数人使用它的原因不符。以我的经验,除了非常简单,非常简短的内容外,运行在MATLAB中开发的内容永远不会一work而就-对于任何相当大的功能,如果要在Octave中运行,我总是必须翻译很多内容,如果不要从头开始重写它。情况如何更好,我真的看不到...

另外,如果您学习Octave,则Octave中允许使用很多语法,而MATLAB中则不允许。含义-如果不进行大量转换,用Octave编写的代码通常无法在MATLAB中工作。相反,它也不兼容!

我可以继续:MathWorks有很多用于MATLAB的工具箱,还有Simulink及其相关产品,实际上在Octave中没有同等的产品(是的,您必须支付所有费用。但是,您的雇主/学校通常还是这样做的,而且至少还存在),已证明符合多种行业标准,测试工具,验证工具,需求管理系统,报告生成,更大的社区和用户群等,等等。MATLAB仅是一小部分更大的东西。八度是...只是八度。

所以,我的建议是:

  • 找出您的学校是否会为MATLAB付费。他们经常会。
  • 如果他们不这样做,并且您可以凑钱,请购买MATLAB并学习正确使用它。从长远来看,这是一个更好的决定。
  • 如果您真的不能赚钱,请使用Octave,但是学习 MATLAB的语法并远离仅使用Octave的语法。(见说明)

为什么最后一点呢?因为在科学中,通常存在完全用MATLAB编写的大型代码库。有很多教授,工程师,学生,专业编码人员,很多人知道MATLAB的所有复杂细节,而对Octave的了解却很少。

如果您找到一份新工作,而您新办公室中的每个人都说西班牙语,那么要求每个人从那时起就开始说英语是一种自大的想法,仅仅是因为不会说/不喜欢西班牙语。与MATLAB和Octave相同。

NB:如果所有拒绝投票的人都可以发表评论,并提供他们的论据和反对我的理由,那就太好了:)

注意:Octave可以在“传统模式”下运行(通过在启动Octave时包含--traditional标志),从而在使用某些仅使用Octave的语法时会产生错误。


25
关于缺少JIT的问题,它已经在Octave的开发版本中实现了。我不知道什么时候发布,但是我已经构建了它,对于循环代码而言,差异是巨大的。为了避免仅使用Octave语法,可以使用Octave的--traditional选项。我并不是说Matlab代码始终在Octave中运行,但这在每个发行版中都变得更好了,兼容性是它们的优先事项之一(更不用说即使不同的Matlab版本之间也具有足够的不兼容性)。
carandraug 2012年

14
而且您所说的是坚持使用高级语法...如果您可以自由更改Matlab,添加其他语法或其他功能,不是吗?这些是用户实现的功能,不会破坏兼容性。并非如此,新事物因此而被拒绝。这个想法是Matlab语言是Octave语言的子集。如果您认为这个主意很棒,那么您应该加入,因为这是一个社区项目,并且具有社区不愿开发的功能。
carandraug 2012年

19
@RodyOldenhuis它不应该是一个克隆。由谁保持提交补丁为它的用户倍频发展没有启动这样,它只是得到了越来越多推入那个方向sciencedirect.com/science/article/pii/S0959152412000911
carandraug

9
是否曾经成功地使任何编程工具的制造商对错误负责?
马丁·贝克特

6
@carandraug:啊,地狱。正确性比这更重要:)
Rody Oldenhuis 2014年

78

八度的FAQ上有一个更完整的差异列表链接。从理论上讲,在Matlab中运行的所有代码都应在Octave中运行,并且Octave开发人员将与Matlab的不兼容性视为错误。因此,第一个问题的答案理论上是肯定的。当然,所有软件都具有错误,Octave或Matlab(是的,Matlab也是如此)都不安全。您可以举报它们,有人会尝试修复它们

Octave还具有一些额外的功能,其中大多数是额外的语法,在我看来,这使代码更易读和更有意义,特别是如果您习惯于其他编程语言的话。

但是,八度不仅有金钱上的花费。Octave在自由的意义上也是免费的,它是自由的,但是我不认为这是对软件自由的谴责之地。

我仅在Octave中进行图像处理,发现该图像包适合我的需求。但是,我不知道您会怎样。因此,我对是否值得付出的答案是否定的,但其他人肯定会不同意。


23

首先,MATLAB是一种商业产品。因此,MATLAB中的所有功能几乎都是开箱即用的。所有核心功能都是可靠的,如果您正在开发一个特殊的项目,则MATLAB可能有一个附加组件,他们可以出售给您,从而为您添加了许多其他特定于域的.m文件。它并不便宜,但它可以正常工作,并且可以毫无怨言地完成工作。

Octave始终显示其开源,想要免费获取信息的根源。它是免费的,并且会提醒您每一次机会都是免费的。它是由对Windows充满热情的志愿者开发的。因此,Octave勉强在Windows上运行。令人惊讶的是,存在着如此多的MATLAB功能。

但是,这是摩擦。每当您尝试做一些琐碎的事情时,Octave都会突然以难以理解的微妙方式中断。糟糕-终端驱动程序在OpenGL层深处发生溢出。您无法打印。糟糕-图形地块的字体会产生奇怪的作用。祝你好运,找出原因。糟糕-Octave与其他一些晦涩的自由软件之间存在一些隐藏的依赖关系,因此它将无法编译。祝你好运。

八度音阶响应是嘿!它是免费软件!您拥有所有源代码,可以自己修复所有错误!也许如果我手上有无穷的时间和资源,我可以花所有的时间来修复自由软件中的错误,但是我个人却没有。如果我在学术界工作,我可能会。

因此,从根本上讲,选择MATLAB还是Octave的问题归结为一个问题。有趣的是,在商业版本和自由软件版本之间进行选择时,这个问题始终是相同的。

问题是:

你的钱比时间还多吗?


2
另一个问题是:您最终可能在哪些公司工作?出于相同的原因,可能是Matlab。
user276648

14

八度基本上是MATLAB的开源版本。就是这样写的。MATLAB具有非常好的GUI,这使它易于使用,但是OCTAVE的下一个稳定版本还将提供一个GUI,我已经在不稳定版本中对其进行了测试,并且看上去很棒。Octave的bug多得多,因为它是由一群志愿者开发和维护的,其中MATLAB的开发由行业提供了数百万美元的资金。我仍然是学生,并且正在使用学生版的MATLAB,但是我正在考虑在发布具有GUI的稳定版本后转到Octave。

MATLAB可能比Octave强大得多,并且算法运行速度更快,但是对于大多数应用程序来说,Octave绰绰有余,在我看来,Octave是一个完全免费的令人惊叹的工具,而Octave则完全免费。

我想说的是,虽然可以使用学术版本,但请使用MATLAB,但是切换到Octave应该是无缝的,因为它们使用完全相同的语法。

最后,还有SIMULINK的问题。如果您想进行仿真或控制系统设计(可能还有其他一百万种用途),则SIMULINK非常棒,并且随MATLAB一起提供。我认为没有什么比这更接近的了,尽管Scilab显然是“好的”开源替代品,但我还没有尝试过。

和平。


“ ...因为它是由一群志愿者开发和维护的,因此MATLAB的开发由工业界投入了数百万美元。” 项目中的金钱不是质量和无缺陷的因果关系。它们甚至可能没有关联。
gagarine

“他们使用完全相同的语法”不,他们没有。
克里斯·伦戈

8

我刚开始使用Octave。我已经看到人们使用Matlab。如上所述,一个主要区别是Octave具有命令行界面,而Matlab具有GUI。据我说,GUI非常适合调试。在Ocatve中,您必须执行命令以查看矩阵的长度等,但是在Matlab中,它可以使用一个良好的界面很好地显示所有内容。但是Octave是免费的,可以很好地完成我的基本任务。如果您确定只要做基本的事情,或者不确定现在需要什么,请使用Octave。您可以在真正需要时购买Matlab。


2
Octave的GUI目前处于测试阶段。执行八度时使用命令--force-gui。
ig34314年

6
...并且从Octave版本4开始,GUI是默认的UI。
Ruslan

7

令Matlab如此受欢迎和特别的是它在不同学科中的出色工具箱。因为您的主要目标是学习Matlab,所以使用Octave或Matlab并没有什么不同!

仅仅在没有任何出色工具箱(基本上取决于您的专业)的情况下购买Matlab并不是真正的合理费用!

您绝对可以从Octave有了一个良好的开端,并在Internet上关注有关Matlab的大量教程。


4

我想对Rody Oldenhuis的回答补充不多。我通常遵循这样的策略,即我编写的​​所有功能都应在Matlab中运行。

我针对以下用例在这两个系统上测试了一些特定功能:

a)八度不需要许可证服务器-例如,如果您的机构不支持本地许可证。在使用脚本的系统无法连接到Internet且要运行很长时间(在实验室的某个角落)并且被许多不同的用户使用的情况下,我曾经使用过它。备注:这与许可成本无关,而与相关技术问题有关。

b)Octave支持其他平台,例如Rasberry Pi(http://wiki.octave.org/Rasperry_Pi)-可能会派上用场。


3

嵌套函数和闭包现在已被许多语言(包括MATLAB)支持。JavaScript提倡将闭包作为一流的设计原则。

遗憾的是,Octave不支持闭包(具有词法作用域的嵌套函数)。

根据http://osdir.com/ml/octave-bug-tracker/2013-06/msg00210.html甚至可能给人以开发人员不想要或无法正确使用它的印象。

两种方法都会破坏很多代码。没有解决方法。


我不确定这是否正确。嵌套函数是在Octave中实现的,我发现它们比Matlab的函数更具通用性:例如,能够在脚本中声明函数(lambda除外),而上次尝试使用Matlab则无法实现。
MayeulC

@MayeulC 更具通用性的部分实际上是双向的。
沃尔夫冈·库恩

0

八度和Matlab有许多相似之处。但是Octave是命令行界面。您必须在命令提示符下键入每个命令,而matlab带有最好的GUI。我建议您首先使用matlab学生版;学习基础课程后,请使用gnu八度。现在,gui附带了gnu octave,但现在是开发版本。gnu八度有一些gui前端,例如guioctave,xoctave(非免费),DomainMath IDE等。


2
八度(3.7.5待定)的开发版本带有本机gui,看起来不错!
kjetil b halvorsen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.