在我们的小额操作中,我们需要先用一些高级语言对算法进行原型设计,然后再在嵌入式硬件上使用 C 实现。
到目前为止,我们一直在使用 MATLAB 来做到这一点,但许可成本开始受到影响。我们正在考虑将我们的 MATLAB 代码移植到 Octave。
有什么特别的理由不这样做吗?我们是否会破坏任何兼容性,尤其是如果我们有坚持使用 MATLAB 的外部合作伙伴?我们可以期待任何性能损失吗?
2008 年,我尝试做同样的事情。我很快注意到以下节目停止者:
但我不得不说,Octave 与 Matlab 的兼容性给我留下了深刻的印象,如果你对 Matlab 的使用是基本的,你可能会很幸运。最后是在 2008 年,两年后情况会发生很大变化。
就在我的脑海中:
我也测试了八度和R。
关于八度:八度语法的相似性给我留下了深刻的印象。将我的 MATLAB 脚本传输到 octave 并没有花费我太多时间。Meanwihile 我在打印标记和 errorbar 时遇到了一个特殊问题,该问题由 Jarno Rajahalme 在 nabble 修复并更改 xtick 字体大小,这是我在 nabble 的问题回复中得到的解决方法。所以它仍然有一些错误可以通过一些努力来克服。如果您遇到一些问题,您可以尝试 nabble 邮件论坛:help-octave@octave.org。顺便说一句,我的团队无法适应(用户友好)它,例如他们适应 MATLAB,所以我们仍在使用 MATLAB。由于 MATLAB 是在 gnuplot 下构建的,因此纠正其错误的另一种方法是编辑生成的 gnuplot 文件。我发现的最好的 IDE 是 QtOctave,我在“
关于 R:根据 SciViews 的一项研究,R 的性能优于 MATLAB 和 octave。我对 R 没有太多经验。我研究了 mclust 包,写了一篇关于 R 中 EM Clustering 的 wikibook 章节。顺便说一下,他们似乎有一个非常活跃的社区。因此,您可能会发现第三方的提案包,这些包并不是 IMO 标准化的。我发现的最好的 IDE 是用于 eclipse、JGR(R 的 Java GUI)和 emacs 的 StatET 插件。尽管学习一门新的编程语言需要时间成本,但如果我选择一个开源平台来制作我的实验图形和一些数据挖掘分析,我会尝试 R。
Octave 在 matlab 上有几个语法改进,例如你可以说endif
endfor
andendfunction
而不是 just end
,这使得调试更容易。
Octave 还允许您动态生成函数,并在脚本和函数文件中定义多个函数。这比 matlab 的一个文件一个函数的方法要好得多。
最后,octave 具有matlab 完全缺乏parcellfun
的pararrayfun
非常强大的并行处理工具。matlab中有一个parfor
,但在我看来这不是最好的方法。
octave 的缺点是它们在工具箱上稍微落后,但如果你看一下,你会发现类似的东西。fsolve
由于某种原因,在八度音阶中lsode
看起来有点慢,但更健壮。对某些人来说,一个大问题往往是缺少符号链接和 DAQ 工具箱,但无论如何这些东西都是专有的。
Python/Numpy 绝对值得一试:它更强大,但它们的语法针对更复杂的代码片段。
Octave 没有guide
,这使得构建 GUI 非常容易。我经常使用指南为我的同事制作非 MATLAB 工具。
对于您的用例,octave 可能优于 MATLAB:
它的语法允许您编写更接近 C 的代码。即 +=、-=、默认函数参数值、双引号字符串文字等...
假设您的芯片比台式机处理器慢,那么速度可能不会成为问题。
由于它的启动速度比 matlab 快得多,因此集成到 shell 脚本中进行测试更实用。
对于原型设计,绘图绰绰有余;人们只是习惯了 MATLAB 的风格。
工具箱的相对缺乏并不是什么大问题,因为它们无论如何都不会在您的目标平台上可用。
我两者都用,每当我切换时,我都会错过另一个的功能。
看看开源替代方案如何用于统计而不是数值分析是很有趣的。R(统计学的八度音阶)现在比商业的 S-plus(统计学的 matlab)更受欢迎。在其他答案中提到的作为不从 matlab 切换的原因的问题也适用于 R。但是每个人仍然刚刚开始贡献,现在 R 是标准,具有更好的图形、更好的软件包并且没有更多的供应商锁定。
因此,如果您可以克服囚徒困境,那么您也可以更喜欢 octave 而不是 matlab。
MATLAB 上有一本很好的 WikiBook,其中列出了 MATLAB 和 Octave 之间的区别。
根据我的经验,核心 MATLAB 可以很好地移植到 Octave,但工具箱具有不同级别的兼容性,因此您的决定取决于您要编写的代码到底是什么。
Octave 缺少的一些东西,AFAIK,是与 .NET 代码和 gui 构建器的紧密集成guide
(尽管 Octave 可以使用许多其他 GUI 构建工具)。
此外,正如其他人所指出的,您使用 MATLAB 支付的大部分费用是流畅的界面和调试/分析工具。经验丰富的编码人员可能可以使用替代方案进行管理,但新手可能会遇到困难。
请注意,Octave 支持 Matlab 中不存在的语言结构(例如,自增运算符、do-until 语句等)。这使得将 Octave 上开发的代码(由不熟悉 Matlab 限制的人)移植到 Matlab 环境有时很烦人。
Octave FAQ中还有一些其他限制/差异。
如果你能负担得起,你绝对应该更喜欢 Matlab 而不是 Octave。
我对 Octave 没有太多经验,但如果您的代码使用 Matlab 工具箱、花哨的绘图或 Matlab gui,我预计会出现问题。
我希望它类似于 OpenOffice 与 MS Office。大部分是兼容的,但只是不同,足以让你头疼。
我已经成功地将一些线性回归和二次编程应用程序移植到 Octave。
线性回归(反斜杠运算符)无需任何调整即可工作。在二次规划的情况下,我不得不从fmincon()切换到sqp(),得到类似的结果。
尽管如此,Octave 中的工具箱和 GUI 确实还不够成熟(我花了很多时间在基本的东西上),尽管它在过去两年中取得了迅速的进展。