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

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

另外,MATLAB值这个价吗?


当前回答

使MATLAB如此受欢迎和特别的是它在不同学科中出色的工具箱。由于您的主要目标是学习MATLAB,所以使用Octave或MATLAB并没有什么不同!

只是去买MATLAB而没有任何酷的工具箱(这基本上取决于你的专业)真的不是一笔合理的支出!

你绝对可以用Octave有一个好的开始,并在互联网上跟随大量的MATLAB教程。

其他回答

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

如果你仔细阅读你提供的维基页面,你会经常看到这样的句子“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和MATLAB有很多相似之处。但是Octave是一个命令行界面。您必须在命令提示符中输入每个命令,而MATLAB具有最好的GUI。我建议大家先用MATLAB学生版;学习基础课程后使用GNU Octave永久。

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

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

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

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

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

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

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

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

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

使MATLAB如此受欢迎和特别的是它在不同学科中出色的工具箱。由于您的主要目标是学习MATLAB,所以使用Octave或MATLAB并没有什么不同!

只是去买MATLAB而没有任何酷的工具箱(这基本上取决于你的专业)真的不是一笔合理的支出!

你绝对可以用Octave有一个好的开始,并在互联网上跟随大量的MATLAB教程。