为什么/我应该什么时候比八度更喜欢MATLAB?

在我们的鞋子操作中,我们需要在embedded式硬件上实现一个C实现之前,用一些更高级的语言对algorithm进行原型devise。

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

有没有特别的理由这样做? 我们会打破任何兼容性,特别是如果我们有坚持使用MATLAB的外部合作伙伴? 我们可以预期会有什么performance处罚吗?

2008年,我尝试了同样的事情。 我很快注意到以下显示塞子:

  • 工具箱不完整,testing也不完善。 特别是我的作品严重依赖的image processing工具箱(大展示塞是没有实现imtransform)。
  • Octavedebugging器和分析器与Matlab相比是原始的。
  • 如果你和别人一起工作,可能很难让他们改变。
  • 如果你使用第三方工具箱,你自己让他们工作。
  • 八度的情节不是出版质量。

但是我不得不说,我对Octave是如何与Matlab兼容,如果你使用Matlab是基本的,你可能会很幸运。 最后是2008年,两年内事情可以改变很多。

就在我头顶上:

  1. Octave没有很多工具箱,正如我在两个学期之前在机器学习课程中尝试做功课时发现的那样。
  2. Octave的debugging器非常低劣。 与之合作几乎是不可能的。
  3. 对于许多types的操作,Matlab要快得多。
  4. Matlab的图很好。
  5. 八度没有一个本地的graphics用户界面。 有Octave的graphics用户界面,但它们不如Matlab的原生graphics用户界面。

我testing过八度和R了。

关于八度:八度语法的相似性让我印象深刻。 把我的MATLAB脚本传送到八度并不需要太多时间。 同样,我在打印标记时遇到了一个特殊的问题,这个问题是由Jarno Rajahalme在nabble中修正的,并且改变了xtick字体大小,这个解决方法我在nabble中得到了一个问题答案。 所以还是有一些可以克服的问题。 如果你遇到一些问题,你可以尝试nabble邮件论坛:help-octave@octave.org。 顺便说一句,我的团队不能适应(用户友好),如适应MATLAB,所以我们仍然使用MATLAB。 由于MATLAB是在gnuplot下构build的,另一种纠正错误的方法是编辑生成的gnuplot文件。 我发现最好的IDE是QtOctave,我在“Remember Blog”中做了一个简短的回顾。

关于R:根据SciViews的研究,R的性能要优于MATLAB和倍频程。 我对R没有太多经验。我研究了mclust包,在R里写了关于EM集群的wikibook章节。顺便说一句,他们似乎有一个非常活跃的社区。 所以你可能会发现第三方包的build议,这不是国际海事组织如此标准化。 我发现的最好的IDE是Eclipse的StatET插件,JGR(Java GUI for R)和emacs。 尽pipe学习一种新的编程语言的时间成本,如果我select一个开源平台来做我的实验graphics和一些数据挖掘分析,我会尝试R.

Octave在matlab上有几个语法上的改进,例如你可以说endif endforendfunction而不仅仅是end ,这使得debugging更容易。

Octave还允许您dynamic生成函数,并在脚本和函数文件中定义多个函数。 这比matlab的单一文件一function的方法更好。

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

八度的缺点是,他们稍微落后于工具箱,但如果你看,你可以find类似的东西。 fsolvelsode似乎有点慢一些,但是由于某种原因,它的lsode更加稳定。 对于一些人来说也是一个很大的失望往往是缺less符号链接和DAQ工具箱,但是这些东西无论如何都是专有的。

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

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

对于你的用例,八度可能会优于MATLAB:

  • 它的语法可以让你编写稍微靠近C的代码。ie + =, – =,默认函数参数值,双引号string等等。

  • 假设你的芯片比台式机处理器慢,速度可能不成问题。

  • 由于它的启动速度比matlab快得多,因此将其集成到shell脚本中以进行testing更为实用。

  • 对于原型devise来说,绘图已经足够了。 人们只是习惯了MATLAB的风格。

  • 工具箱的相对缺乏并不是什么大问题,因为无论如何它们都不会在目标平台上可用。

我同时使用,每当我切换时,我都会错过另一个的特征。

MATLAB上有一本很好的WikiBook,其中列出了MATLAB和Octave之间的区别 。

根据我的经验,核心MATLAB可以很好的移植到Octave,但是工具箱有不同程度的兼容性,所以你的决定取决于你想要编码的是什么。

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

另外,正如其他人指出的那样,用MATLAB支付的大部分成本都是光滑的界面和debugging/分析工具。 有经验的编码人员可能可以pipe理替代scheme,但新手可能会很困难。

看看开源替代品如何适用于统计,而不是数值分析,这很有趣。 R(统计的八度)现在比商业S-plus(统计的matlab)要受欢迎。 所提到的问题是不能从其他答案中find的matlab切换的原因也适用于R.但是仍然每个人都开始贡献,现在R是标准,具有更好的graphics,更好的包和更多的供应商locking。

所以,如果你能跨过囚徒困境,你也可以select八度以上的matlab。

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

Octave常见问题还有一些其他限制/差异 。

如果你能负担得起,你应该更喜欢Matlab到八度。

我没有太多的Octave经验,但如果你的代码使用Matlab工具箱,花式图或者Matlab gui,我会期待一些问题。

我期望它像OpenOffice与MS Office一样。 大多数兼容,但只是不同,让你头痛。

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

线性回归(反斜杠运算符)没有任何调整。 在二次编程的情况下,我不得不从fmincon()切换到sqp() ,给出类似的结果。

尽pipe如此,Octave的工具箱和graphics用户界面(GUI)确实还不太成熟(我花了很多时间在基本的东西上),尽pipe在过去的两年里它已经取得了很大的进步。