Octave和MATLAB之间的区别?

lsw*_*wim 265 matlab octave

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

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

另外,Matlab值得花费吗?我没有很多钱,但如果图书馆或其他地方存在重大差异,我相信我能找到钱.

Rod*_*uis 231

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

如果你仔细阅读你提供的维基页面,你会经常看到像"Octave支持两者,而MATLAB需要第一个"等句子.这表明Octave的开发人员试图使Octave语法"优于" MATLAB.

这种态度使得Octave完全失去了目的.Octave背后的想法是(或者已经成为,我应该说,见下面的评论)有一个​​开源替代品来运行m代码.如果它试图"更好",那么它会尝试变得不同,这与大多数人使用它的原因不一致.根据我的经验,运行在MATLAB中开发的东西并不是一次性工作,除了非常简单,非常简短的东西 - 对于任何相当大的功能,我总是要在Octave中工作之前翻译很多东西,如果不要从头开始重写.如何更好,我真的没有看到......

另外,如果你学习Octave,那么Octave中允许的语法很多,这在MATLAB中是不允许的.含义 - 在没有大量转换的情况下,用Octave编写的代码通常在MATLAB中不起作用.它反过来也不兼容!

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

所以,我的建议:

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

为什么这最后一点?因为在科学中,通常有大量的代码库完全用MATLAB编写.有教授,工程师,学生,专业程序员,很多人都知道MATLAB的所有错综复杂的细节,而不是Octave.

如果你找到一份新工作,并且新办公室的每个人都会说西班牙语,那么每个人都要求他们从那时开始讲英语,这是一种骄傲,因为不会说西班牙语.与MATLAB和Octave相同.

注意 - 如果所有的downvoters都可以就他们的论点和不同意我的理由发表评论,那就太棒了:)

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

  • 关于缺少JIT,它已经在Octave的开发版本上实现.我不知道什么时候会发布但是我已经构建了它,而且循环代码的区别很大.为了远离Octave only语法,有Octave的--traditional选项.我并不是说Matlab代码总是在Octave中运行,但每次发布都会变得更好,兼容性是他们的优先事项之一(更不用说甚至不同的Matlab版本之间也存在足够的不兼容性). (24认同)
  • @RodyOldenhuis它不应该是克隆.Octave开发并没有这样开始,只是不断向用户提交修补程序的方向越来越多http://www.sciencedirect.com/science/article/pii/S0959152412000911 (19认同)
  • 而你所谓的是坚持一种优越的语法......如果你有自由改变Matlab,添加额外的语法或不同的功能,不是吗?这些是用户实现的功能,并且不会破坏兼容性.更常见的是,新事物因此被拒绝.这个想法是Matlab语言是Octave语言的一个子集.如果您认为这个想法很棒,那么您应该加入,因为它是一个社区项目,并且具有社区困扰开发的功能. (13认同)
  • 任何编程工具的制造商是否成功地对错误负责? (9认同)
  • @carandraug:啊,地狱吧.正确性比所有:)更重要 (6认同)
  • @RodyOldenhuis抱歉,对stackoverflow不熟悉,并在准备好之前发表评论.然后达到了大小限制.为了缩短它*自从3.4系列开始以来,tilde-ignore-output已经输出了,所以你必须使用3.2.X版本或更旧版本.*@ -directory类从3.2开始实现,它们适用于我.但是从那以后对它们进行了许多改进(classdef也在开发中,但我还没有尝试过).嵌套函数在开发中实现.+ - 包装不是,但似乎没有人抱怨.自2005年以来,Octave的包装含有pkg. (4认同)
  • @carandraug如果我有这种自由,我会写Python. (3认同)
  • @RodyOldenhuis 我不会编辑您关于法律段落的答案,因为显然已经有一场小型编辑战。如果你同意,我会把它留给你。你读过 Matlab 的 EULA 吗?第 16 节和第 18 节(责任限制和免责声明)与 GPL 丢弃责任几乎相同,这是您得出结论的基础。任何对 Matlab 的 EULA 的法律解释都应使 Mathworks 负责,也应适用于 GPL。 (2认同)

car*_*aug 77

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

Octave还有额外的功能,大多数是额外的语法,在我看来,这使得代码更具可读性和更有意义,特别是如果你习惯了其他编程语言.

但是Octave不仅仅是货币成本.Octave在自由意义上也是免费的,这是自由的,但我不认为这是嘲笑软件自由的地方.

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


joh*_*yrd 21

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

Octave始终展示其开源,信息希望成为自由的根源.它是免费的,它会提醒你,每次机会都是免费的.它是由热爱Windows的志愿者开发的.因此,Octave勉强在Windows上运行.令人惊讶的是,尽管存在许多MATLAB功能.

但这就是问题所在.无论何时你试图做一些比复杂的事情更重要的事情,Octave突然以微妙而难以理解的方式打破.糟糕 - 终端驱动程序在OpenGL层的某个深处有溢出.你无法打印.哎呀 - 人物图用他们的字体做了奇怪的事情.祝你好运找出原因.哎呀 - 在Octave和其他一些不起眼的自由软件之间存在一些隐藏的依赖关系,因此无法编译.祝你好运搞清楚它是哪个.

而Octave的回应是嘿!这是免费软件!你有所有源代码,你可以自己解决所有这些错误!也许如果我手上有无限的时间和资源,我可以把所有时间花在修复自由软件中的bug上,但我个人却没有.如果我在学术界工作,我可能会.

因此,在核心问题上,选择MATLAB或Octave的问题归结为一个问题.有趣的是,在商业版和免费软件版本之间进行选择时,这个问题总是一样的.

问题是:

你有比时间更多的钱吗?

  • 另一个问题是:您最终可能在哪些公司工作?可能是Matlab出于同样的原因. (2认同)

Jon*_*nny 14

Octave基本上是MATLAB的开源版本.它被写成了那样.MATLAB有一个非常好的GUI,使它更容易使用,但OCTAVE的下一个稳定版本也将有一个GUI,我已经在不稳定版本中测试过,看起来很棒.Octave更加错误,因为它是由一群志愿者开发和维护的,其中MATLAB的开发由行业资助数百万美元.我还是学生,正在使用MATLAB的学生版本,但是一旦发布了带有GUI的稳定版本,我正在考虑转向Octave.

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

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

最后,还有SIMULINK的问题.如果您想进行模拟或控制系统设计(可能有一百万种其他用途),SIMULINK非常棒,并附带MATLAB.我不认为任何其他人接近这一点,虽然Scilab显然是一个"好"的开源替代品,我还没有尝试过.

和平.

  • “……因为它是由一群志愿者开发和维护的,而 MATLAB 的开发得到了业界数百万美元的资助。” 项目的资金量并不是质量和无错误的因果关系。它们甚至可能不存在相关性。 (2认同)

sac*_*inr 8

I just started using Octave. And I have seen people use Matlab. And one major difference as mentioned above is that Octave has a command line interface and Matlab has a GUI. According to me having a GUI is very good for debugging. In Ocatve you have to execute commands to see what is the length of a matrix is etc, but in Matlab it nicely shows everything using a good interface. But Octave is free and good for the basic tasks that I do. If you are sure that you are going to do just basic stuff or you are unsure what you need right now, then go for Octave. You can pay for the Matlab when you really feel the need.

  • ...从Octave版本4开始,GUI是默认的UI. (6认同)
  • Octave有一个目前处于测试阶段的GUI.执行八度时使用命令--force-gui. (2认同)

use*_*846 7

这件事让Matlab如此受欢迎,特别是它在不同学科中的出色工具箱.由于您的主要目标是学习Matlab,因此如果您使用Octave或Matlab,则没有任何不同!

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

你绝对可以在Octave上有一个良好的开端,并在互联网上关注Matlab的大量教程.