开放源代码的数学软件(转)
周超 白峰杉
(清华大学数学科学系,北京 100084)
1 开放源代码---一个值得注意的趋势
开放源代码在20世纪最后几年的发展给人以耳目一新的感觉。开放源代码软件,开放源代码模式,开放源代码文化,开放性文档的写作;Richard Stallman和他创立的GNU计划(GNU Projects),Linus Torvalds和以他名字命名的Linux操作系统等,这些名字无数次出现在各种传媒上,迅速成为信息领域通行的概念。信息产业界的大公司——IBM, SUN,网景等等,以前所未有的热情纷纷参与其中,将他们的产品转移到开放源代码的平台上,把原来的商业产品开放源代码。
最近美国电影协会控DeCSS发布一案,对计算机软件的发行方式和版权问题提出了思考。美国巡回法院的判决指出,计算机程序代码不仅仅是功能的表达,更重要的是思想的表达,并判美国电影协会败诉。其关键是DeCSS以源代码发布的。
开放源代码运动(Open Source Movement)的兴起,几乎是爆炸性地发展。Linux内核不断更新,新的Linux发行版,越来越多的软件开放源代码。现在,几乎可以在软件的任何种类中找到开放源代码软件的踪迹,下表给出的只是若干典型的例子:
操作系统: Linux,BSD系列,Sun Solaris8.0
Office办公套件: Star Office, Koffice
开发工具: C++: C-Forge, Java: NetBeans, Anfy等等
网络服务器软件: Apache, Wu-Ftp, sendmail
网络浏览器: Netscape系列,Lynx
希望对开放源代码运动,GNU计划和Linux操作系统有进一步了解的读者,参看参考文献[1],[2],[6]和[7]。
上面提到的软件,都是通用性的。在数值和符号计算软件中也有越来越多开放源代码软件。本文着重介绍两个数值计算的开放源代码软件Scilab和GNU Octave,并且与大家熟知的Matlab作了对比,表明Scilab和GNU Octave都可以用来替代Matlab。
2 开放源代码的数学软件
其实我们很久以来一直在使用着开放源代码软件,一个著名的例子就是LaTex排版软件。开放源代码一直是计算数学和科学与工程计算领域重要的工作方式,而且多年如此。在计算数学领域中,算法用程序来表达是自然的,也是清晰高效的。对我们来说,代表数学算法的源代码是一种思想交流的方式,不应该被某些人据为私有,并加上版权保护。NetLib(www.netlib.org)为该领域众多的学者所熟悉,是多年来进行开放源代码数学软件交流的重要媒介。
但近几年,数学软件的研究与使用者,注意力似乎更多地被商业性数学软件所吸引,如Mathematica,Matlab, Maple, SAS等相当普及和流行。不可否认,这些软件产品的确非常优秀,性能很好。但是他们价格昂贵,并且是专有的,使用上受到限制,在国内售后服务和技术支持有限。反思这一现象,不难发现这些商业软件的的诱人之处,主要在于友好的用户界面和完善的图形功能。
在任何的软件中,如果没有发布原代码,软件中的问题只能等待软件开发商来修正。比如Matlab中的函数roots,对(x-a)n这样的多项式求根的结果并不理想,例如我们对(x-1)50求根,那么会出现这样的结果,第一个根是2.73693805237014,最后一个是0.364760488907891,我们没有办法去用一个更好的算法去替代它。而Matlab的每次升级都没有涉及这一问题,需要的用户只好一次又一次地等待。如果使用的是开放源代码软件,那么结果是另外一个样子,用户可以自己动手去修改它,并和大家一起分享这个好处。
3 作为Open Source Software的Scilab
Scilab是由法国INRIA实验室开发的一个开放源代码的自由软件,它最初是为系统控制和信号处理而开发的。与传统的开放源代码数学软件相比,Scilab的特点在于它具有友好的用户界面和较完善的图形功能。Scilab软件由三个部分组成:语言解释器,Scilab例程的函数库,Fortran和C例程库。
Scilab提供的是一个解释运行的计算环境,具有鲜明的特点。
(1)与平台无关(cross-platform)
INRIA实验室的努力工作下,以及一些志愿者的协作下,几乎可以在任何一个计算机环境中使用Scilab。在Windows9x/NT系统,常见的Unix/Linux-XWindow系统,以及Apple公司的Macintosh系统上我们都可以找到可运行的Scilab的二进制发行版本。
更多的环境将被Scilab支持。如果需要在一些特殊的操作系统环境中使用,用户还可以自己编译一个可执行的版本。
(2)与Matlab兼容(Matlab-Compatible)
Scilab是和Matlab兼容的高级语言,具体体现为,
具有种类丰富的数据类型,矩阵的运算象普通的数值运算那样自然。这与大家熟悉的Matlab相当类似,易于使用。
为各种计算提供了一个基本的函数和功能集。能处理更复杂的矩阵运算,比如分式矩阵,矩阵多项式,能够处理图表和列表这样复杂的对象。
提供了一个开放的可编程的环境,可以轻松添加基本功能。
支持以工具箱(Toolbox)的形式针对特殊的应用开发函数库。
Scicos工具包能快速方便的进行数学建模,其功能接近Matlab软件的Simulink。
(3)图形化界面
界面的形式与Matlab接近,对熟悉Matlab的用户很容易接受Scilab。
(4)开放源代码
Scilab对我们来说是一个完全开放式的数学计算环境,可以在底层扩展功能,甚至于动手优化和定制一个自己的Scilab。在Scilab的各个发行版中,有一种发行版是一般数学软件所没有的,通常是这样命名的:
scilab-2.5-src.tar.gz
在软件名scilab以及版本号2.5后面有个src,这是原代码(source)的缩写。这样的发行版代表着这是原代码的发行包,里面是Scilab的一份原代码。这种发行包是开放源代码软件的典型特征。
Scilab的README文件里面明确的说明这是个自由软件,对所有用户都是免费使用。只需要用户按照格式填写一份用户说明,然后使用email注册就可以了。
(5)并行计算:
Scilab集成了PVM (Parallel Virutal Machine),因此我们可以网络环境中并行计算。Matlab则没有这部分功能。关于Scilab的并行计算的进一步介绍见[8]。
可见Scilab是一个比较完善的计算环境,在大多数情况下能满足我们的要求。我们在使用方式、功能和性能上把Scilab和Matlab作了一些比较测试,从结果看,Scilab是一个优秀的计算平台。和昂贵的商业软件相比,无论在性能还是在易用性上,Scilab都不亚于的商业软件。
4 自由数学软件GNU Octave
GNU Octave是自由软件基金会(Free Software Foundation)支持的遵循GPL协议(GNU General Public License)的一个自由再发布的软件,作者是以John W. Eaton为首的一些志愿者。它提供了一个环境,该环境支持叫做GNU Octave的高级语言,这种语言与Matlab兼容,主要用于数值计算。它提供了一个方便的命令行方式,可以数值求解线性和非线性问题,以及做一些数值模拟。
Octave也提供了一些工具包,可以解决一般的线性代数问题,非线性方程求根,常规函数积分,处理多项式,处理常微分方程和微分代数方程。它也很容易的使用Octave自带的接口方式扩展和定制功能。
与前面介绍的Scilab相比,首先它们的共同点是开放源代码软件。
Octave的比起Scilab,对Matlab的语法兼容性更好,几乎没有差别。比如,Octave也使用M文件的形式来扩展功能和定义函数。因此熟悉Matlab的用户更容易接受Octave环境。
Octave的功能比起Scilab要简单一些,这使得Octave对一些用户来说意义不如Scilab大。
很不幸的是Octave目前没有图形界面,我们只能在行命令的方式进行交互。
但是Octave还是有自己的特点:
(1) 它是一个GPL软件。关于GPL的意义,这里不介绍,我们要指出的一点是,它允许用户在遵循GPL协议的前提下,自己发行这个软件,可以单独,也可以包含在用户的产品里面发行。而Scilab是不允许的,用户只能免费使用Scilab。
(2) 它可编程的性能更好, Octave语言功能更为强大,几乎提供所有系统函数的支持,Octave在语法上也更接近C的语法,比如提供++和这--样的预算符。这样,我们可以在Octave环境里面增加一些更为强大和易用的扩展。不象在Matlab和Scilab环境中限制比较多,有时无法充分的利用系统资源。
(3) 它的计算库都是用C写,而Scilab则基本是Fortran的编写的。这也是一份有用的资源。
5 结论与思考
(1)开放源代码会成为软件开发与发行的重要方式之一。本文介绍的Scilab和Octave都是开放源代码的数学软件。Scilab可以免费使用,Octave不仅可以免费使用,还可以遵照GPL协议由用户再发布。
(2)可以预见,自由数学软件由于它的开放性,功能会不断丰富,性能会逐步提高,能够满足更多用户的要求。
(3)与著名的商业性数学软件Matlab相比,无论从功能还是从性能上Scilab都不逊色。在国内目前售后服务和技术支持有限,而且商业性数学软件价格昂贵的情况下,完全可以替代Matlab使用。
(4)本文介绍的主要是数值计算软件。在符号计算方面Mathematica和Maple是目前流行的商业性软件。开放源代码的符号计算软件发展也很快,yacas是目前被看好的一个。
(5)研制和开发国内自有的科学计算环境,是国内计算数学和科学与工程计算工作者多年探索的问题。借助现有的自由数学软件,特别是可以遵照GPL协议由用户再发布的自由数学软件,可能更加现实。
参考文献(共10篇,略)
Richard Stallman:Stallman是GCC(一种C编译器)和GNU Emacs等软件的作者。GNU计划和自由软件基金会(FSF)的创建者,开放源代码运动的发起人。
GNU计划(GNU Projects):Stallman创建的这一计划,目的是建立一种开放的、免费的Unix版本。GNU本身没有达到目标,但是却产生了一些重要的工具,日后并入Linux并使之成为了特性完备的操作系统。为了保护其工作,Stallman成立了免费软件基金会(Free Software Foundation, www.fsf.org)并且起草了General Public License(GPL)。GPL成为了Linux和许多其它计划遵守的准则。进一步的资料见[2]。
DeCSS:一种针对DVD区位加密码的解密算法。美国电影协会认为DeCSS算法代码在网上的公开发表会促使盗版DVD的流行。
Linux: 一种以GPL作为发布协议的操作系统,常见的发行版本有Redhat, Slackware和Debian。对Linux进一步见[6]。
Apache:一种市场上占有率最高的Web Server。Apache是一个在宽松的BSD协议约束下的开放源代码程序,开发者可以随意按照自己的需要对其进行加工。希望详细了解Apache的读者见[10]。
NetLib: 是一个收集数值算法,科学计算以及相关领域自由软件的组织,它主要由AT&T贝尔实验室,田纳西大学(University of Tennessee),OAK RIDGE国家实验室主持运作,是最重要的自由数学软件的交换地点。它不但收集了最全的数学算法程序库,也提供了良好的算法搜索引擎。
INRIA实验室:希望对该实验室做进一步了解的读者见[4]。
PVM:这是NetLib发布的一个目前流行的并行虚拟系统。Scilab在运行环境中集成的是PVM的接口,如果想需要PVM,需要先运行PVM驱动。