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

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

另外,MATLAB值这个价吗?


当前回答

我刚开始使用Octave。我见过有人用MATLAB。上面提到的一个主要区别是Octave有一个命令行界面,而MATLAB有一个GUI。根据我的经验,拥有一个GUI非常适合调试。

在Octave中,你必须执行命令来查看矩阵的长度,等等,但在MATLAB中,它使用良好的界面很好地显示了一切。但Octave是免费的,适合我做的基本任务。如果你确定你要做的只是基本的事情,或者你不确定你现在需要什么,那么就选择Octave。当你真的觉得需要的时候,你可以花钱买MATLAB。

其他回答

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

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

Octave is basically an open source version of MATLAB. It was written to be just that. MATLAB has a very nice GUI which makes it a bit easier to use, but the next stable release of Octave will also have a GUI, which I have tested in the unstable release, and looks fantastic. Octave is much more buggy because it was developed and maintained by a group of volunteers, where the development of MATLAB is funded by millions of dollars by industry. I'm still a student and am using a student version of MATLAB, but I am thinking of going over to Octave once the stable version with the GUI is released.

MATLAB可能比Octave强大得多,算法运行得更快,但对于大多数应用程序来说,Octave绰绰有余,在我看来,它是一个完全免费的神奇工具,而Octave是完全免费的。

我会说使用MATLAB,而你可以使用学术版本,但切换到Octave应该是无缝的,因为他们使用完全相同的语法。

最后,还有Simulink的问题。如果你想做仿真或控制系统设计(可能还有成千上万的其他用途),Simulink是非常棒的,并且附带MATLAB。我认为没有任何一款能与之媲美。虽然Scilab显然是一个“很好的”开源替代方案,但我还没有尝试过。

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

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

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

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

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

如果你仔细阅读你提供的维基页面,你会经常看到这样的句子“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的语法时给出错误。

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

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

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