我是一个程序员,知道Python, Ruby和一些C,我正试图决定是否学习GNU Octave或MATLAB。我知道他们有很多共同之处,但我不清楚语法是多么相似,甚至数据结构是。上面的链接显示了几个语法相似或相同的例子。整个语言都是这样吗?
我正在努力学习这门语言,以便进行更多的科学计算,可能会使用一些图像分析库。
另外,MATLAB值这个价吗?
更完整的差异列表链接在八度的常见问题。理论上,所有在Matlab中运行的代码都应该在Octave中运行,Octave开发人员将与Matlab不兼容视为bug。所以你第一个问题的答案理论上是肯定的。当然,所有的软件都有bug,无论是Octave还是Matlab(是的,Matlab也是)都不安全。你可以报告它们,有人会试图修复它们
Octave也有额外的功能,其中大多数是额外的语法,在我看来,使代码更可读,更有意义,特别是如果你习惯了其他编程语言。
但对于Octave来说,不仅仅是金钱成本。Octave在自由的意义上也是自由的,它是自由的,但我不认为这是一个抱怨软件自由的地方。
我只在Octave中进行图像处理,发现图像包适合我的需要。然而,我不知道你会怎样。所以我的回答是“是否值得”,但其他人肯定不会同意。
我不会向你提供一份完整的分歧清单,而是告诉你我对这件事的看法。
如果你仔细阅读你提供的维基页面,你会经常看到这样的句子:“Octave支持两者,而MATLAB需要第一个”;等。这表明Octave的开发人员试图将Octave语法“superior"转换为MATLAB的。
这种态度使Octave完全失去了它的目的。Octave背后的想法是(或者已经成为,我应该说,见下面的评论)有一个开源的替代方案来运行m-code。如果它试图“更好”,它就会试图成为不同的,这与大多数人使用它的原因不一致。根据我的经验,运行MATLAB开发的东西永远不会一蹴而就,除了非常简单、非常短的东西——对于任何一个相当大的函数,我总是必须在它在Octave中工作之前翻译很多东西,如果不是从头开始重写的话。这是怎么更好的,我真的不明白…
另外,如果你学习Octave,有很多在Octave中允许的语法在MATLAB中是不允许的。意思是,用Octave编写的代码如果没有大量的转换,通常无法在MATLAB中工作。反过来也不兼容!
我可以继续:MathWorks有许多MATLAB工具箱,有动态仿真模块及其相关产品,在Octave中确实没有等效的(是的,你必须为所有这些付费。但通常你的雇主/学校无论如何都会这样做,好吧,它至少存在),证明符合几个行业标准,测试工具,验证工具,需求管理系统,报告生成,一个更大的社区&用户基础,等等,等等。MATLAB只是一个大得多的东西的一小部分。八度是……八度。
所以,我的建议是:
为什么是最后一点?因为在科学领域,经常有大量完全用MATLAB编写的代码库。有教授、工程师、学生、专业编码员,很多很多的人都知道MATLAB的所有复杂的血腥细节,而不太了解Octave。
如果你得到了一份新工作,而你的新办公室里的每个人都说西班牙语,那么仅仅因为你不说/不喜欢西班牙语,就要求每个人从那以后都开始说英语就有点自大了。MATLAB和Octave也一样。
注意:八度音阶可以在“传统模式”下运行;(通过在启动Octave时包含——tradition标志),这使得它在使用某些Octave专用语法时给出错误。
使MATLAB如此受欢迎和特别的是它在不同学科中出色的工具箱。由于您的主要目标是学习MATLAB,所以使用Octave或MATLAB并没有什么不同!
只是去买MATLAB而没有任何酷的工具箱(这基本上取决于你的专业)真的不是一笔合理的支出!
你绝对可以用Octave有一个好的开始,并在互联网上跟随大量的MATLAB教程。
Octave和MATLAB有很多相似之处。但是Octave是一个命令行界面。您必须在命令提示符中输入每个命令,而MATLAB具有最好的GUI。我建议大家先用MATLAB学生版;学习基础课程后使用GNU Octave永久。
现在GNU Octave附带了一个GUI,但它现在是一个开发版本。GNU Octave有一些GUI前端,如guioctave, xoctave(非免费),DomainMath IDE等。
我刚开始使用Octave。我见过有人用MATLAB。上面提到的一个主要区别是Octave有一个命令行界面,而MATLAB有一个GUI。根据我的经验,拥有一个GUI非常适合调试。
在Octave中,你必须执行命令来查看矩阵的长度,等等,但在MATLAB中,它使用良好的界面很好地显示了一切。但Octave是免费的,适合我做的基本任务。如果你确定你要做的只是基本的事情,或者你不确定你现在需要什么,那么就选择Octave。当你真的觉得需要的时候,你可以花钱买MATLAB。
遗憾的是,Octave不支持闭包(具有词法作用域的嵌套函数)。
这将破坏大量的代码。没有解决方法。
Octave基本上是MATLAB的开源版本。它就是这么写的。MATLAB有一个非常好的GUI,这使得它更容易使用,但Octave的下一个稳定版本也将有一个GUI,我在不稳定版本中测试过,看起来很棒。Octave的问题更多,因为它是由一群志愿者开发和维护的,而MATLAB的开发由工业界提供了数百万美元的资金。我仍然是一名学生,正在使用学生版本的MATLAB,但我正在考虑一旦带有GUI的稳定版本发布,就转向Octave。
MATLAB可能比Octave强大得多,算法运行得更快,但对于大多数应用程序来说,Octave绰绰有余,在我看来,它是一个完全免费的神奇工具,而Octave是完全免费的。
我会说使用MATLAB,而你可以使用学术版本,但切换到Octave应该是无缝的,因为他们使用完全相同的语法。
最后,还有动态仿真模块的问题。如果你想做仿真或控制系统设计(可能还有成千上万的其他用途),Simulink是非常棒的,并且附带MATLAB。我认为没有任何一款能与之媲美。虽然Scilab显然是一个“很好的”开源替代方案,但我还没有尝试过。
MATLAB首先是一个商业产品。因此,MATLAB中的一切都可以开箱即用。所有的核心功能都是可靠的,如果你在做一个特殊的项目,那么MATLAB可能有一个附加组件可以卖给你,它为你添加了很多额外的领域特定的。m文件。它并不便宜,但它有效,它将毫无怨言地完成工作。
Octave总是显示其开源、信息想要自由的根源。它是免费的,它会提醒你在任何机会都是免费的。它是由那些极度讨厌Windows的志愿者开发的。因此,Octave只能勉强在Windows上运行。令人惊讶的是,有这么多MATLAB特性存在。
但问题就在这里。每当您尝试做一些比琐碎复杂的事情时,Octave突然以微妙和难以理解的方式中断。哎呀——终端驱动程序在OpenGL层深处有一个溢出。你不能打印。哎呀,这些图表用字体做了一些奇怪的事情。祝你能找到原因。Octave和其他一些鲜为人知的免费软件之间存在一些隐藏的依赖关系,所以它无法编译。希望你能查出是哪一个。
八度响应是,嘿!这是免费软件!您拥有所有的源代码,并且您可以自己修复所有这些错误!也许如果我有无限的时间和资源,我可以把所有的时间都花在修复自由软件中的漏洞上,但我个人不这么做。如果我在学术界工作,我可能会。
因此,选择MATLAB还是Octave的核心问题归结为一个问题。有趣的是,在商业软件变体和自由软件变体之间进行选择时,这个问题总是一样的。
问题是:
你的钱比时间多吗?
没有太多我想添加到Rody Oldenhuis的回答。我通常遵循的策略是,我写的所有函数都应该在Matlab中运行。
我在两个系统上测试了一些特定的功能,用于以下用例:
a) Octave不需要许可证服务器-例如,如果您的机构不支持本地许可证。我曾经使用过它,当时我使用脚本的系统没有连接到互联网,并且将运行很长一段时间(在实验室的一个角落),并由许多不同的用户使用。备注:这不是关于许可证费用,而是关于相关的技术问题。
b) Octave支持其他平台,例如,树莓派(http://wiki.octave.org/Rasperry_Pi) -这可能会派上用场。