数值分析(numerical analysis)也称为计算方法,是一门研究算法的学科. 算法思想最早萌芽于古代东方数学,它是人们在解决实际问题中的经验总结,如中国古代《九章算术》中的方程术、刘徽的割圆术、《数书九章》中的大衍求一术等. 在中世纪,中国与印度的数学家创造了大量结构复杂、应用广泛的算法,如方程组求解,方程求根,欧几里得的辗转相除法等,这些算法不再是简单的经验法则,而成为一种归纳思维能力的产物,算法思想有了质的飞跃. 人们逐渐认识到: 算法是一种有限的指令,可以机械地运行,得到确定的答案. 15世纪时欧洲资本主义工商业兴起,数学发展的主要舞台转移至欧洲,到17世纪以解析几何和微积分为标志的近代数学开始形成发展. 各个时期的数学家在发展基础数学的同时由于实际问题计算的需要,也对计算方法做出了重要贡献,如牛顿、欧拉、拉格朗日发展了一般插值方法与差分方法,高斯和切比雪夫分别对于均方模量和绝对值模量发展了最优逼近的方法与理论等. 但是,在20世纪40年代之前,由于社会生产规模的制约,特别是技术手段和计算工具的不足,数值计算的发展比较缓慢,对科学研究和工程技术所起的作用也是有限的. 1946年,美国宾夕法尼亚大学研制成功世界上第一台程序控制电子计算机ENIAC,同年,冯·诺依曼及其同事起草并向美国海军部提交了一份报告--《高阶线性方程组的解》,这标志着数值分析作为一门学科正式诞生. 随后,在科学研究和工程应用的驱动下,与电子计算机的更新换代相呼应,数值分析得到了前所未有的发展.
数值分析研究如何使用计算机求解各类数学问题的方法和理论. 随着信息技术和计算机科学的迅猛发展,计算方法在物理、化学、生物、地质、天气预报、航空航天、水利、汽车制造和机械设计等领域的科学研究和工程计算中得到了极大的应用,形成了独具特色的计算类交叉学科,统称为计算科学,其实质就是使用计算机通过计算的手段探索自然现象和社会现象的客观规律. 目前,实验、理论和计算已经成为人们进行科学活动的三大方法. 数值分析是计算科学的基础,它在很大程度上还代表着整个计算科学的发展. 正因为如此,Mathematica与数值分析实验前言数值分析或数值计算方法课程在高等院校的数学与应用数学专业、信息与计算科学专业得以普遍开设,并成为许多理工科专业的公共课.
数值分析作为一门数学课程,自然有一套严谨的理论体系. 同时,数值分析所介绍的方法又需要在计算机上实现,课程呈现出很强的实践性. 在1995年以前,由于计算条件的限制,数值分析课程主要学习算法推导和误差分析等理论知识. 自此之后,随着计算机的普及和数学软件的成熟,在数值分析教学中逐步引入了上机实验这一实践环节. 目前,绝大部分高校的数值分析课程都安排有上机实验,新近出版的数值分析教材也都增加了上机实习内容,其中实习题目以算法的实现居多,还有一些教材给出了部分算法程序. 这些方法或做法为数值分析教学增添了新的活力,有助于培养学生的数值计算能力. 同时,我们还认识到,在数值分析教学中单纯安排一些算法上机实验是远远不够的,我们还可以在数值分析实践教学方面做更多的事情,在培养学生的计算意识方面做得更好. 鉴于此,作者在长期从事数值分析教学和计算数学科研的基础上,有针对性地编写了这本数值分析实验教材.
本教材围绕算法这一主题展开,用算法的实现、算法的理解、算法的应用这一主线将各部分内容有机地串联在一起. 需要指出的是,算法这一主题还包括了算法的设计、算法的推导和算法的分析这三个基本环节,它们构成了数值分析理论教学的基本内容,所有的数值分析教材都有详细叙述. 本教材为了体现算法的完整性,对于这些内容给予了简单介绍. 算法的实现是本教材的基本内容,包含了数值分析教材中最主要的一些算法. 目前,常用数值算法都已经实现了软件化,在数学软件中,通过一个简单的命令即可实现复杂的算法. 关于算法实现,我们采用了两种处理方式,一是从最底层算法着手编写程序,其目的在于培养学生的科学计算程序设计能力;二是直接调用数学软件的功能函数,其原因在于有些算法本身过于复杂,直接实现比较困难. 比如,非线性最小二乘拟合算法本身并不包括在本科数值分析教材中,但实际应用又比较重要;又比如,编写快速傅里叶变换程序对于有很好编程基础的人员也不容易,但使用软件实现非常简单. 在数值分析教材中,对于同一类问题,通常会给出若干种数值方法,并对每种方法进行理论分析,包括截断误差估计或收敛阶估计或舍入误差估计、收敛性分析、稳定性分析等. 这些分析对于学好数值分析无疑是重要的,但对于各种算法的实际计算效果及在应用算法时需要注意的问题往往涉及较少,而这正是本教材的重点内容. 本教材在每一章都设计了多个实验,对算法从多个角度进行直观地分析和比较,目的在于使学生能够更好地理解算法,进而在应用时能够做到自如地选择算法. 数值分析是数学与实际问题产生联系的桥梁课程,大部分学生学习数值分析的目的在于应用,如何应用数值算法解决实际计算问题在数值分析教材中很少探讨. 本教材精选了一些应用实例,以问题解决为出发点,探讨算法在其中所起的关键作用,以便学生对数值算法的最终归宿有所了解,增强学好用好数值分析的自觉性.
目前,国内外已经出版了多种数值分析优秀教材,这些教材各具特色,为数值分析的教学提供了极大的方便. 本教材作为数值分析的实验教材,按照李庆扬、王能超和易大义三位教授编写的《数值分析(第5版)》(清华大学出版社)的体系精心挑选并设计实验,可以作为该教材的配套实验教材. 本教材的大部分实验从章节上看并没有特别的先后次序,实验内容由浅入深,层次分明,难度基本不超过国内流行的数值分析教材. 因此,本教材实验内容同样适用于其他数值分析教材.
本书作为一本实验教材,提供实验程序是必需的. 由于本教材并不仅仅是为了提供一本数值方法诸程序而编写的指导书,更重要的目的在于通过实验学习、理解数值分析,并在需要时能够正确选择算法,这就要求在完成实验时不但要进行数值计算,而且还要用到许多符号演算,并需要大量绘图. 因此,在软件的选择方面,理想的软件应该具备数值计算功能、符号运算功能和绘制各种图形的功能. 具有所有这些功能的流行数学软件当属MATLAB和Mathematica. 本教材选用Mathematica软件作为编程语言,对于熟悉 MATLAB软件的读者,自己不难写出基础算法程序,或从MATLAB大量资源中找到相应的程序. 作为教材的后续建设内容,本教材将在课程网站上逐步给出实验的MATLAB程序.
在本教材中,我们给出了部分实验程序,还有一部分程序没有给出,希望读者在学习程序编写方法的基础上能够自己动手编写程序,增强实践能力,为以后的工作打下坚实的计算基础. 根据作者多年编写程序的经验,编写一个程序会有一分的收获,编写两个程序会有两分的收获,如果能够编写出本教材所有实验的程序,则编程能力必定会有质的提高. 当然,为了方便不同层次的读者使用本书,我们将建立一个数值分析课程网站,将所有实验程序放在网站上,供读者下载,网址为
http://59.67.75.245/college/sxxy/skin/one/index.asp
点击本科生教学→课程建设→数值分析资料
本教材主要由王同科编写完成,张东丽参与编写了第1章及后面章节的部分实验,王彩华参与编写了部分实验,并仔细阅读了各章内容,提出了很好的修改意见. 由于作者水平所限,书中遗漏和错误之处在所难免,恳请读者批评指正. 读者在使用过程中如有问题,请与王同科联系,电子邮件地址: wangtke@sina.com.
在实验设计过程中,我们参考了国内外的一些数值分析、数学分析、数学实验和数学模型教材,我们将它们一一列在本书最后的参考文献中,在此对作者一并致谢!
在教材编写过程中,天津师范大学教务处和数学科学学院给予了大力支持,在此表示感谢.
作 者2011年5月