在我们的字符串操作中,我们需要使用某种高级语言对算法进行原型设计,然后再在嵌入式硬件上进行C实现。
到目前为止,我们一直在使用MATLAB来执行此操作,但是许可成本开始受到损害。我们正在考虑将我们的MATLAB代码移植到Octave。
是否有特定原因不这样做?我们会破坏兼容性吗,特别是如果我们有外部合作伙伴坚持使用MATLAB?我们可以预期会有任何性能损失吗?
在我们的字符串操作中,我们需要使用某种高级语言对算法进行原型设计,然后再在嵌入式硬件上进行C实现。
到目前为止,我们一直在使用MATLAB来执行此操作,但是许可成本开始受到损害。我们正在考虑将我们的MATLAB代码移植到Octave。
是否有特定原因不这样做?我们会破坏兼容性吗,特别是如果我们有外部合作伙伴坚持使用MATLAB?我们可以预期会有任何性能损失吗?
Answers:
2008年,我尝试做同样的事情。我很快注意到了以下演出用塞子:
但是我不得不说,Octave与Matlab的兼容性给我留下了深刻的印象,如果您对Matlab的使用是基本的,那么您可能会很幸运。最终是在2008年,两年后情况会发生很大变化。
就在我的头顶上:
我也测试了八度和R。
关于八度:八度语法的相似性给我留下了深刻的印象。将我的MATLAB脚本传输到八度不需要花费很多时间。同时,我在打印标记时遇到了一个特别的问题,由贾诺·拉贾迈姆(Jarno Rajahalme)在nabble修复了错误栏,并更改了xtick字体大小,这是我在nabble遇到问题时的解决方法。因此,它仍然存在一些可以克服的错误。如果您遇到一些问题,可以尝试在邮件论坛中寻求帮助:help-octave@octave.org。顺便说一句,我的团队无法适应(用户友好),例如适应MATLAB,因此我们仍在使用MATLAB。由于MATLAB是在gnuplot下构建的,因此纠正其错误的另一种方法是编辑生成的gnuplot文件。我发现最好的IDE是QtOctave,我在“
关于R:根据SciViews的研究,R的性能优于MATLAB和倍频程。我对R没有太多经验。我研究了mclust软件包,写了一篇有关R中EM群集的Wikibook章节。顺便说一句,他们似乎有一个非常活跃的社区。因此,您可能会找到提案的第三方软件包,这些软件包不是IMO如此标准化的。我发现最好的IDE是Eclipse的StatET插件,JGR(R的Java GUI)和emacs。尽管学习一种新的编程语言会花费很多时间,但是如果我选择一个开源平台来制作实验图形和一些数据挖掘分析,我会尝试使用R。
Octave在matlab上进行了几项语法改进,例如,您可以说endif
endfor
和endfunction
而不是just end
,这使调试变得更加容易。
Octave还允许您动态生成函数,并在脚本和函数文件中定义了多个函数。这比matlab的“一文件一功能”方法更好。
最后,倍频程具有parcellfun
,pararrayfun
这是matlab完全缺乏的功能非常强大的并行处理工具。parfor
在matlab中有一个方法,但是我认为这并不是最好的方法。
倍频程的缺点是它们在工具箱上稍稍落后,尽管您看起来可以找到类似的东西。fsolve
和lsode
似乎有点慢,但更健壮,在倍频出于某种原因。对于某些人来说,最令人讨厌的往往是缺少符号链接和DAQ工具箱,但是无论如何,这些东西将是专有的。
Python / Numpy绝对值得一试:它功能更强大,但其语法针对更复杂的代码段。
failed to open pipe: pipe: not supported on this system
。我正在使用预构建的Windows二进制文件Octave_3.6.1_VS2010
。
octave --force-gui
在MATLAB上有一个不错的WikiBook,其中列出了MATLAB和Octave之间的差异。
以我的经验,核心MATLAB已很好地移植到Octave,但是工具箱具有不同程度的兼容性,因此您的决定取决于您要尝试编写的代码。
Octave缺少的一些东西,即AFAIK,是与.NET代码和gui生成器的紧密集成guide
(尽管Octave可以使用许多其他GUI生成工具)。
而且,正如其他人指出的那样,使用MATLAB支付的大部分费用都是光滑的界面和调试/性能分析工具。经验丰富的编码人员可能可以使用替代方法进行管理,但是新手可能会遇到困难。
请注意,Octave支持Matlab中不存在的语言构造(例如,自动增量运算符,do-until语句等)。这有时会使将Octave上开发的代码(由不熟悉Matlab的限制的人)移植到Matlab环境中变得很烦人。
Octave FAQ上还有其他限制/差异。