MATLAB不能做什么?

我经常听到有人抱怨MATLAB授权是多么昂贵。 那么我想知道他们为什么不使用Octave或R。 但后者是正确的? 你可以用R代替MATLAB吗?

你可以用R代替MATLAB吗?

是。

我使用了MATLAB多年,但在过去的3年里主要转向了R。 在这一点上,他们有更多的共同之处。 这部分取决于你的领域和用例。 正如斯宾塞·格雷夫斯 ( Spencer Graves)先前所说 ,这也取决于你“经常发生的教会”。 在决定之前,最好看一下MATLAB工具包与CRAN的特定任务。

R-Help几年前和近期再次 提到了类似的问题。 David Hiebeler (缅因大学)保持了广泛的R / MATLAB比较 ,并且是关于这个主题的最佳参考。 您也可以查看基本function的比较 。

以下是我过去观察到的一些事情,没有一个应该成为破坏者。

  • 一般来说,MATLAB有一个更好的编程环境(如更好的文档,更好的debugging器,更好的对象浏览器),“使用起来更容易”(如果需要,可以使用MATLAB而无需编程)。 Simulink允许您通过graphics连接块进行可视化编程。 REvolution R通过提供更好的IDE来改进debugging, 解决了这些差异中的一些问题 ,但仍然落后了一步。
  • 在正常的configuration下,MATLAB的速度要快一些( 参见这个基准testing的例子 ),尽pipe如果这成为一个问题,有些事情可以用来提高R的性能。
  • 既然它是商业的,它也可以说有更多的“产品”(在集成附加的意义上)和支持(但你付出了代价)。 查看产品列表 。 例如,它有像MATLAB编译器这样的东西,可以创build可执行的MATLAB程序,可以部署。
  • 就软件包/工具包而言,MATLAB对物理科学有更多的支持,而R对统计来说更强大,而不是说对方不能完成这些任务。 而且他们都可以轻松扩展。

所以,如果易用性不是主要关心的问题(而且没有其他商业原因可以避免使用开源工具),那么我认为有一个真正的案例可以使用R.它有一个非常(R邮件列表很棒),正在迅速发展(见CRAN),它是免费的 (这不是一个小问题!)。

编辑:我只是再补充一点: “用R和MATLAB进行function数据分析”一书包括了“Matlab和R语言的基本比较”一章。 这涵盖了一些重要的语法差异(如点的解释或方括号[]的含义)。 对于那些对函数式编程感兴趣的人来说,这本书是非常值得的(用任何一种语言)。

R是统计数据分析和graphics的环境。 MATLAB的起源是数值计算。 如果将基本语言实现用于数据操作(例如,matrix/向量操作),则基本语言实现具有许多共同的特性。

R在其他地方很难find统计function( CRAN上的软件包> 2000),许多统计人员都使用它。 另一方面,MATLAB有很多(昂贵的)工具箱,像工程应用程序

  • image processing/图像采集,
  • 滤波器devise,
  • 模糊逻辑/模糊控制,
  • 偏微分方程,
  • 等等

我已经使用R和MATLAB来解决环境工程相关的问题和build立模型,这两个系统之间有很多重叠。 在我看来,MATLAB的优势在于专门的领域特定的应用程序。 一些例子是:

  • 精简stream体动力学调查等function。

  • 工具箱,如image processing工具箱。 我还没有find一个R包,提供了像分水岭algorithm等工具的等效实现。

在我看来,MATLAB提供了更好的交互式graphicsfunction。 但是,我认为R可以产生更好的静态打印质量graphics,这取决于应用程序。 MATLAB的符号math工具箱也比R等价物(如Ryacas或rSymPy)更好地集成并且更有能力。 MATLAB编译器的存在还允许基于MATLAB代码的系统独立于MATLAB环境进行部署 – 尽pipe可用性取决于您必须投入多less资金。

另一件我应该注意的是,MATLABdebugging器是我已经与最好的之一。

我在R中看到的主要优点是系统的开放性和可扩展性。 这导致了CRAN软件包的不可思议的多样性。 我知道Mathworks还维护一个用户贡献的工具箱的存储库,我不能做一个公平的比较,因为我没有用太多。

R的开放性也扩展到编译代码的链接。 一段时间以前,我有一个使用Fortran编写的模型,我试图决定使用R还是MATLAB作为前端来帮助准备input和处理结果。 我花了一个小时阅读关于编译代码的MEX接口。 当我发现我将不得不编写和维护一个单独的Fortran例程来做一些错综复杂的指针调整来pipe理接口时,我搁置了MATLAB。

R接口由调用.Fortran([子程序名称],[参数列表])组成,并且更简单快捷。

MATLAB比R更大的一个优点是MATLAB文档的质量。 R是开放源代码,在这方面受到很多开源项目的共同特征的影响。

然而,R是一个非常有用的环境和语言。 它在生物信息学界被广泛使用,并且在这个领域有许多有用的软件包。

R的替代scheme是Octave ( http://www.gnu.org/software/octave/ ),它非常类似于MATLAB,它可以运行MATLAB脚本。

根据我的经验,从MATLAB转移到Python是一个更简单的过渡 – Python和numpy / scipy在风格和function方面比R更接近MATLAB。还有开源的直接MATLAB克隆Octave和Scilab 。

MATLAB可以做到这一点,R不能 – 在我的领域,MATLAB被用于实时数据采集 – 大多数硬件公司都包括MATLAB接口。 虽然这可能与RI可能想象它会涉及更多。 此外,Simulink提供了一个我认为从R中缺失的function的整个区域。我确信还有更多的function,但是我对R不是很熟悉。

简短的回答:不,当然不是。 虽然任何一套math软件包都会有重叠,但它们总会对某些问题领域产生偏见。 这些偏见很大程度上取决于你是否想要使用这些软件包之一。

R可以做的一个例子是R不能和信号处理/采集和控制的实时硬件接口。 MATLAB中的Simulink模型可以被configuration为在机器上运行仿真,然后编译代码在真实的系统上执行,将测量的数据作为input并计算适当的输出(在控制系统的仿真现在是完全function一)。 通过机器中的适当硬件板,您可以通过PC运行实时控制系统。

与此相反,R似乎在统计学中扮演着重要angular色,我相信它能胜任MATLAB能做的事情。 同样, Mathematica在符号math上比MATLAB好; 在一般编程中,Python比MATLAB好; 在实际创build图表时, gnuplot比所有的都要好(呃,我假设); 等等。

我同意上面给出的许多答案。 由于答案是针对MATLAB和Rfunction的差异性,所以我会提到一个非常重要的答案:MATLAB包含一个JVM,并且与Java具有完美的,强大的互操作性。 MATLAB用户可以访问所有Java的庞大的库。 MATLAB IDE几乎可以用作穷人的Eclipse。 相比之下,rJava是非常不成熟的,尽pipe它的创造者(罗马弗朗索瓦)非常宝贵的努力。

我们不能,因为这是我们的客户预期/要求。

使用sqldf软件包,R不仅能够进行统计,而且还能够进行严重的数据挖掘 – 假设您的计算机上有足够的RAM。

使用RServe软件包R成为常规的TCP / IP服务器; 所以你可以调用R出Java(或任何其他语言,如果你有API)。 R中还有一个包叫java out或者R.

作为MATLAB和R的用户,我认为他们是非常不同的应用程序。 我自己也有计算机科学背景等等,我不禁想到R是由统计学家统计的,而MATLAB是程序员的程序员。

R使得可视化和计算各种统计信息变得非常容易,但是如果它是由我决定的,我不会用它来实现任何与信号处理有关的事情。

总结一下,如果你想统计,使用R.如果你想编程,使用MATLAB或一些编程语言。

在matlab中支持交互式graphics比在R中好得多。我讨厌matlab作为一种语言,但是当我看到用户如何用鼠标操作探索数据时,我很嫉妒,而我正忙着用xlim等新值重复命令Matlab也处理多面板图比任何R方法更好的任务。 一般来说,Rgraphics有20世纪60年代的感觉。 对于出版物来说没问题,但不是数据交互式探索的最佳解决scheme。