现在的位置: 首页 > 综合 > 正文

寻找Matlab的替代品

2013年10月21日 ⁄ 综合 ⁄ 共 1187字 ⁄ 字号 评论关闭

在数学计算上,特别是Numeric
computation上,Matlab一直都是最常用的软件。但是,Matlab并非免费软件,即便是最便宜的student
version也要$99。虽然在学校的电脑有Matlab,可毕竟不是自己的本本。如果想在家里用,就得登录到学校的机器。这样做开发和调试的时候就不
方便了。Octave
SciLab
是两个比较著名的数值计算软件,而且都是免费的。Octave几乎完
全兼容Matlab的script语法,同时也是开源的。所以,选择Octave的比较多。Octave是从1988年开启的项目,有相当的历史。同时,
最新的版本也是今年上个月update的。Octave现在已经是GNU官方下的开源项目,除开Windows,MacOS外,Unbuntu,
cygwin等也都自带。不过有点不方便的是,Octave没有提供GUI的开发调试环境。没有GUI的Editor我可以忍受,但是没有方便的调试环
境,这点就很不爽了。还好,很多开源爱好者也自己开发了一些不错的Octave的IDE。我选择的是QTOctave
。QTOctave的环境和Matlab差不
多。

 

    
Matlab和Octave这种环境,其实只能在做一些简单的,试探性的实验。如果用在真正的软件开发里面,我还是期望能够用到一些Java或者
C/C++的数值计算包。C/C++的就是GSL了,不过这个东西在Windows下只有用GSL for
Windows版本,并不是真正纯正的GSL。而且版本较旧。Java方面我尝试了各种能做矩阵计算的包。JAMA是比较常用的library。而
且,Weka里面带的Matrix支撑,基本上就是JAMA的代码。它支持基本的矩阵运算,也支持SVD,EIG,LU,
QR分解等等。不过,它的矩阵inverse算法,似乎有点问题。在我的实验代码里面,出现了一个bug:

   Matrix
[-1.62000,  -1.00000; -1.00000,  -0.62000]在JAMA( or
Weka)里面,计算逆矩阵,结果是一个很大很奇怪的矩阵。而在Matlab和Octave里面的正确是: [-140.91,227.27;
227.27,-368.18]。

  最后我又尝试了Apache下面的Common Math库
。这个库现在已经是2.1的版本。
Apache也是跟GNU起名的著名开源项目组织。上面这个bug,在Apache Common Math
2.1里面结果和Matlab一致,没有问题。另外,这库相对于JAMA来说,还包含了一些优化工具库等更多库。而且,这个库给我的感觉就是做得更加专
业。比如说,它的内部矩阵实现,会分大矩阵和小矩阵来分别处理,从而提高内存访问效率。所以,Common
Math是比较可靠的旋转。但是,说到真实的大规模数值计算,我们还是应该考虑基于C/C++的库单独处理。

抱歉!评论已关闭.