图书前言

本书是针对工程中常用且行之有效的算法而编写的,并且根据算法的分类以及使用特点作了精心的组织和安排。本书具有以下几个特点:

    (1) 书中除收集了传统的算法外,还根据作者工作的经验和近年来数值计算的发展,选取了一些新的、实用的算法。可以说,书中各章几乎都有一些新的算法。

    (2) 书中所有的算法程序都经过认真的调试。

    (3) 本书全部的算法程序均可从清华大学出版社网站上的本书页面中下载,读者可以从中方便地使用书中的每一个算法程序。

    (4) 书中收集的算法都是行之有效的,基本可以满足解决工程中各种实际问题的需要。

    书中程序是用C++描述的。根据问题的特点,采取了以下两种描述的方法:

    第一种方法是为每一个算法定义一个类。在这种类中,数据成员包括算法所处理的数据以及一些重要参数(相当于面向过程程序设计中子程序的形参),有时也将这个类中的各函数成员所用到的公共数据也作为类的数据成员,以便于各函数成员间互相通信。算法所处理的数据以及一些重要参数一般事先由用户存放在一个文件中,各数据之间用若干个空格或回车换行进行分隔。在这种类中,主要函数成员包括以下4种:

(1) 构造函数与析构函数。对于涉及到问题规模的数据(如矩阵阶数,多项式次数等)一般通过构造函数来提供,以便保证在创建该类对象的同时为数据分配存储空间,并且在析构函数中释放这些空间。有时对于个别数据也通过构造函数来提供。

(2) 文件读入函数。在这个函数中,读入算法所需要处理的数据以及一些重要参数。在执行这个函数过程中,程序会提示用户从键盘键入输入文件名。

(3) 实现算法的执行函数。有时还包括这个算法需要调用的其他一些函数。

(4) 输出函数。在这个函数中,将结果输出到一个文件中(文件名由用户提供), 但一般也在屏幕上显示,对于输出到文件中的结果纯粹是数据,不加任何文字信息,各数据之间只用空格或回车换行作分隔,以便这些数据在以后再用程序处理,而在屏幕上显示的结果中还包含有一些文字说明或格式,以便用户阅读。在执行这个函数过程中,程序会提示用户从键盘键入输出文件名。

显然,用户使用这种算法是很方便的,只要事先准备好存放算法所处理的数据以及一些重要参数的输入文件;然后编写一个主函数,该主函数包括创建该类的对象以及由这个对象分别调用输入函数成员、执行算法的函数成员和输出函数成员语句;在执行程序的过程中,用户只要根据程序的提示,由键盘分别键入输入函数名和输出函数名即可。程序执行完成后,屏幕上即显示带有文字说明或格式的输出结果,在输出文件中同时被写进了输出的数据。

    第二种方法是将若干同类算法封装在一个类中。例如,在本书的第10章中,将复数运算封装成一个类,将实系数多项式运算封装成一个类,将复系数多项式运算封装成一个类,以及将各种特殊函数的计算封装成一个类。

    限于作者水平,书中难免有错误之处,恳请读者批评指正。

                                                         作者

                                                         2008年4月