我是一名熟悉Python,Ruby和一些C的程序员,他们正试图决定是否学习GNU Octave或Matlab。我知道他们有很多in common,但我不清楚语法是多么相似甚至是数据结构。每个人都说他们“相似”,但没有人说他们实际上是多么相似。上面的链接显示了几个语法相似或相同的例子,对整个语言都是如此吗?
我正在尝试学习一般语言以进行更多科学计算,可能使用一些图像分析库。我知道我可以编写很多其他语言,但我的顾问说,了解MATLAB或Octave在科学中至关重要。
另外,Matlab值得花费吗?我没有很多钱,但如果图书馆或其他地方存在重大差异,我相信我能找到钱。
答案 0 :(得分:225)
我不会向您提供完整的差异列表,而是会就此事向您提供我的看法。
如果你仔细阅读你提供的维基页面,你会经常看到像“Octave支持两者,而MATLAB需要第一个”等句子。这表明Octave的开发人员试图使Octave语法“优越”< / em>到MATLAB的。
这种态度使得Octave完全失去了目的。 Octave背后的想法是(或已成为,我应该说,请参阅下面的评论)以获得运行m代码的开源替代方案。如果它试图“更好”,那么它会尝试不同,这与大多数人使用它的原因不一致。根据我的经验,运行在MATLAB中开发的东西并不是一次性工作,除了非常简单,非常简短的东西 - 对于任何相当大的功能,我总是要在Octave中工作之前翻译很多东西,如果不要从头开始重写。这是怎样的更好,我真的看不到......
另外,如果你学习Octave,那么Octave中允许的语法很多,这在MATLAB中是不允许的。含义 - 在没有大量转换的情况下,用Octave编写的代码通常在MATLAB中不起作用。 反过来也不兼容!
我可以继续:MathWorks有很多用于MATLAB的工具箱,有Simulink及其相关产品,在Octave中确实没有相应的产品(是的,你必须支付所有费用。但通常你的雇主/学校无论如何,它至少存在),经证实符合多个行业标准,测试工具,验证工具,需求管理系统,报告生成,更大的社区和用户群等等.MATLAB只是更大的一小部分。 Octave是......就在Octave。
所以,我的建议:
为什么这最后一点?因为在科学中,通常有大量的代码库完全用MATLAB编写。有教授,工程师,学生,专业程序员,很多人都知道MATLAB的所有错综复杂的细节,而不是Octave。
如果你找到一份新工作,并且新办公室里的每个人都说西班牙语,那么要求每个人从那时起开始说英语是很自大的,因为你不说话/像西班牙语。与MATLAB和Octave相同。
NB - 如果所有的哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇
注意:Octave可以在“传统模式”下运行(通过在启动Octave时包含--traditional标志),这会在使用某种Octave-only语法时出错。
答案 1 :(得分:75)
Octave's FAQ上有一个更完整的差异列表链接。理论上,在Matlab中运行的所有代码都应该在Octave中运行,而Octave开发人员将与Matlab的不兼容性视为错误。所以你的第一个问题的答案在理论上是肯定的。当然,所有的软件都有bug,Octave或Matlab(是的,Matlab也是)都没有。您可以报告它们,有人会尝试修复它们
Octave也有extra features,其中大部分都是额外的语法,在我看来,这些语法使代码更具可读性和意义,特别是如果你习惯了其他编程语言。
但对八进制来说,还有更多的是货币成本。 Octave在自由意义上也是免费的,它是自由的,但我不认为这是嘲笑软件自由的地方。
我只在Octave中进行图像处理,并发现图像包符合我的需要。但是,我不知道你的是什么。所以我的回答是否值得付出代价是否定的,但其他人肯定不同意。
答案 2 :(得分:20)
MATLAB首先是商业产品。因此,MATLAB中的所有内容都可以开箱即用。所有的核心功能都是可靠的,如果你正在开发一个特殊的项目,那么MATLAB可能有一个他们可以卖给你的附加组件,为你添加了许多额外的特定于域的.m文件。它并不便宜,但它有效,它可以毫无怨言地完成工作。
Octave始终展示其开源,信息 - 想要自由的根源。它是免费的,它会提醒你,每次机会都是免费的。它是由热爱Windows的志愿者开发的。因此,Octave勉强在Windows上运行。令人惊讶的是,尽管存在许多MATLAB功能。
但这就是问题。无论何时你试图做一些比复杂的事情更重要的事情,Octave突然以微妙而难以理解的方式打破。糟糕 - 终端驱动程序在OpenGL层的某个深处有溢出。你无法打印。哎呀 - 人物图用他们的字体做了奇怪的事情。祝你好运找出原因。哎呀 - 在Octave和其他一些不起眼的自由软件之间存在一些隐藏的依赖关系,因此无法编译。祝你好运搞清楚它是什么。
而Octave的反应非常好!这是免费软件!你有所有源代码,你可以自己解决所有这些错误!也许如果我手上有无限的时间和资源,我可以把所有时间花在修复自由软件中的bug上,但我个人却没有。如果我在学术界工作,我可能会。
因此,核心是选择MATLAB还是Octave的问题归结为一个问题。有趣的是,在商业版和免费软件版本之间进行选择时,这个问题总是一样的。
问题是:
你有比时间更多的钱吗?
答案 3 :(得分:14)
Octave基本上是MATLAB的开源版本。它被写成了那样。 MATLAB有一个非常好的GUI,使它更容易使用,但OCTAVE的下一个稳定版本也将有一个GUI,我已经在不稳定版本中测试过,看起来很棒。 Octave更加错误,因为它是由一群志愿者开发和维护的,其中MATLAB的开发由行业资助数百万美元。我还是一名学生,正在使用MATLAB的学生版,但是我想在发布带有GUI的稳定版本后转到Octave。
MATLAB可能比Octave更强大,算法运行速度更快,但对于大多数应用程序来说,Octave绰绰有余,在我看来,这是一个完全免费的神奇工具,Octave是完全免费的。
我会说使用MATLAB虽然你可以使用学术版本,但切换到Octave应该是无缝的,因为他们使用完全相同的语法。
最后,还有SIMULINK的问题。如果你想进行模拟或控制系统设计(可能有一百万种其他用途),SIMULINK非常棒,并附带MATLAB。虽然Scilab显然是一个“好的”开源替代品,但我还没有尝试过。
和平。
答案 4 :(得分:8)
我刚开始使用Octave。我见过人们使用Matlab。上面提到的一个主要区别是Octave有一个命令行界面,而Matlab有一个GUI。据我说,GUI非常适合调试。在Ocatve中你必须执行命令来查看矩阵的长度是什么等,但在Matlab中它很好地使用一个好的接口显示所有内容。但Octave对我所做的基本任务是免费的。如果你确定你要做的只是基本的东西,或者你不确定你现在需要什么,那就选择Octave。当你真正感到需要时,你可以支付Matlab的费用。
答案 5 :(得分:7)
这件事让Matlab如此受欢迎,特别是它在不同学科中的出色工具箱。由于你的主要目标是学习Matlab,所以如果你使用Octave或Matlab,就没有什么不同了!
只是去购买没有任何酷工具箱的Matlab(基本上取决于你的专业)并不是一个合理的费用!
你绝对可以在Octave上有一个良好的开端,并在互联网上关注Matlab的大量教程。
答案 6 :(得分:4)
在Rody Oldenhuis的回答中,我想补充一点。我通常遵循这样的策略,即我编写的所有函数都应该在Matlab中运行。
我在两个系统上测试的一些特定功能,适用于以下用例:
a)八度音程不需要许可证服务器 - 例如如果您的机构不支持本地许可证。在我使用脚本的系统没有连接到互联网并且将要运行很长时间(在实验室的一个角落)并且被许多不同用户使用的情况下,我曾经使用过一次。备注:这不是关于许可证成本,而是与相关的技术问题有关。
b)Octave支持其他平台,例如Rasberry Pi(http://wiki.octave.org/Rasperry_Pi) - 这可能会派上用场。
答案 7 :(得分:3)
现在,许多语言都支持嵌套函数和闭包,包括MATLAB。 JavaScript将闭包作为一流的设计原则提升。
可悲的是,Octave不支持闭包(带有词法作用域的嵌套函数)。
根据http://osdir.com/ml/octave-bug-tracker/2013-06/msg00210.html,人们甚至可能会得到开发人员不想要或无法做到正确的印象。
这将打破很多代码,两种方式。没有解决方法。
答案 8 :(得分:0)
Octave和matlab有许多相似之处。但是Octave是一个命令行界面。您必须在命令提示符下键入每个命令,而matlab附带最佳GUI。我建议先使用matlab学生版;学习基础课后,使用gnu octave permentaly。现在gnu octave带有gui,但它现在是一个开发版本。 gnu octave有一些gui前端,如guioctave,xoctave(非免费),DomainMath IDE等。