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


82

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

到目前为止,我们一直在使用MATLAB来执行此操作,但是许可成本开始受到损害。我们正在考虑将我们的MATLAB代码移植到Octave。

是否有特定原因这样做?我们会破坏兼容性吗,特别是如果我们有外部合作伙伴坚持使用MATLAB?我们可以预期会有任何性能损失吗?


7
您应该考虑迁移和培训的成本。
丹尼尔·莫拉

10
为什么不使用Python?stackoverflow.com/questions/1776290/… 适用于MATLAB用户的NumPy:mathesaurus.sourceforge.net/matlab-numpy.html
Mikhail,

5
@Mikhail:因为与使用Matlab的合作伙伴进行了交互。
乔纳斯(Jonas)2010年

2
@Jonas:也可以说服外部合作伙伴……如果他们看到每个人都在谈论向Python的迁移……
Mikhail,2010年

Answers:


52

2008年,我尝试做同样的事情。我很快注意到了以下演出用塞子:

  • 工具箱不完整,没有经过良好的测试。特别是我的工作严重依赖的图像处理工具箱(最大的障碍是未实现imtransform)。
  • 与Matlab相比,Octave调试器和分析器是原始的。
  • 如果您与他人合作,可能很难改变他们。
  • 如果您使用第三方工具箱,则需要您自己让它们工作。
  • 八度的图不是出版质量。

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


8
我认为问题与MATLAB用户无关。有一个FOSS替代方案真是太好了,而且想要进行此类工作的人们也可以这样做。人们可以随自己的时间去做自己想做的事情。批评给定程序的用户是幼稚的。
carlosdc

2
对于任何有兴趣的人,它都指向Octave 3.8 Windows安装程序的链接:mxeoctave.osuv.de
juliohm 2014年

2
可以通过bountysource.com/teams/gnu-octave/issues网站解决这些问题,因为金钱成本比一张Matlab许可少十倍。
谢尔盖

2
截至2017年,您应该真正尝试一下。您会惊讶于大多数(如果不是全部)MATLAB脚本开箱即用(除了特定的工具箱),必须花一个下午的时间来纠正一些小的不兼容问题。与开发无许可证的开源软件相比,下午的时间是多少?
雨果·拉格

24

就在我的头顶上:

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

+1表示+1。我什至没有找到我可以安装且可以可靠运行的免费的Octave GUI,更不用说一个好的GUI了。SciLab可能是Matlab的一个不错的选择,但我不知道它在1-4点方面有多好。
Stefan Smith

15

我也测试了八度和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。


10

Octave在matlab上进行了几项语法改进,例如,您可以说endif endforendfunction而不是just end,这使调试变得更加容易。

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

最后,倍频程具有parcellfunpararrayfun这是matlab完全缺乏的功能非常强大的并行处理工具。parfor在matlab中有一个方法,但是我认为这并不是最好的方法。

倍频程的缺点是它们在工具箱上稍稍落后,尽管您看起来可以找到类似的东西。fsolvelsode似乎有点慢,但更健壮,在倍频出于某种原因。对于某些人来说,最令人讨厌的往往是缺少符号链接和DAQ工具箱,但是无论如何,这些东西将是专有的。

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


1
我只是试过了,据我所知,Windows上不支持pararrayfun / parcellfun(当然不是Cygwin本身不支持)failed to open pipe: pipe: not supported on this system。我正在使用预构建的Windows二进制文件Octave_3.6.1_VS2010
Amro 2012年

2
是的,我想这取决于在Windows和Linux中运行Shell脚本的方式的差异,因为pararrayfun / parcelfun通过生成一些子进程来工作。我不知道如何在Windows上运行,我什至不确定Windows二进制文件是在shell中执行还是被仿真?
user1240280

1
太糟糕了,cellfun / arrayfunc的(便携式)并行版本似乎是个好主意……也许MATLAB也应该这样做:)
Amro

@ user1240280:能够在脚本中定义函数是IMHO相对于Matlab的巨大优势。它使您能够以模块化的方式编写整个程序并将其保存在一个文件中,因此您可以轻松地将其发送给自己或他人。但是Octave缺少GUI是一个很大的缺点。
Stefan Smith

@stefan smith:Octave现在具有本机GUI,仍处于试验阶段,但从我最近的经验来看,它相当有用,并且或多或少是稳定的。你可以尝试一下用octave --force-gui
Legionair

9

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


6
八度有等效的指南吗?那就是为什么我被否决了吗?
Doresoom 2010年

8

对于您的用例,倍频程可能优于MATLAB:

  • 它具有允许您编写稍微接近于C的代码的语法,即+ =,-=,默认函数参数值,双引号字符串文字等。

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

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

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

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

我同时使用两者,每当切换时,我都会错过其他功能。


6

有趣的是,开源替代方案如何用于统计而非数字分析。如今,R(统计的八度)比商业的S-plus(统计的矩阵)更受欢迎。在其他答案中找到的作为不退出matlab的理由提到的问题也适用于R。但是仍然每个人都开始做出贡献,现在R是标准,具有更好的图形,更好的程序包和更多的供应商锁定。

因此,如果您可以克服囚徒困境,那么您也可以选择倍频而不是Matlab。


4
您应该将此添加为评论,而不是答案。
迪马

5

在MATLAB上有一个不错的WikiBook,其中列出了MATLAB和Octave之间的差异

以我的经验,核心MATLAB已很好地移植到Octave,但是工具箱具有不同程度的兼容性,因此您的决定取决于您要尝试编写的代码。

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

而且,正如其他人指出的那样,使用MATLAB支付的大部分费用都是光滑的界面和调试/性能分析工具。经验丰富的编码人员可能可以使用替代方法进行管理,但是新手可能会遇到困难。


3

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

Octave FAQ上还有其他限制/差异


2

如果可以承受,您绝对应该选择Matlab而不是Octave。

我没有使用Octave的丰富经验,但是如果您的代码使用的是Matlab工具箱,花式图或Matlab gui,则可能会遇到问题。

我希望它像OpenOffice与MS Office。大多兼容,但又足以让您头疼。


0

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

线性回归(反斜杠运算符)无需任何调整即可工作。如果是二次编程,我必须从fmincon()切换到sqp(),得出类似的结果。

尽管如此,Octave中的工具箱和GUI确实还不成熟(我花了很多时间在基本知识上),尽管在过去两年中它已经迅速取得了进步。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.