我是一个懂Python, Ruby和一些C语言的程序员,我正在决定是学习GNU Octave还是MATLAB。我知道它们有很多共同点,但我不清楚它们的语法甚至数据结构有多相似。上面的链接显示了几个语法相似或相同的例子。整个语言都是这样吗?

我正在努力学习这门语言,以便进行更多的科学计算,可能会使用一些图像分析库。

另外,MATLAB值这个价吗?


当前回答

嵌套函数和闭包现在被许多语言支持,包括MATLAB。 JavaScript将闭包作为一流的设计原则。

遗憾的是,Octave不支持闭包(具有词法作用域的嵌套函数)。

根据Bug:嵌套函数的句柄还不受支持,人们甚至可能会觉得开发人员不想或不能把它做好。 顺便说一下,这个2013年的bug在2020年被修复了。

这将破坏大量的代码。没有解决方法。

其他回答

嵌套函数和闭包现在被许多语言支持,包括MATLAB。 JavaScript将闭包作为一流的设计原则。

遗憾的是,Octave不支持闭包(具有词法作用域的嵌套函数)。

根据Bug:嵌套函数的句柄还不受支持,人们甚至可能会觉得开发人员不想或不能把它做好。 顺便说一下,这个2013年的bug在2020年被修复了。

这将破坏大量的代码。没有解决方法。

MATLAB首先是一个商业产品。因此,MATLAB中的一切都可以开箱即用。所有的核心功能都是可靠的,如果你在做一个特殊的项目,那么MATLAB可能有一个附加组件可以卖给你,它为你添加了很多额外的领域特定的。m文件。它并不便宜,但它有效,它将毫无怨言地完成工作。

Octave总是显示其开源、信息想要自由的根源。它是免费的,它会提醒你在任何机会都是免费的。它是由那些极度讨厌Windows的志愿者开发的。因此,Octave只能勉强在Windows上运行。令人惊讶的是,有这么多MATLAB特性存在。

但问题就在这里。每当您尝试做一些比琐碎复杂的事情时,Octave突然以微妙和难以理解的方式中断。哎呀——终端驱动程序在OpenGL层深处有一个溢出。你不能打印。哎呀,这些图表用字体做了一些奇怪的事情。祝你能找到原因。Octave和其他一些鲜为人知的免费软件之间存在一些隐藏的依赖关系,所以它无法编译。希望你能查出是哪一个。

八度响应是,嘿!这是免费软件!您拥有所有的源代码,并且您可以自己修复所有这些错误!也许如果我有无限的时间和资源,我可以把所有的时间都花在修复自由软件中的漏洞上,但我个人不这么做。如果我在学术界工作,我可能会。

因此,选择MATLAB还是Octave的核心问题归结为一个问题。有趣的是,在商业软件变体和自由软件变体之间进行选择时,这个问题总是一样的。

问题是:

你的钱比时间多吗?

Octave和MATLAB有很多相似之处。但是Octave是一个命令行界面。您必须在命令提示符中输入每个命令,而MATLAB具有最好的GUI。我建议大家先用MATLAB学生版;学习基础课程后使用GNU Octave永久。

现在GNU Octave附带了一个GUI,但它现在是一个开发版本。GNU Octave有一些GUI前端,比如guioctave, xoctave(不是免费的),DomainMath IDE等等。

我不会向你提供一份完整的分歧清单,而是告诉你我对这件事的看法。

如果你仔细阅读你提供的维基页面,你会经常看到这样的句子“Octave支持两者,而MATLAB需要第一种”等。这表明Octave的开发人员试图使Octave语法“优于”MATLAB的语法。

This attitude makes Octave lose its purpose completely. The idea behind Octave is (or has become, I should say, see comments below) to have an open source alternative to run m-code. If it tries to be "better", it thus tries to be different, which is not in line with the reasons most people use it for. In my experience, running stuff developed in MATLAB doesn't ever work in one go, except for the really simple, really short stuff -- For any sizable function, I always have to translate a lot of stuff before it works in Octave, if not re-write it from scratch. How this is better, I really don't see...

另外,如果你学习Octave,有很多在Octave中允许的语法在MATLAB中是不允许的。意思是,用Octave编写的代码如果没有大量的转换,通常无法在MATLAB中工作。反过来也不兼容!

I could go on: The MathWorks has many toolboxes for MATLAB, there's Simulink and its related products for which there really is no equivalent in Octave (yes, you'd have to pay for all that. But often your employer/school does that anyway, and well, it at least exists), proven compliance with several industry standards, testing tools, validation tools, requirement management systems, report generation, a much larger community & user base, etc., etc., etc. MATLAB is only a small part of something much larger. Octave is...just Octave.

所以,我的建议是:

看看你的学校是否会为MATLAB付费。他们经常会这样做。 如果他们没有,如果你能凑足钱,买MATLAB并学会正确使用它。从长远来看,这是一个更好的决定。 如果你真的拿不到钱——使用Octave,但要学习MATLAB的语法,远离Octave专用语法。(见注)

为什么是最后一点?因为在科学领域,经常有大量完全用MATLAB编写的代码库。有教授、工程师、学生、专业编码员,很多很多的人都知道MATLAB的所有复杂的血腥细节,而不太了解Octave。

如果你得到了一份新工作,而你的新办公室里的每个人都说西班牙语,那么仅仅因为你不会/不喜欢西班牙语,就要求每个人都开始说英语就有点自大了。MATLAB和Octave也一样。

注意:Octave可以在“传统模式”下运行(通过在启动Octave时包含——traditional标志),这使得它在使用某些仅限Octave的语法时给出错误。

在Octave的FAQ中有一个更完整的差异列表链接。理论上,所有在Matlab中运行的代码都应该在Octave中运行,Octave开发人员将与Matlab不兼容视为bug。所以你第一个问题的答案理论上是肯定的。当然,所有的软件都有bug,无论是Octave还是Matlab(是的,Matlab也是)都不安全。你可以报告它们,有人会试图修复它们

Octave也有额外的功能,其中大部分是额外的语法,在我看来,这使代码更可读,更有意义,特别是如果你习惯了其他编程语言。

但对于Octave来说,不仅仅是金钱成本。Octave在自由的意义上也是自由的,它是自由的,但我不认为这是一个抱怨软件自由的地方。

我只在Octave中进行图像处理,发现图像包适合我的需要。然而,我不知道你会怎样。所以我的回答是“是否值得”,但其他人肯定不会同意。