
本书介绍了现代数值分析中的重要概念与方法,包括线性和非线性方程与方程组的求解、数值微分和积分、插值、最小二乘、常微分方程与偏微分方程的求解、特征值与奇异值的计算、随机数与压缩方法,以及优化技术。全书穿插介绍了收敛、复杂度、条件、压缩以及正交这几个数值分析中最重要的概念。此外,书中含有一些算法的MATLAB实现代码,并且每章都配有大量难度适宜的习题和编程问题,便于读者学习、巩固和提高。
前 言 关于本书 本书是为数值逼近技术的理论和应用系列课程编写的教材。它主要是为至少已完成第一年的普通高等微积分课程的数学、理科和工科专业的低年级学生所设计的。熟悉矩阵代数和微分方程的基本知识是很有用的,但并不必先修这些课程,因为本教材对这些内容进行了适当的介绍。 《数值分析》先前的各种版本已被广泛使用。有时我们强调的是作为逼近技术基础的数学分析,而不是方法本身,有时情况则相反。对于工科和计算机科学专业的低年级研究生以及国际大学第一年所开设的数值分析入门课程,本书也可作为主要的参考资料。我们致力于使本书适用于各种层次的读者且不降低以下的最初目标: 介绍现代逼近方法;解释怎样、为什么以及何时可用这些方法;提供进一步研究数值分析和科学计算的基础。 本书包含足以用于一学年的学习材料,但我们希望各位读者将本书用作一个学期的教材。在这一学期的课程中,学生应学会辨别需要用数值技术来求解的问题的类型,并明白运用数值方法时所产生的误差传播的例子。学生能精确地逼近那些不能准确求解的问题的解,学会那些用于估计逼近方法的误差界的典型技巧。本书中那些一学期课程没有讲到的内容可作为参考。无论是一学期的课程还是一学年的课程,都与本书的初衷一致。 本书中几乎每个概念都有实例说明。该版本包含了超过2500道课堂测试过的习题,这些习题的内容覆盖了从方法与算法的基本应用到理论的推广与延伸。此外,习题中还包含了从工程、物理、计算机、生物到经济和社会科学等众多领域大量的应用问题。这些选取的应用问题清晰而明确地阐释了数值技术怎样才能应用于现实世界,并且通常必须用这些数值技术来求解现实世界的问题。 目前已经开发出许多可以进行符号数学计算的软件包,这些软件包统称为计算机代数系统(CAS)。其中在学术界最为流行的有3个:Maple、Mathematica和MATLAB。对于普通的使用者而言,这些软件包的学生版价格比较合理。此外,还有一个免费的资源Sage。 虽然这些软件包在价格和性能上存在差异,但它们都能实现标准的代数和微积分运算。 在本书的例子和习题中,绝大多数问题都能够找到准确值,从而可以方便地测度逼近方法性能的好坏。此外,大量数值技术的误差分析都要估计某个函数的高阶导数或高阶偏导数的界,这是一个冗长乏味的工作,即便掌握了微积分方法,也不会改善很多。在这种情形下,有效使用一个符号计算的软件包,对于逼近技术的研究将非常有用,因为精确解通常可以通过符号计算方便地得到。各阶导数也能用符号计算迅速得到,通过简单的观察分析也许就能给出合理的估计。 算法与编程 在本书的第一版中,我们引入的特色在当时看来是富有创意性的,但也有一些争议。在这个版本里,我们不再将逼近技术用具体的程序语言(主要使用的是FORTRAN)呈现,取而代之的是用伪代码给出算法,依照这些伪代码使用不同的语言可以编写成结构化的程序。从第二版开始,本书就为读者提供了用户手册,用以说明具体语言编写的程序,而且这些程序的数目在后来的版本中逐次增加。对于经常使用的编程语言和CAS工作表,现在我们都有相应的程序代码在网上共享。 针对每一个算法,都有用FORTRAN、Pascal、C和Java编写好的程序。另外,我们也使用了Maple、Mathematica和MATLAB编写程序代码。这些代码的集合能够保证绝大多数普通计算系统的使用者学习。 每个程序都用一个与本书内容密切相关的示例问题来说明。这样在你选择的语言中初次运行程序就能看到输入和输出的格式。对程序进行较小的修改就能解决其他类似的问题。程序输入和输出的格式尽可能与每个编程系统相同,这样指导教师在使用程序讨论问题时则无须考虑单个学生使用的编程系统。 为方便使用,程序的设计只要求在最小配置的计算机上运行,并以ASCII码格式书写。这样这些程序就可以用任何编译器或字处理软件来生成标准的ASCII文件(通常也称为“纯文本”文件)。程序文件中也包含了扩展的README文件,因此可根据编程系统的独特特征来独立地处理。 对大多数编程系统,它们都需要某个合适的软件,如Pascal、FORTRAN和C都需要相应的编译器,而Maple、Mathematica和MATLAB则需要某个计算机代数系统。Java的实现是个例外。你只需要运行程序的系统软件,而Java可以在各种网站上自由下载。得到Java的最好方法是使用一个搜索引擎根据名字来搜索,然后选择一个下载地址,按照网站指导来获取即可。 本版的更新 从本书第一版出版至今已经近40年了,这几十年间数值技术取得了极大的进展,同时计算机设备的性能也得到了迅猛提高。本书的其他版本里,我们都相继增加了一些新技术,以便保证内容更为前沿。为了延续这种趋势,新版本做了一系列重大改变。 ? 我们改写了书中的一些例子,在问题的解给出之前,更多地强调了问题本身。一些例子中增加了额外步骤,以便更清楚地说明迭代程序第一步的计算要求。 ? 为了更便于指导教师布置课外作业,各章的习题被分成计算型、应用型和理论型等类型。在几乎所有的计算型习题中,都使用了奇偶成对编号的方式。因为所有奇数编号的问题在书后都有答案,如果偶数编号的问题被布置成课外作业,那么学生可以先做奇数编号的习题并核对他们的答案,然后再做偶数编号的作业。 ? 书中增加了许多应用型习题。 ? 为便于指导教师在线课程的使用,每个章节后还增加了讨论问题。 ? 为便于在线指导学习,对本书的部分内容进行了重新组织。 ? 在补充阅读材料里还增加了PPT。 ? 本书还更新了引用的参考文献,增加了一些新发表的论文和专著。 本书的每一句话都经过了仔细检查,以确保能够最好地表达我们想要描述的内容。 补充材料 1.Student Program Examples包含了供学生使用的用于求解书中问题的Maple、MATLAB和C程序代码,它们的安排与书中的章节对应。这些系统中的命令也给予了说明。命令用非常短的程序段(没有进行扩展)给出,用以说明如何求解习题中的问题。 2.Student Lectures包含了各章内容的深入阐析。这些讲稿的编写主要用于学习者在线学习,但对传统选课学习的学生也很有用。 3.Student Study Guide包含了大量问题的利用程序代码计算出的解。该指南的前两章是用PDF格式编写的,可在本书网站得到,因此使用者可以预先辨别本书是否足够有用。完整的指南只能通过联系出版商Cengage Learning Customer & Sales Support或者在网上订购。 4.Algorithm Programs是用Maple、MATLAB、Mathematica、C、Pascal、FORTRAN和Java语言写成的本书所有算法的完整程序。这些程序是为熟悉编程语言的学生提供的。 5.Instructor PowerPoints用PDF格式编写,可供指导教师在传统课程和在线指导中使用。需要者请联系作者获取密码。 6.Instructor’s Manual提供了书中所有习题的答案和解答。在新版本中为了确保程序对不同编程语言的兼容性,我们又重新使用本书网站提供的程序运行,生成的计算结果写入该手册。需要者请联系作者获取密码。 7.Instructor Sample Tests仅供指导教师使用。需要者请联系作者获取密码。 8.勘误表。 课程建议 本书的结构设计使指导教师可以灵活地选择授课内容:是偏重理论还是更倾向于应用。依照这些目标,对本书中没有提供证明的结果和用以表明某些方法具有重要意义的应用,我们都给出了详细的参考文献。书中尽可能引用那些在学校图书馆可以查阅到的参考资料,并在本版中更新了相关的文献。我们也引用了那些预设读者可以查阅到的原始研究论文。所有的参考资料都在书中合适的位置被引用,图书委员会(Library of Congress)要求的参考资料信息都包含在内,从而易于图书资料的搜索定位。 下面的流程图显示了各章学习的先后顺序。对于流程图中给出的大多数可能的学习顺序,本书作者在美国杨斯敦州立大学都进行了教学实践。 新版本的内容也可以作为没学过数值分析的大学本科生的数值线性代数课程的教材。该课程应包含本书的第1、6、7和9章这4章的内容。 致谢 从学生和同事那里,我们很幸运地得到了本书早期版本的很多评论与建议,我们很认真地考虑了这些评论与建议,并试图采纳所有与本书理念相一致的建议。我们特别感谢抽出时间来和我们联系,并且告诉我们在后续版本中可以怎样进行改进的所有人。 我们特别感谢: Douglas Carter, John Carroll,都柏林大学 Yavuz Duman, T. C. Istanbul Kultur大学 Neil Goldman, Christopher Harrison, Teryn Jones, 杨斯敦州立大学 Aleksandar Samardzic, Belgrade大学 Mikhail M. Shvartsman, 圣托马斯大学 Dennis C. Smolarski, 圣塔克拉拉大学 Dale Smith,Comcast 我们非常感谢Barbara T. Faires,没有她提供的材料,这次更新版本是不可能完成的。在最困难的日子里,她的关心给予了我们很大的鼓励。 正如我们在本书以前各版本中所经历的,我们得到了杨斯敦州立大学学生的帮助。在这一版中,Teryn Jones是我们的得力助手,他的主要工作是Java编程。我们要感谢俄亥俄州立大学电气工程系的博士生Edward R. Burden,他检查了本书中的所有应用问题以及新增内容。我们也对杨斯敦州立大学的院系同事和行政部门表示感谢,感谢他们所提供的机会和便利,使本书的出版顺利完成。 我们还要感谢对数值方法的历史做出过重大贡献的人。Herman H. Goldstine写过一本优秀的书籍,名为A History of Numerical Analysis from the 16th Through 19th Century[Golds]。另外一个杰出的数学历史知识资源是苏格兰的圣安德鲁斯大学(University of St. Andrews)的MacTutor数学史档案(MacTutor History of Mathematics),它由John J. O’Connor和Edmund F. Robertson创设。 这个在线数据库中包含了令人难以置信的巨大资源,我们从中找到了许多可靠的信息。最后,感谢维基百科的所有贡献者,是他们将很多专业知识添加到该网站,让其他人从他们的知识中获益。 最后,我们感谢这些年来使用和采纳《数值分析》各版本的全体同人。十分欣慰的是听到如此多的学生和新教师采用本书作为教材,作为学习数值方法的开始。我们希望这一版保持此趋势,并增加学生学习数值分析的乐趣。如果你有任何有利于本书下一版的改进建议,我们将对此十分感谢。你可以通过下面的电子邮件地址同我们联系。 Richard L. Burden rlburden@ysu.edu Annette M. Burden amburden@ysu.edu
目 录 第1章 数学基础与误差分析 1 1.1 微积分回顾 2 1.2 舍入误差与计算机算术 12 1.3 算法和收敛性 25 1.4 数值软件 33 第2章 一元方程的解 40 2.1 二分法 40 2.2 不动点迭代 46 2.3 Newton法及其扩展 55 2.4 迭代法的误差分析 67 2.5 加速收敛 74 2.6 多项式的零点与Müller方法 79 2.7 数值软件 87 第3章 插值和多项式逼近 89 3.1 插值和Lagrange多项式 89 3.2 数据逼近和Neville方法 99 3.3 差商 105 3.4 Hermite插值 115 3.5 三次样条插值 122 3.6 参数曲线 139 3.7 数值软件 144 第4章 数值微分与积分 146 4.1 数值微分 146 4.2 Richardson外推法 156 4.3 数值积分基础 163 4.4 复合数值积分法 173 4.5 Romberg积分法 181 4.6 自适应求积方法 188 4.7 Gauss求积公式 195 4.8 多重积分 201 4.9 反常积分 212 4.10 数值软件 217 第5章 常微分方程初值问题 219 5.1 初值问题的基本理论 219 5.2 Euler方法 224 5.3 高阶Taylor方法 232 5.4 Runge-Kutta方法 238 5.5 误差控制与Runge-Kutta-Fehlberg方法 248 5.6 多步法 256 5.7 变步长多步方法 268 5.8 外推法 274 5.9 高阶方程和微分方程组 281 5.10 稳定性 289 5.11 刚性微分方程 297 5.12 数值软件 303 第6章 求解线性方程组的直接法 306 6.1 线性方程组 306 6.2 主元法 318 6.3 线性代数和矩阵的逆 326 6.4 矩阵的行列式 339 6.5 矩阵分解 343 6.6 特殊类型的矩阵 353 6.7 数值软件 367 第7章 矩阵代数中的迭代方法 369 7.1 矩阵向量范数 369 7.2 特征值和特征向量 379 7.3 Jacobi和Gauss-Seidel迭代方法 385 7.4 求解线性方程组的松弛方法 396 7.5 误差界和迭代优化 402 7.6 共轭梯度法 410 7.7 数值软件 425 第8章 逼近论 427 8.1 离散最小二乘逼近 427 8.2 正交多项式和最小二乘逼近 436 8.3 Chebyshev多项式与幂级数的缩约 443 8.4 有理函数逼近 451 8.5 三角多项式逼近 460 8.6 快速Fourier变换 468 8.7 数值软件 477 第9章 近似特征值 479 9.1 线性代数与特征值 479 9.2 正交矩阵及相似变换 487 9.3 幂法 492 9.4 Householder方法 508 9.5 QR算法 515 9.6 奇异值分解 526 9.7 数值软件 538 第10章 非线性方程组数值解 540 10.1 多元函数的不动点 541 10.2 Newton法 548 10.3 拟Newton法 555 10.4 最速下降法 561 10.5 同伦延拓法 567 10.6 数值软件 575 第11章 常微分方程边值问题 577 11.1 线性打靶法 577 11.2 非线性问题的打靶法 584 11.3 线性问题的有限差分方法 589 11.4 非线性问题的有限差分方法 595 11.5 Rayleigh-Ritz方法 600 11.6 数值软件 613 第12章 偏微分方程数值解 615 12.1 椭圆型偏微分方程 617 12.2 抛物型偏微分方程 624 12.3 双曲型偏微分方程 636 12.4 有限元方法简介 642 12.5 数值软件 653 部分习题答案 655 参考文献 757