Octave和MATLAB的区别?
我是一个知道Python,Ruby和一些正在试图决定是学习GNU Octave还是Matlab的C的程序员。 我知道他们有很多共同之处 ,但我不清楚语法有多相似,甚至数据结构如何。 大家都说他们是“相似的”,但没有人说他们实际上有多相似。 上面的链接显示了几个在语法上相似或相同的例子,对于整个语言来说是这样吗?
我试图学习一般的语言来做更多的科学计算,可能使用一些图像分析库。 我知道还有很多其他语言可以编程,但是我的顾问们说,了解MATLAB或八度是科学中至关重要的。
另外,Matlab是否值得? 我没有很多钱,但如果在图书馆或其他地方有重要的区别,我肯定能find钱。
而是给你一个完整的差异列表,我会给你我的看法。
如果你仔细阅读你提供的wiki页面,你会经常看到像“Octave支持两者,而Matlab需要第一个”等句子。这表明Octave的开发人员试图使Octave语法“优于” Matlab。
这种态度使得八度完全失去了它的目的。 Octave背后的想法是(或者已经变成 ,我应该说,看下面的评论)有一个开源的替代品来运行m代码。 如果它试图变得“更好”,它就会试图与众不同 ,这与大多数人使用它的原因不符。 根据我的经验,运行在MATLAB开发的东西并不是一劳永逸,除非是非常简单的,非常短的东西 – 对于任何大的函数,我总是必须翻译大量的东西,才能在Octave中工作,if不要从头重新编写它。 这是多么好 ,我真的没有看到…
另外,如果你学习了八度,那么在八度中允许的许多语法在Matlab中是不允许的。 意思 – 用Octave编写的代码通常在MATLAB中无法工作,没有大量的转换。 这也是不兼容的!
然后,Octave没有JIT编译器,而MATLAB呢。 这使得八度经常慢很多,特别是当涉及到循环结构时。 正因为如此,Octave也会迫使你使用octave中快速的编码结构,但在MATLAB中,另一种结构会快很多。
我可以继续:MathWorks拥有很多MATLAB的工具箱,Simulink及其相关产品在Octave中确实没有相同的function(是的,您必须付出所有的代价,但是您的雇主/学校经常会这样做,它至less存在 ),经过validation符合几个行业标准,testing工具,validation工具,需求pipe理系统,报告生成,更大的社区和用户群等等等等。MATLAB只是一小部分更大的东西。 八度是…只是八度。
所以,我的build议是:
- 找出你的学校是否会支付MATLAB。 他们通常会。
- 如果他们不这样做,如果你能凑钱,购买Matlab并学习正确使用它。 从长远来看,这是更好的决定。
- 如果你真的无法得到钱 – 使用八度,但学习 Matlab的语法,并远离Octave-only语法。
为什么最后一点呢? 因为在科学中,经常有大量的代码库完全用Matlab编写。 有许多教授,工程师,学生,专业编程人员,很多人都知道Matlab的所有错综复杂的细节,而不是Octave。
如果你find一份新工作,新办公室里的每个人都会说西class牙语,那么要求每个人都开始说英语,这完全是因为你不会说西class牙语。 与Matlab和Octave一样。
注意 – 如果所有downvoters可以留下评论与他们的观点和不同意我的理由,这将是伟大的:)
八度的常见问题解答中提供了一个更完整的链接。 从理论上讲,在Matlab中运行的所有代码都应该在Octave中运行,Octave开发人员将与Matlab的不兼容性视为bug。 所以你的第一个问题的答案在理论上是肯定的。 当然,所有的软件都有bug,Octave或者Matlab(是的,也是Matlab)对它们是安全的。 你可以报告他们,有人会尝试修复它们
Octave也有额外的function ,其中大部分是额外的语法,在我看来,使代码更具可读性和更有意义,特别是如果你习惯于其他编程语言。
但是八度还有更多的不仅仅是货币成本。 八度自由也是免费的,这是自由的,但我不认为这是颂扬软件自由的地方。
我只用Octave做image processing,发现图像包适合我的需求。 不过,我不知道你会怎么做。 所以我的答案是,如果这个代价是不值得的,但其他人肯定会不同意。
Octave基本上是MATLAB的开源版本。 这是写的。 MATLAB有一个非常好的graphics用户界面,使用起来更容易一些,但是OCTAVE的下一个稳定版本也会有一个GUI,我已经在不稳定版本中testing过了,看起来非常棒。 八度是更加错误的,因为它是由一群志愿者开发和维护的,在那里MATLAB的开发由行业数百万美元资助。 我还是一个学生,正在使用MATLAB的学生版,但是我正考虑一旦使用GUI的稳定版本发布,就会转到Octave。
MATLAB可能比Octave强大得多,algorithm运行速度更快,但对于大多数应用程序,Octave已经足够了,在我看来,这是一个完全免费的神奇工具,Octave是完全免费的。
我会说使用MATLAB,而您可以使用学术版本,但切换到Octave应该是无缝的,因为他们使用完全相同的语法。
最后是SIMULINK的问题。 如果你想做模拟或控制系统devise(可能有一百万个其他的用途),SIMULINK是非常棒的,并带有MATLAB。 我不认为有任何其他的接近这一点,虽然Scilab显然是一个“好”的开源替代品,我还没有尝试过。
和平。
MATLAB首先是一个商业产品。 因此,MATLAB中的所有东西几乎都可以用于开箱即用。 所有的核心function都是可靠的,如果你正在做一个特殊的项目,那么MATLAB可能会有一个附加组件,它们可以向你推销,为你添加了许多额外的特定于域的.m文件。 这不是便宜的,但它的工作,它会完成工作没有抱怨。
Octave总是显示其开放源代码的信息想要自由的根源。 它是免费的,它会提醒你,每个机会都是免费的。 它是由热衷于讨厌Windows的志愿者开发的。 所以Octave勉强地在Windows上运行。 很奇怪,像许多MATLABfunction一样存在。
但是,这是蹭。 任何时候,当你试图做一些比平凡复杂的事情时,Octave突然间就会以微妙而难以理解的方式突破。 糟糕 – terminal驱动程序在OpenGL层深处有一处溢出。 你不能打印。 糟糕的是,这些数字绘制的graphics会对他们的字体做出奇怪的事情。 祝你好运,找出原因。 哎呀 – Octave和其他一些不起眼的自由软件之间有一些隐藏的依赖关系,所以它不会被编译。 祝你好运,搞清楚它是什么。
八度的回应是嗨! 这是免费的软件! 你有所有的源代码,你可以自己修复所有的错误! 也许如果我有无穷无尽的时间和资源,我可以把所有的时间花在自由软件上,但是我个人却不知道。 如果我在学术界工作,我可以。
所以在核心上,selectMATLAB还是八度的问题归结为一个问题。 有趣的是,在商业软件和自由软件之间进行select时,这个问题总是相同的。
问题是:
你有更多的钱比时间?
我刚开始使用Octave。 我见过有人使用Matlab。 而上面提到的一个主要区别是Octave有一个命令行界面,而Matlab有一个GUI。 据我说,有一个GUI是非常好的debugging。 在Ocatve中,您必须执行命令以查看matrix的长度等等,但在Matlab中,它很好地显示了使用良好接口的所有内容。 但是Octave对于我所做的基本任务来说是免费的。 如果你确定你只是做基本的东西,或者你不确定你现在需要什么,那么去八度。 当你真正感受到需要的时候,你可以为Matlab付费。
这个东西使得Matlab非常stream行,特别是它在不同学科的优秀工具箱。 既然你的主要目标是学习Matlab,所以如果你使用Octave或者Matlab的话就没有什么不同了!
只要去购买没有任何酷的工具箱(这主要取决于你的专业)的Matlab不是一个合理的费用!
你一定可以从Octave开始,并且在互联网上遵循大量关于Matlab的教程。
嵌套函数和闭包现在支持多种语言,包括MATLAB。 JavaScript将closures作为一stream的devise原则。
可悲的是,Octave不支持闭包(使用词法范围的嵌套函数)。
根据http://osdir.com/ml/octave-bug-tracker/2013-06/msg00210.html,人们甚至可能会得到开发人员不想或者无法做到的印象。;
这将打破大量的代码,两种方式。 没有解决方法。
没有什么我想添加到Rody Oldenhuis的答案。 我通常遵循我写的所有函数都应该在Matlab中运行的策略。
我在两个系统上testing了一些特定的function,用于以下用例:
a)八度不需要许可证服务器 – 例如,如果您的机构不支持本地许可证。 我曾经在一个情况下使用它,在这种情况下,我使用脚本的系统没有连接到互联网,并且要运行很长时间(在实验室的一个angular落),并被许多不同的用户使用。 备注:这不是关于许可成本,而是有关技术问题。
b)Octave支持其他平台,例如Rasberry Pi( http://wiki.octave.org/Rasperry_Pi ) – 可能派上用场。
八度和matlab有很多相似之处。 但Octave是一个命令行界面。 你必须在命令提示符下键入每个命令,而matlab带有最好的GUI。 我build议你先使用matlab学生版; 学习基础课程后,使用GNU八度。 现在gnu八度带有gui,但现在是一个开发版本。 gnu八度有一些gui前端,比如guioctave,xoctave(不是免费的),DomainMath IDE等等。