【问题标题】:Why/when should I prefer MATLAB over Octave?为什么/何时我应该更喜欢 MATLAB 而不是 Octave?
【发布时间】:2011-04-01 21:10:30
【问题描述】:

在我们的小额操作中,我们需要先用某种高级语言对算法进行原型设计,然后再提交嵌入式硬件上的 C 实现。

到目前为止,我们一直在使用 MATLAB 来做到这一点,但许可成本开始受到影响。我们正在考虑将我们的 MATLAB 代码移植到 Octave。

有什么特殊原因这样做?我们是否会破坏任何兼容性,尤其是如果我们有坚持使用 MATLAB 的外部合作伙伴?有没有我们可以预料到的性能损失?

【问题讨论】:

  • 您应该考虑迁移和培训的成本。
  • @Mikhail:因为与使用 Matlab 的合作伙伴进行了交互。
  • @Jonas:也可以说服外部合作伙伴...如果他们看到每个人都在谈论迁移到 Python...
  • 这个问题仍然经常出现在相关主题中,但它现在已经过时了(10多年)。

标签: matlab octave


【解决方案1】:

我也测试过 octave 和 R。

关于八度: 八度语法的相似性给我留下了深刻的印象。将我的 MATLAB 脚本传输到 octave 并没有花费我太多时间。 Meanwihile 我在打印标记和 errorbar 时遇到了一个特殊问题,该问题由 Jarno Rajahalme 在 nabble 修复并更改 xtick 字体大小,这是我在 nabble 的问题回复中得到的解决方法。所以它仍然有一些错误可以通过一些努力来克服。如果您遇到一些问题,您可以尝试 nabble 邮件论坛:help-octave@octave.org。顺便说一句,我的团队无法适应(用户友好)它,例如他们适应 MATLAB,所以我们仍在使用 MATLAB。由于 MATLAB 是在 gnuplot 下构建的,因此纠正其错误的另一种方法是编辑生成的 gnuplot 文件。我找到的最好的 IDE 是 QtOctave,我在“Remember Blog”中做了一个简短的评论。

关于 R: 根据 SciViews 的一项研究,R 的性能优于 MATLAB 和 octave。我对 R 没有太多经验。我研究了 mclust 包,写了一篇关于 R 中的 EM Clustering 的 wikibook 章节。顺便说一下,他们似乎有一个非常活跃的社区。因此,您可能会发现第三方的提案包,这些包并不是 IMO 标准化的。我发现的最好的 IDE 是用于 eclipse、JGR(R 的 Java GUI)和 emacs 的 StatET 插件。尽管学习一门新的编程语言需要时间成本,但如果我选择一个开源平台来制作我的实验图形和一些数据挖掘分析,我会尝试 R。

【讨论】:

    【解决方案2】:

    我已成功地将一些线性回归和二次编程应用程序移植到 Octave。

    线性回归(反斜杠运算符)无需任何调整即可工作。在二次规划的情况下,我不得不从 fmincon() 切换到 sqp(),得到类似的结果。

    Octave 中的工具箱和 GUI 确实还不够成熟(我花了很多时间在基本的东西上),尽管它在过去两年中取得了迅速的进展。

    【讨论】:

      【解决方案3】:

      2008 年,我尝试做同样的事情。我很快就注意到了以下表演障碍:

      • 工具箱不够完整,也没有经过很好的测试。特别是我的工作严重依赖的图像处理工具箱(最大的阻碍是 imtransform 没有实现)。
      • 与 Matlab 相比,Octave 调试器和分析器比较原始。
      • 如果您与他人合作,可能很难让他们做出改变。
      • 如果您使用第三方工具箱,您只能自行让它们发挥作用。
      • Octave 的图不符合出版质量。

      但我不得不说,Octave 与 Matlab 的兼容性给我留下了深刻的印象,如果您对 Matlab 的使用是基本的,那么您可能会很幸运。最后是在 2008 年,两年后情况会发生很大变化。

      【讨论】:

      • 我认为这个问题与 MATLAB 用户无关。有一个 FOSS 替代方案真是太好了,并且想要为此努力的人们这样做。人们可以随心所欲地利用自己的时间。批评给定程序的用户是幼稚的。
      • 对于任何感兴趣的人,它遵循 Octave 3.8 Windows 安装程序的链接:mxeoctave.osuv.de
      • 这些问题可以通过bountysource.com/teams/gnu-octave/issues 网站解决,费用比一个 Matlab 许可证低十倍。
      • 从 2017 年开始,您真的应该试一试。您会惊讶地发现,如果不是全部的话,您的 MATLAB 脚本将开箱即用(除了特定的工具箱),您必须花一下午时间来纠正一些小的不兼容性。与在免许可的开源软件上进行开发相比,一个下午的时间是多少?
      【解决方案4】:

      Octave 对 matlab 的语法进行了多项改进,例如您可以说 endif endforendfunction 而不仅仅是 end,这使得调试更加容易。

      Octave 还允许您动态生成函数,并在脚本和函数文件中定义多个函数。这比 matlab 的一个文件一个函数的方法要好得多。

      最后,octave 有parcellfunpararrayfun 是matlab 完全没有的非常强大的并行处理工具。 matlab 中有一个parfor,但我认为这不是最好的方法。

      octave 的缺点是它们在工具箱上稍稍落后,但如果你看一下,你会发现类似的东西。 fsolvelsode 似乎有点慢,但更健壮,出于某种原因,在八度音阶中。对某些人来说,一个大问题往往是缺少符号链接和 DAQ 工具箱,但无论如何这些东西都是专有的。

      Python/Numpy 绝对值得一试:它更强大,但它们的语法针对更复杂的代码片段。

      【讨论】:

      • 我刚试过,据我所知,windows 不支持 pararrayfun/parcellfun (当然,没有 Cygwin 本身就不支持)failed to open pipe: pipe: not supported on this system。我正在使用预构建的 Windows 二进制文件 Octave_3.6.1_VS2010
      • 是的,我想这取决于 shell 脚本在 Windows 和 Linux 中运行方式的不同,因为 pararrayfun/parcelfun 通过产生一些子进程来工作。我不知道这将如何在 Windows 上工作,我什至不确定 Windows 二进制文件是在 shell 中执行还是被模拟?
      • 太糟糕了,cellfun/arrayfunc 的(便携式)并行版本似乎是个好主意……也许 MATLAB 也应该这样做:)
      • @user1240280 : 恕我直言,能够在脚本中定义函数是 Octave 相对于 Matlab 的巨大优势。它使您能够以模块化方式编写整个程序并将其保存在一个文件中,因此您可以轻松地将其发送给自己或他人。但是 Octave 缺少 GUI 是一个很大的缺点。
      • @stefan smith:Octave 现在有一个原生 GUI,仍然是实验性的,但根据我最近的经验,它非常有用并且或多或少稳定。你可以试试octave --force-gui
      【解决方案5】:

      对于您的用例,octave 可能优于 MATLAB:

      • 它的语法可以让你 编写稍微接近的代码 C. 即 +=, -=, 默认函数 参数值,双引号字符串 文字等...

      • 假设您的芯片比 台式机处理器,速度可能会 不是问题。

      • 因为它的启动速度远远快于 matlab,比较实用 集成到 shell 脚本中进行测试。

      • 对于原型设计,绘图绰绰有余;人们只是习惯了 MATLAB 的风格。

      • 工具箱的相对缺乏并不是 很重要,因为他们不会 在您的目标平台上可用 无论如何。

      我两者都用,但每当我切换时,我都会错过另一个功能。

      【讨论】:

        【解决方案6】:

        请注意,Octave 支持 Matlab 中不存在的语言结构(例如,自增运算符、do-until 语句等)。这使得将在 Octave 上开发的代码(由不熟悉 Matlab 限制的人)移植到 Matlab 环境有时很烦人。

        还有一些其他的limitations/differences at Octave FAQ

        【讨论】:

          【解决方案7】:

          在 MATLAB 上有一本很好的 WikiBook,带有 list of differences between MATLAB and Octave

          根据我的经验,核心 MATLAB 可以很好地移植到 Octave,但工具箱具有不同级别的兼容性,因此您的决定取决于您要编码的具体内容。

          Octave 缺少的一些东西,AFAIK,是与 .NET 代码和 gui 构建器 guide 的紧密集成(尽管 Octave 可以使用许多其他 GUI 构建工具)。

          另外,正如其他人所指出的,您使用 MATLAB 支付的大部分费用是流畅的界面和调试/分析工具。经验丰富的编码人员可能可以使用替代方案进行管理,但新手可能会遇到困难。

          【讨论】:

            【解决方案8】:

            看看开源替代方案如何适用于统计数据而不适用于数值分析是很有趣的。 R(统计学的八度音阶)现在比商业的 S-plus(统计学的 matlab)更受欢迎。在其他答案中提到的作为不从 matlab 切换的原因的问题也适用于 R。但是每个人仍然刚刚开始贡献,现在 R 是标准,具有更好的图形、更好的软件包并且没有更多的供应商锁定。

            因此,如果您可以克服囚徒困境,那么您也可以更喜欢 octave 而不是 matlab。

            【讨论】:

            • 您应该将此放入评论中,而不是答案中。
            【解决方案9】:

            Octave 没有guide,这使得构建 GUI 变得超级容易。我经常使用指南为我的同事制作非 MATLAB 工具。

            【讨论】:

            • Octave 有对应的指南吗?这就是我被否决的原因吗?
            【解决方案10】:

            如果你负担得起的话,你绝对应该更喜欢 Matlab 而不是 Octave。

            我在 Octave 方面没有太多经验,但如果您的代码使用 Matlab 工具箱、花哨的绘图或 Matlab gui,我预计会出现问题。

            我希望它类似于 OpenOffice 与 MS Office。大部分兼容,但只是不同,足以让您头疼。

            【讨论】:

              【解决方案11】:

              就在我的脑海中:

              1. 正如我在两个学期前尝试在机器学习课程中做作业时发现的那样,Octave 没有许多工具箱。
              2. Octave 的调试器要差得多。这几乎是不可能的。
              3. Matlab 对于许多类型的操作要快得多。
              4. Matlab 的绘图要好得多。
              5. Octave 没有原生 GUI。 Octave 有 GUI,但不如 Matlab 的原生 GUI。

              【讨论】:

              • 第 5 点 +1。我什至还没有找到一个可以安装并且工作可靠的免费的 Octave GUI,更不用说一个好的 GUI。 SciLab 可能是 Matlab 的一个很好的替代品,但我不知道它在第 1-4 点方面有多好。
              猜你喜欢
              • 2022-01-08
              • 2017-01-01
              • 2011-05-10
              • 2017-12-21
              • 1970-01-01
              • 1970-01-01
              • 2013-12-01
              • 2013-04-30
              • 2011-02-16
              相关资源
              最近更新 更多