数字计算机的出现给数值计算技术的研究注入了新的活力。在现代计算技术的早期发展中,出现了一些著名的数学软件包,如美国的基于特征值的软件包EISPACK和线性代数软件包LINPACK、英国牛津数值算法研究组(Numerical Algorithm Group)开发的NAG软件包等,这些都是在国际上广泛流行的、有着较高声望的软件包。
美国的EISPACK和LINPACK都是基于矩阵特征值和奇异值解决线性代数问题的专用软件包。限于当时的计算机发展状况,这些软件包大都是由Fortran语言编写的源程序组成的。
例如,想求出N阶实矩阵A的全部特征值(用WR、WI数组分别表示其实虚部)和对应的特征向量矩阵Z,则EISPACK软件包给出的子程序建议调用路径为:
CALLBALANC(NM,N,A,IS1,IS2,FV1)
CALLELMHES(NM,N,IS1,IS2,A,IV1)
CALLELTRAN(NM,N,IS1,IS2,A,IV1,Z)
CALLHQR2(NM,N,IS1,IS2,A,WR,WI,Z,IERR)
IF(IERR.EQ.0)GOTO99999
CALLBALBAK(NM,N,IS1,IS2,FV1,N,Z)
以上面的叙述可以看出,要求取矩阵的特征值和特征向量,首先要给一些数组和变量依据EISPACK的格式作出定义和赋值,并编写出主程序,再经过编译和连接过程,形成可执行文件,最后才能得出所需的结果。
英国的NAG和美国学者的Numerical Recipes工具包则包括了各种各样数学问题的数值解法,二者中NAG的功能尤其强大。NAG的子程序都是以字母加数字编号的形式命名的,非专业人员很难找到适合自己问题的子程序,更不用说能保证以正确的格式去调用这些子程序了。这些程序包使用起来极其复杂,谁也不能保证不发生错误,NAG光数百页的使用手册就十几本。
Numerical Recipes一书中给出的一系列算法语言源程序也是一个在国际上广泛应用的软件包。该书小的子程序有C、Fortran和Pascal等版本,适合于科学研究者和工程技术人员直接应用。该书的程序包由200多个高效、实用的子程序构成,这些子程序一般有较好的数值特性,比较可靠,为各国的研究者信赖。
具有Fortran和C等高级计算机语言知识的读者可能已经注意到,如果用它们去进行程序设计,尤其当涉及矩阵运算或画图时,则编程会很麻烦。比如说,若想求解一个线性代数方程,用户得首先去编写一个主程序,然后编写一个子程序去读入各个矩阵的元素,之后再编写一个子程序,求解相应的方程(如使用Gauss消去法),最后输出计算结果。如果选择的计算子程序不是很可靠,则所得的计算结果往往可能会出现问题。如果没有标准的子程序可以调用,则用户往往要将自己编好的子程序逐条地输入计算机,然后进行调试,最后进行计算。这样一个简单的问题往往需要用户编写100条左右的源程序,输入与调试程序也是很费事的,并无法保证所输入的程序100%的可靠。求解线性方程组这样一个简单的功能需要100条源程序,其他复杂的功能往往要求有更多条语句,如采用双步QR法求取矩阵特征值的子程序则需要500多条源程序,其中任何一条语句有毛病,甚至调用不当(如数组维数不匹配)都可能导致错误结果的出现。
用软件包的形式编写程序有如下的缺点:
1.使用不方便
对不是很熟悉所使用软件包的用户来说,直接利用软件包编写程序是相当困难的,也是容易出错的。如果其中一个子程序调用发生微小的错误则可能导致最终得出错误的结果。
2.调用过程繁琐
首先需要编写主程序,确定对软件包的调用过程和连接过程,再经过必要的编译和连接过程,有时还要花大量的时间去调试程序以保证其正确性,而不是想得出什么马上就可以得出的。
3.执行程序过多
想求解一个特定的问题就需要编写一个专门的程序,并形成一个可执行文件,如果需要求解的问题很多,那么就需要在计算机硬盘上同时保留很多这样的可执行文件,这样,计算机磁盘空间的利用不是很经济,管理起来也将十分困难。
4.不利于传递数据
通过软件包调用方式会针对每个具体问题形成一个孤立的可执行文件,因而在一个程序中产生的数据无法传入另一个程序,更无法使几个程序同时执行以解决所关心的问题。
5.维数指定困难
在很多数学问题中最重要的变量是矩阵,如果要求解的问题维数较低,则形成的程序就不能用于求解高阶问题。所以有时为使得程序通用,往往将维数设置得很大,这样在解小规模问题时会出现空间的浪费,而更大规模问题仍然求解不了。在优秀的软件中往往需要动态地进行矩阵定维。
此外,这里介绍的大多数早期软件包都是由Fortran语言编写的,由于众所周知的原因,以前使用Fortran语言绘图并不是轻而易举的事情,它需要调用相应的软件包作进一步处理,当时在绘图方面比较实用和流行的软件包是GINO-F,但这种软件包只给出绘图的基本子程序,如果要绘制较满意的图形则需要用户自己用这些低级命令编写出合适的绘图子程序来。
除了上面指出的缺点以外,用Fortran和C等程序设计语言编程还有一个致命的弱点,那就是因为C语言本身的原因,致使在不同的机器平台上,扩展的C源程序代码是不兼容的,尤其在绘图及界面设计方面更是如此。例如在PC机的Microsoft Windows操作系统上编写的C语言程序不能立即在SUN工作站上直接运行,而需要在该机器上对源程序进行修改、编译后才可以执行。
尽管如此,数学软件包仍在继续发展,其发展方向是采用国际上最先进的数值算法,提供更高效的、更稳定的、更快速的、更可靠的数学软件包。例如在线性代数计算领域,全新的LAPACK已经成为当前最有影响的软件包,但它们的目的似乎已经不再为一般用户提供解决问题的方法,而是为数学软件提供底层的支持。如现在流行的数学软件工具Matlab已经抛弃了一直使用的LINPACK和EISPACK,采用LAPACK为其底层支持软件包。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。