284

我是一名了解PythonRuby和一些C的程序员,他正在尝试决定是学习GNU Octave还是MATLAB。我知道它们有很多共同点,但我不清楚语法有多相似,甚至数据结构有多相似。上面的链接显示了几个在语法上相似或相同的示例。整个语言都是这样吗?

我正在尝试学习该语言以进行更多的科学计算,可能会使用一些图像分析库。

此外,MATLAB 是否物有所值?

4

9 回答 9

241

我不会向您提供完整的差异列表,而是向您提供我对此事的看法。

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

这种态度让 Octave 完全失去了它的目的。Octave 背后的想法是(或者已经成为,我应该说,请参阅下面的评论)拥有一个运行 m-code 的开源替代方案。如果它试图变得“更好”,它就会试图变得不同,这与大多数人使用它的原因不符。以我的经验,运行在 MATLAB 中开发的东西永远不会一次性运行,除了非常简单、非常短的东西——对于任何相当大的函数,我总是需要翻译很多东西才能在 Octave 中运行,如果不要从头开始重写。怎么这么,实在看不出来。。。

此外,如果您学习 Octave,在 Octave 中允许使用很多在 MATLAB 中不允许使用的语法。含义——用 Octave 编写的代码在没有大量转换的情况下通常无法在 MATLAB 中运行。反过来也不兼容!

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

所以,我的建议:

  • 了解您的学校是否会为 MATLAB 付费。他们经常会。
  • 如果他们不这样做,并且如果您可以凑钱,请购买 MATLAB 并学习正确使用它。从长远来看,这是更好的决定。
  • 如果你真的拿不到钱——使用 Octave,但学习MATLAB 的语法并远离 Octave-only 语法。(见说明)

为什么最后一点?因为在科学领域,通常有完全用 MATLAB 编写的大型代码库。有教授、工程师、学生、专业编码员,还有很多人都知道 MATLAB 的所有复杂的血腥细节,而对 Octave 却知之甚少。

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

注意:Octave 可以在“传统模式”下运行(通过在启动 Octave 时包含 --traditional 标志),这使得在使用某些 Octave-only 语法时会出错。

于 2012-08-23T04:08:55.387 回答
84

Octave 的常见问题解答中提供了指向差异列表的更完整链接。理论上,在 Matlab 中运行的所有代码都应该在 Octave 中运行,而 Octave 开发人员将与 Matlab 的不兼容视为错误。所以理论上你的第一个问题的答案是肯定的。当然,所有软件都有错误,Octave 或 Matlab(是的,Matlab 也是)都不能避免它们。您可以报告它们,有人会尝试修复它们

Octave 也有额外的特性,其中大部分是额外的语法,在我看来,它们使代码更具可读性和更有意义,特别是如果您习惯于其他编程语言。

但 Octave 不仅仅是金钱成本。Octave 在自由的意义上也是自由的,它是自由的,但我不认为这是抱怨软件自由的地方。

我只在 Octave 中进行图像处理,发现图像包适合我的需要。然而,我不知道,你的会是什么。所以我对是否值得付出代价的回答是否定的,但肯定其他人会不同意。

于 2012-08-23T03:56:49.870 回答
25

首先,MATLAB 是一种商业产品。因此,MATLAB 中的所有内容几乎都是开箱即用的。所有核心功能都是可靠的,如果您正在处理一个特殊项目,那么 MATLAB 可能有一个附加组件,他们可以向您出售,为您添加许多额外的特定于域的 .m 文件。它并不便宜,但它确实有效,并且可以毫无怨言地完成工作。

Octave 始终显示其开源、信息想要免费的根源。它是免费的,它会提醒你它在每一个机会都是免费的。它是由热爱 Windows 的志愿者开发的。因此 Octave 勉强在 Windows 上运行。令人惊讶的是,存在如此多的 MATLAB 功能。

但这就是问题所在。每当您尝试做一些比琐碎复杂的事情时,Octave 会突然以微妙且难以理解的方式中断。糟糕——终端驱动程序在 OpenGL 层深处发生了溢出。你不能打印。哎呀——图形用它们的字体做了奇怪的事情。祝你好运找出原因。糟糕——Octave 和其他一些晦涩难懂的免费软件之间存在一些隐藏的依赖关系,所以它不会编译。祝你好运,弄清楚它是什么。

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

因此,选择 MATLAB 还是 Octave 的核心问题归结为一个问题。有趣的是,在商业和自由软件变体之间进行选择时,这个问题总是相同的。

问题是:

你的钱比时间多吗?

于 2015-12-22T21:18:09.207 回答
14

Octave 基本上是 MATLAB 的开源版本。就是这样写的。MATLAB 有一个非常好的 GUI,使它更容易使用,但是 Octave 的下一个稳定版本也将有一个 GUI,我在不稳定的版本中测试过,看起来很棒。Octave 的漏洞更大,因为它是由一群志愿者开发和维护的,其中 MATLAB 的开发得到了行业数百万美元的资助。我仍然是学生,并且正在使用学生版的 MATLAB,但我正在考虑在带有 GUI 的稳定版本发布后转到 Octave。

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

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

最后,还有Simulink的问题。如果您想做仿真或控制系统设计(可能还有一百万种其他用途),Simulink 非常棒,它带有 MATLAB。我认为没有其他人能接近这一点。尽管 Scilab 显然是一个“好的”开源替代品,但我还没有尝试过。

于 2014-05-14T19:11:54.553 回答
8

我刚开始使用 Octave。我见过人们使用 MATLAB。上面提到的一个主要区别是 Octave 有一个命令行界面,而 MATLAB 有一个 GUI。据我说,有一个 GUI 非常适合调试。

在 Octave 中,您必须执行命令才能查看矩阵的长度等,但在 MATLAB 中,它使用良好的界面很好地显示了所有内容。但是 Octave 是免费的,并且非常适合我所做的基本任务。如果你确定你要做的只是基本的东西,或者你不确定你现在需要什么,那么选择 Octave。当您真正需要时,您可以为 MATLAB 付费。

于 2013-06-27T14:11:30.997 回答
7

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

只是去购买没有任何酷炫工具箱的 MATLAB(这基本上取决于您的专业)并不是一个合理的费用!

您绝对可以从 Octave 开始,并在 Internet 上学习大量关于 MATLAB 的教程。

于 2012-08-23T14:52:31.520 回答
4

我想对罗迪·奥尔登胡斯的回答没有什么要补充的。我通常遵循我编写的所有函数都应该在 Matlab 中运行的策略。

我在两个系统上测试的一些特定功能,用于以下用例:

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

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

于 2016-01-16T19:12:24.123 回答
3

许多语言现在都支持嵌套函数和闭包,包括 MATLAB。JavaScript 将闭包推广为一流的设计原则。

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

根据错误:尚不支持嵌套函数的句柄,甚至可能会产生开发人员不想要或无法正确处理的印象。顺便说一句,这个 2013 年的错误已在 2020 年修复。

这将破坏很多代码,两种方式。没有解决方法。

于 2013-12-20T10:49:56.990 回答
-1

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

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

于 2012-08-23T15:50:33.210 回答