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

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

另外,MATLAB值这个价吗?


当前回答

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

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

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

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

其他回答

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

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

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

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

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

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

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

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显然是一个“很好的”开源替代方案,但我还没有尝试过。

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

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

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

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