我是一名了解Python、Ruby和一些C的程序员,他正在尝试决定是学习GNU Octave还是MATLAB。我知道它们有很多共同点,但我不清楚语法有多相似,甚至数据结构有多相似。上面的链接显示了几个在语法上相似或相同的示例。整个语言都是这样吗?
我正在尝试学习该语言以进行更多的科学计算,可能会使用一些图像分析库。
此外,MATLAB 是否物有所值?
我不会向您提供完整的差异列表,而是向您提供我对此事的看法。
如果您仔细阅读您提供的 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 相同。
注意:Octave 可以在“传统模式”下运行(通过在启动 Octave 时包含 --traditional 标志),这使得在使用某些 Octave-only 语法时会出错。
Octave 的常见问题解答中提供了指向差异列表的更完整链接。理论上,在 Matlab 中运行的所有代码都应该在 Octave 中运行,而 Octave 开发人员将与 Matlab 的不兼容视为错误。所以理论上你的第一个问题的答案是肯定的。当然,所有软件都有错误,Octave 或 Matlab(是的,Matlab 也是)都不能避免它们。您可以报告它们,有人会尝试修复它们
Octave 也有额外的特性,其中大部分是额外的语法,在我看来,它们使代码更具可读性和更有意义,特别是如果您习惯于其他编程语言。
但 Octave 不仅仅是金钱成本。Octave 在自由的意义上也是自由的,它是自由的,但我不认为这是抱怨软件自由的地方。
我只在 Octave 中进行图像处理,发现图像包适合我的需要。然而,我不知道,你的会是什么。所以我对是否值得付出代价的回答是否定的,但肯定其他人会不同意。
首先,MATLAB 是一种商业产品。因此,MATLAB 中的所有内容几乎都是开箱即用的。所有核心功能都是可靠的,如果您正在处理一个特殊项目,那么 MATLAB 可能有一个附加组件,他们可以向您出售,为您添加许多额外的特定于域的 .m 文件。它并不便宜,但它确实有效,并且可以毫无怨言地完成工作。
Octave 始终显示其开源、信息想要免费的根源。它是免费的,它会提醒你它在每一个机会都是免费的。它是由热爱 Windows 的志愿者开发的。因此 Octave 勉强在 Windows 上运行。令人惊讶的是,存在如此多的 MATLAB 功能。
但这就是问题所在。每当您尝试做一些比琐碎复杂的事情时,Octave 会突然以微妙且难以理解的方式中断。糟糕——终端驱动程序在 OpenGL 层深处发生了溢出。你不能打印。哎呀——图形用它们的字体做了奇怪的事情。祝你好运找出原因。糟糕——Octave 和其他一些晦涩难懂的免费软件之间存在一些隐藏的依赖关系,所以它不会编译。祝你好运,弄清楚它是什么。
八度响应是嘿!它是免费软件!您拥有所有源代码,并且您可以自己修复所有这些错误!也许如果我手头有无限的时间和资源,我可以把所有的时间都花在修复自由软件中的错误上,但我个人没有。如果我在学术界工作,我可能会。
因此,选择 MATLAB 还是 Octave 的核心问题归结为一个问题。有趣的是,在商业和自由软件变体之间进行选择时,这个问题总是相同的。
问题是:
你的钱比时间多吗?
Octave 基本上是 MATLAB 的开源版本。就是这样写的。MATLAB 有一个非常好的 GUI,使它更容易使用,但是 Octave 的下一个稳定版本也将有一个 GUI,我在不稳定的版本中测试过,看起来很棒。Octave 的漏洞更大,因为它是由一群志愿者开发和维护的,其中 MATLAB 的开发得到了行业数百万美元的资助。我仍然是学生,并且正在使用学生版的 MATLAB,但我正在考虑在带有 GUI 的稳定版本发布后转到 Octave。
MATLAB 可能比 Octave 强大得多,并且算法运行得更快,但对于大多数应用程序来说,Octave 绰绰有余,而且在我看来,它是一个完全免费的惊人工具,而 Octave 是完全免费的。
我会说使用 MATLAB,而您可以使用学术版本,但切换到 Octave 应该是无缝的,因为它们使用完全相同的语法。
最后,还有Simulink的问题。如果您想做仿真或控制系统设计(可能还有一百万种其他用途),Simulink 非常棒,它带有 MATLAB。我认为没有其他人能接近这一点。尽管 Scilab 显然是一个“好的”开源替代品,但我还没有尝试过。
我刚开始使用 Octave。我见过人们使用 MATLAB。上面提到的一个主要区别是 Octave 有一个命令行界面,而 MATLAB 有一个 GUI。据我说,有一个 GUI 非常适合调试。
在 Octave 中,您必须执行命令才能查看矩阵的长度等,但在 MATLAB 中,它使用良好的界面很好地显示了所有内容。但是 Octave 是免费的,并且非常适合我所做的基本任务。如果你确定你要做的只是基本的东西,或者你不确定你现在需要什么,那么选择 Octave。当您真正需要时,您可以为 MATLAB 付费。
使 MATLAB 如此受欢迎和特别的原因在于它在不同学科中的出色工具箱。由于您的主要目标是学习 MATLAB,因此使用 Octave 或 MATLAB 并没有什么不同!
只是去购买没有任何酷炫工具箱的 MATLAB(这基本上取决于您的专业)并不是一个合理的费用!
您绝对可以从 Octave 开始,并在 Internet 上学习大量关于 MATLAB 的教程。
我想对罗迪·奥尔登胡斯的回答没有什么要补充的。我通常遵循我编写的所有函数都应该在 Matlab 中运行的策略。
我在两个系统上测试的一些特定功能,用于以下用例:
a) Octave 不需要许可证服务器 - 例如,如果您的机构不支持本地许可证。我曾经在我使用脚本的系统没有连接到互联网并且要运行很长时间(在实验室的一个角落)并被许多不同用户使用的情况下使用它。备注:这不是关于许可成本,而是关于相关的技术问题。
b) Octave 支持其他平台,例如 Raspberry Pi ( http://wiki.octave.org/Rasperry_Pi ) - 这可能会派上用场。
许多语言现在都支持嵌套函数和闭包,包括 MATLAB。JavaScript 将闭包推广为一流的设计原则。
遗憾的是,Octave 不支持闭包(具有词法作用域的嵌套函数)。
根据错误:尚不支持嵌套函数的句柄,甚至可能会产生开发人员不想要或无法正确处理的印象。顺便说一句,这个 2013 年的错误已在 2020 年修复。
这将破坏很多代码,两种方式。没有解决方法。
Octave 和 MATLAB 有很多相似之处。但是 Octave 是一个命令行界面。您必须在命令提示符下键入每个命令,而 MATLAB 带有最好的 GUI。我建议你先使用 MATLAB 学生版;在学习了基本课程后,永久使用 GNU Octave。
现在 GNU Octave 带有一个 GUI,但它现在是一个开发版本。GNU Octave 有一些 GUI 前端,例如 guioctave、xoctave(不是免费的)、DomainMath IDE等。