商品详情
书名:数值分析与计算方法(第二版)
定价:69.0
ISBN:9787030536440
作者:雷金贵,李建良,蒋勇
版次:1
出版时间:2017-09
内容提要:
《数值分析与计算方法》是为理工科高等院校普遍开设的“数值分析”与“计算方法”课程而编写的参考教材,第二版共10章,全部教学内容大约需要120个学时,主要包括:数值计算的基本理论,插值问题,线性方程组的直接与迭代解法,方程求根,数据拟合与函数逼近,数值积分与数值微分,常微分方程初(边)值问题,矩阵特征值与特征向量的幂法计算,线性规划及其在矛盾方程组求近似解中的应用等内容,为了方便教师根据不同的学科背景与教学计划灵活安排教学,全书采用模块化方式组织教学内容,各个章节相对独立,部分章节标题后面带“*”表示该章节为选修内容。为了方便初学者及时掌握学习重点,每章后面附有适量习题;此外,为了提高初学者分析问题、解决问题的能力,提高其程序设计能力与综合素质,本书在附录中安排了10篇“上机实习课题”,以方便其上机计算练习。
全书秉承大学生综合能力锻炼与素质培养的核心理念,注重理论与实际相结合,在保持科学严谨的基础上,内容阐述深入浅出,脉络清晰,层次分明,方便读者快速查阅与参考。
目录:
目录
第二版前言
第*版前言
第1章 绪论 1
1.1 计算机数值方法概述 1
1.1.1 数值计算方法的概念与任务 1
1.1.2 数值计算问题的解题过程与步骤 3
1.1.3 本课程的内容与数值算法的特点 4
1.2 误差、有效数字与机器数系 6
1.2.1 误差的概念与来源 6
1.2.2 有效数字与机器数系 7
1.2.3 舍入误差的产生 11
1.3 误差传播与防范 12
1.3.1 误差的传播 13
1.3.2 防止“大数吃小数” 14
1.3.3 避免绝对值相近的数作减法 15
1.3.4 避免0或接近0的数作除数 16
1.3.5 避免绝对值很大的数作乘数 16
1.3.6 简化计算公式,减少计算量 17
1.3.7 设计稳定的算法 17
1.3.8 精度丢失定理 19
习题1 20
第2章 插值法 22
2.1 插值问题 22
2.1.1 基本概念 22
2.1.2 插值多项式的存在*一性 22
2.2 拉格朗日(Lagrange)插值 23
2.2.1 Lagrange插值多项式 23
2.2.2 插值余项 25
2.3 差商与牛顿(Newton)插值 28
2.3.1 差商的定义和性质 28
2.3.2 Newton插值公式 30
2.4 差分与等距节点插值 33
2.4.1 差分及其性质 33
2.4.2 等距节点插值公式 34
2.5 埃尔米特(Hermite)插值 36
2.6 三次样条插值 40
2.6.1 多项式插值的缺陷与分段插值 40
2.6.2 三次样条插值函数 41
2.6.3 三次样条插值函数的构造方法 42
2.6.4 两点说明 48
习题2 49
第3章 线性方程组的直接解法 52
3.1 引言 52
3.2 Gauss消元法 53
3.2.1 三角形方程组的解法 53
3.2.2 预备知识 54
3.2.3 Gauss消元法 55
3.2.4 Gauss消元法的计算量 58
3.2.5 Gauss消元法的条件 59
3.2.6 列主元消元法 61
3.2.7 全主元消元法 63
3.3 Gauss-Jordan消元法与矩阵求逆 64
3.3.1 Gauss-Jordan消元法 64
3.3.2 用Gauss-Jordan消元法求逆矩阵 67
3.4 矩阵分解 69
3.4.1 Gauss消元法的矩阵解释 69
3.4.2 Doolittle分解 71
3.4.3 方程组的求解举例 75
3.4.4 正定阵的Doolittle分解 77
3.4.5 Cholesky分解与平方根法 79
3.4.6 LDLT分解与改进的平方根法 82
3.4.7 带列主元的三角分解 83
3.5 追赶法 89
3.6 向量范数 93
3.6.1 向量范数定义 93
3.6.2 向量范数等价性与一致连续性 95
3.7 矩阵范数 98
3.7.1 方阵的范数 98
3.7.2 m×n阶矩阵的范数 105
3.8 条件数与方程组的误差分析 106
3.8.1 病态方程组与条件数 106
3.8.2 方程组的摄动分析 109
3.8.3 Gauss消元法的浮点误差分析 112
3.8.4 方程组的病态检测与改善 114
习题3 117
第4章 方程求根 120
4.1 方程根的存在、*一性与有根区间 120
4.1.1 方程根的存在与*一性 121
4.1.2 有根区间的确定方法 121
4.2 二分法 123
4.3 Picard迭代法与收敛性 126
4.3.1 Picard迭代格式的收敛性 128
4.3.2 Picard迭代法敛散性的几何解释 130
4.3.3 Picard迭代法的局部收敛性和误差估计 132
4.3.4 Picard迭代的收敛速度与渐近误差估计 135
4.4 Newton-Raphson迭代法 137
4.4.1 Newton-Raphson迭代法的构造 137
4.4.2 Newton法的大范围收敛性 138
4.4.3 Newton法的局部收敛性 141
4.4.4 Newton法的改进 142
4.4.5 求非线性方程组的Newton法 143
4.5 割线法 144
4.6 代数方程求根 146
4.6.1 秦九韶算法 147
4.6.2 秦九韶算法在导数求值中的应用 148
4.6.3 代数方程的Newton法 149
4.6.4 劈因子法 150
4.7 加速方法 154
4.7.1 Aitken加速法 154
4.7.2 Steffensen迭代法 155
4.7.3 其他加速技巧 156
习题4 157
第5章 线性方程组的迭代解法 159
5.1 迭代法的构造 159
5.1.1 Jacobi迭代法的构造 160
5.1.2 Gauss-Seidel迭代法的构造 162
5.2 迭代法的收敛性 165
5.2.1 一阶定常迭代法的收敛性 166
5.2.2 Jacobi迭代法与Gauss-Seidel迭代法收敛性的判定 171
5.2.3 迭代法的收敛速度 176
5.3 逐次超松弛迭代法(SOR方法) 176
5.3.1 SOR迭代的构造 177
5.3.2 SOR方法的收敛性 178
5.3.3 相容次序与*佳松弛因子的选择 181
习题5 183
第6章 近似理论 185
6.1 矩阵的广义逆 185
6.1.1 Moore-Penrose广义逆 185
6.1.2 广义逆的性质 188
6.2 方程组的*小二乘解 190
6.2.1 方程组的*小二乘解 190
6.2.2 方程组的极小*小二乘解 193
6.3 矩阵的正交分解与方程组的*小二乘解 195
6.3.1 Gram-Schmidt正交化方法 195
6.3.2 矩阵正交分解在求极小*小二乘解中的应用 199
6.3.3 Householder变换 201
6.3.4 Householder变换在矩阵正交分解中的应用 203
6.4 矩阵的奇异值分解 208
6.5 数据拟合 214
6.6 正交多项式 218
6.6.1 正交多项式的概念与性质 218
6.6.2 Chebyshev多项式 220
6.6.3 Chebyshev正交多项式的应用 223
6.6.4 其他正交多项式 230
6.7 线性*小二乘问题 230
6.8 正交多项式在数据拟合中的应用 235
6.9 函数逼近 238
6.9.1 *佳平方逼近 240
6.9.2 *佳一致逼近 245
习题6 248
第7章 数值积分与数值微分 251
7.1 插值型数值积分公式 251
7.1.1 中矩形公式和梯形公式 251
7.1.2 插值型求积公式 253
7.1.3 求积公式的代数精确度 254
7.2 Newton-Cotes(牛顿-科茨)型求积公式 256
7.2.1 Newton-Cotes型求积公式的导出 256
7.2.2 几种低阶求积公式的余项 260
7.3 复化求积法 261
7.4 龙贝格(Romberg)算法 264
7.4.1 区间逐次二分法 264
7.4.2 复化求积公式的阶 266
7.4.3 Romberg算法 266
7.5 Gauss(高斯)型求积公式 270
7.5.1 基本概念 270
7.5.2 Gauss点 271
7.5.3 Gauss-Legendre(高斯-勒让德)公式 272
7.5.4 稳定性和收敛性 274
7.5.5 带权 Gauss公式 275
7.6 数值微分 277
7.6.1 插值型求导公式 277
7.6.2 三次样条插值求导 280
习题7 281
第8章 常微分方程数值解法 283
8.1 常微分方程初值问题 283
8.1.1 常微分方程(组)初值问题的提法与解的存在性 283
8.1.2 常微分方程的离散化 285
8.1.3 基本概念 286
8.1.4 Euler 显式格式的几何解释 287
8.1.5 误差与差分格式的阶 288
8.2 Runge-Kutta(龙格-库塔)法 291
8.2.1 Runge-Kutta法的基本思想 291
8.2.2 四级四阶Runge-Kutta法 293
8.2.3 步长的选取 294
8.3 单步法的收敛性和稳定性 296
8.3.1 收敛性的概念 296
8.3.2 Euler显式格式的收敛性 297
8.3.3 一般单步法的收敛性 299
8.3.4 单步法的稳定性 302
8.4 线性多步法 304
8.4.1 Adams外推法 305
8.4.2 Adams内插法 307
8.4.3 Adams预报-校正格式 308
8.5 常微分方程组与边值问题的数值解法 309
8.5.1 一阶方程组 309
8.5.2 高阶方程的初值问题 310
8.5.3 边值问题的差分解法 310
习题8 312
第9章 矩阵特征值与特征向量的幂法计算 314
9.1 幂法 314
9.1.1 幂法 314
9.1.2 规范化幂法 319
9.2 幂法的加速与反幂法 321
9.2.1 原点平移法 321?
9.2.2 Rayleigh商加速法 323
9.2.3 反幂法 324
9.3 实对称矩阵的Jacobi(雅可比)方法 326
9.3.1 预备知识 326
9.3.2 Givens平面旋转变换与二阶方阵的对角化 327
9.3.3 实对称矩阵的Jacobi方法 328
9.3.4 Jacobi方法的收敛性 330
9.3.5 Jacobi过关法 331
9.4 QR方法 332
9.4.1 基本的QR方法 332
9.4.2 带原点平移的QR方法 337
习题9 338
第10章 线性规划 340
10.1 线性规划问题与其对偶问题 340
10.1.1 线性规划模型 340
10.1.2 对偶 345
10.2 线性规划的基本定理 347
10.2.1 LP问题可行域 347
10.2.2 LP问题的解 349
10.2.3 线性规划的基本定理 350
10.2.4 图解法 354
10.3 单纯形法 356
10.3.1 单纯形法 356
10.3.2 初始可行解的确定 364
10.4 矛盾方程组的近似解 365
10.4.1 e1-问题 365
10.4.2 e∞-问题 368
习题10 370
参考文献 374
附录 上机实习课题 375
1.1 误差分析与控制 375
1.2 插值问题 375
1.3 矩阵条件数的估计 376
1.4 方程求根 377
1.5 线性方程组求解 377
1.6 曲线拟合问题 378
1.7 数值积分 379
1.8 常微分方程初(边)值问题 379
1.9 矩阵的特征值与特征向量 381
1.10 线性规划 381
在线试读:
第1章 绪论
本章的重点是介绍数值计算方法课程的基础知识,包括误差的概念与估计、有效数字与机器数系的基本理论,数值计算过程中误差形成、传播的机制与预防措施等。
1.1 计算机数值方法概述
1.1.1 数值计算方法的概念与任务
电子计算机的工作依赖于其物理硬件设备(包括中央处理器、内外存储器等),以及以算法为核心的应用软件(俗称程序)。通常情况下,根据解决问题的不同类型,可将算法分为数值算法与非数值算法。从计算机的出现至今,数值算法一直受到科学研究与工程技术领域的共同关注,人们习惯上将研究数值算法的学科称为数值计算方法,简称计算方法。即数值计算方法是一门数学学科,该学科的重点是研究如何在电子计算机上实现数值计算或数值求解的相关理论与方法,相应的计算实习则是将有关理论与方法在计算机上实现的系统训练。
从20世纪40年代电子计算机诞生至今,随着计算机硬件技术的快速发展,计算机在物理内存、CPU运算速度等方面已逐渐达到其物理极限。因此,在研究、设计、应用计算方法时,不但要求能够设计出可解决实际问题的算法,而且必须考虑降低算法复杂性的问题,即如何提高算法的计算速度、如何减少程序中变量对物理内存的占用,以及如何降低算法的结构复杂性或者增加算法的稳定性等问题。
作为科学研究与工程技术领域中的重要理论与实现工具,数值计算方法当然可以不依赖于计算机而独立进行。但是,将数值计算方法与计算机应用结合起来,形成能够在计算机上编程实现的数值计算方法,不但可以使科学问题能够得到更快、更好的解决,而且可以大大提高人类应用计算机的水平。因此,在老师的安排与指导之下,让初学者进行适当的计算实习与演练,自然成为本门课程教学过程中一个非常重要的环节。
实践证明,通过数值计算方法相关课程的学习和训练,初学者能够在掌握数值计算方法的理论与方法的同时,也能在一定程度上提高其发现问题、分析问题、解决问题的能力,进而达到提高其综合素质的目的。这对21世纪的科技人员来说显然更为重要。
在初步了解了什么是数值计算方法课程之后,接下来有人可能会问:与传统的数学学科相比,数值计算方法能够解决什么类型的问题?如何解决呢?从宏观的角度上看,数值计算方法又有哪些典型特征呢?
针对以上这几个问题,我们简单介绍几个实际的数值计算类问题。
(1) 2008年8月8日,第29届夏季奥林匹克运动会在北京举行,全国上下一片欢腾。然而,那些为北京奥运会作天气预报的科学家们并不轻松,由于担心一场突如其来的大雨会搅乱组委会的精心安排,他们时刻关注着北京的天气变化。于是我们要问的第*个问题是:“数值天气预报”是如何做出的?又如何判定数值预报是可信的呢?
(2) 给定如下数据表
表示的离散函数f(x),如何求函数值f(2.8)的近似值呢?又如何判定所求近似值是有效的呢?
(3) 如何求出函数的所有极值?
(4) 如何求曲线与直线和所包围几何图形的面积?
(5) 如何用计算机求解线性方程组
如何论证用计算机求出的解是可信的?判断标准又是什么呢?
(6) 如何用数值计算方法求常微分方程初值问题
(7) 如何求矩阵
的按模*小特征值和相应的特征向量呢?
上述7组问题是一些典型的数值计算类问题。在这些问题中,问题(1)的解答过程极其复杂,我们将在本节略作简单介绍,其余6组问题的求解方法是本书的重点内容,将在本书后续章节中逐一展开论述。
针对数值天气预报的问题,简而言之,如果假设所考虑的是某地区短时的天气预报问题,且所研究气体介质是有黏性可压缩的、斜压干大气系统,则天气预报在数学上可以归结为:
以某一个时刻大气状态为初始值的,以Navier-Stokes方程组(简称N-S方程组)
(1.1.1)
为控制方程的一个初边值问题。首先要说明的是:根据当前数学的发展水平,根本无法用纯数学的方法直接求得上述初边值问题的精确解,实践中天气预报的问题只能通过数值计算方法来求解。
实际的情况是,日常天气预报中的气象参数值,一般是通过某种气象学模式(由微分方程组的差分格式和参数设置软件打包而成的软件包,如WRF模式或MM5模式等),代入某时刻的大气状态值作为初值,用气象模式在(大型)计算机上进行数值计算得到的。事实上,真正搞明白天气预报的问题,远没有上面所说的那样容易。读者首先要学习”天气学原理”“数值天气预报”这样的学科,然而为了学习”数值天气预报”这种学科,您必须先学习数值计算方法,否则真是不知所云了。
1.1.2 数值计算问题的解题过程与步骤
一般情况下,针对那些能够用计算机解决的科学与工程计算问题(如前面的7组问题),我们可将其求解过程初步概括为如图1.1所示的模式。
图1.1 计算机解决实际问题的一般过程
根据图1.1,用计算机来解决科学研究与工程计算问题,一般包括”建立数学模型”“设计计算方法”“编写程序”“求出结果”4个重要过程(图中以A、B、C、D标号)。具体地讲,用计算机解决实际问题的第*步是”建立数学模型”,即所谓的”数学建模”。当然,对某些具体的数值计算问题,建模过程可以跳过,如前面的问题(2).(7)。第二步,要为模型设计适当的”计算方法”,通常一个好的计算方法能够起到事半功倍的效果。当然,对于一个非常简单的算法,如一个只有9个员工的小公司发放基本工资的问题,只需设计一个Excel表格就可以,不需要编写程序;然而有些复杂的问题,必须为算法编写一个程序,即进入流程图中的第三步”编写程序”。接下来进入第四步,代入适当的数据运行该计算机程序”求出结果”。*后,”分析结果”是否令人满意,即如果结果满意,则可以”运用结果”得出”结论”,算法结束;否则,如果对”结果”不满意,应该重新审视”数值算法”或”模型”是否合理,回到开始阶段重复上述过程,直至*后得到一个令人满意的结果为止。
因此,”如何建立数学模型、设计数值算法”是实际问题能否顺利得到解决的关键过程。一般来说,”建立数学模型”是数学建模的问题,属于应用数学的学科范畴。在模型已经建立之后,如何为数学模型设计”数值算法”,恰恰就是本书所要处理的核心问题。
1.1.3 本课程的内容与数值算法的特点
数值计算方法类课程的主要目的是教会初学者根据数学模型设计出相应的数值计算方法,并将数值计算方法在计算机上实现。除此之外,计算方法中的一些理论与方法也在”建立数学模型”等环节中扮演着重要角色。例如,本书第6章中的曲线拟合方法通常被作为建立数学模型的主要工具之一。因此,数值计算方法在科学与工程设计中起着重要的作用。
可以这样说,凡是有数学模型出现的地方都应有一个算法设计的问题。
尽管实际问题复杂多变,相应的数学模型五花八门,但从理论上依然可对其作比较系统的分类,从而可将数值计算方法问题大致概括为:数值逼近、数值微分与数值积分、微分方程数值解、非线性方程(组)的数值求解、线性方程组的数值求解、特征值及特征向量计算等。通过这些问题中比较简单的常见计算方法的学习,可以帮助我们掌握计算方法的基本理论、方法与技巧,提高程序设计的能力,以便为今后解决各种实际问题奠定良好的基础。
然而,我们不能片面地将数值计算方法课程理解为各种数值计算方法的简单罗列和堆积,不客气地讲,其实数值计算方法课程本身就是一门内容丰富、研究方法深刻、有自身理论体系的学科。它既有纯数学的高度抽象性、严密性与科学性,又有应用学科的广泛性与实际试验的高度技术性,是一门实用性很强的应用数学与计算机科学相融合的交叉学科。
例如,第3章中所介绍的线性方程组的数值求解问题。线性代数这门学科仅仅介绍了与线性代数方程组解的存在性、*一性、解的结构,以及计算精确解有关的基本理论。根据这些基本理论,使用电子计算机求解一个含有数十个未知数的线性代数方程组都非常困难,更不用说求解拥有几十万、几百万、甚至几千万个未知数的大型方程组了。可见,要求解这类问题,还应根据方程特点研究适合计算机使用的、满足精度要求、节约计算时间的有效算法及其相关的理论。在实现这些算法时,往往还要根据计算机容量、字长、速度等指标,研究具体的求解步骤与程序设计技巧。
数值计算方法的特点,从宏观上可概括为如下几点。
1) 要面向计算机
要根据计算机的特点,设计出实际可行的有效算法,即这些算法只能包括加、减、乘、除运算,因为只有这些运算是计算机能直接处理的。
2) 要有可靠的理论分析
数值算法能任意逼近精确解并达到预先提出的精度要求,对近似算法要保证收敛性和数值稳定性,并对数值计算结果进行误差分析。
3) 要有更小的时间(空间)复杂度
算法的时间(空间)复杂度是在解决实际问题的过程中,算法程序在计算机上执行时,衡量程序运行时间(占用内、外存空间)的一种度量方法。假设数值计算问题的规模大小与自然数n有关,一般情况下,可用函数T(n)表示算法的时间复杂度,用函数D(n)表示算法的空间复杂度。
例如,若用Gauss消元法求解一个n阶三对角方程组,根据第3章的分析,该方法计算乘除法的次数约为,且乘除法的计算量是Gauss消元法的主要计算量,因而该算法的时间复杂度为;若用追赶法求解该三对角方程组,同理可得,算法的时间复杂度,于是有
因此,与Gauss消元法相比,用追赶法求解该三对角方程组,计算的速度更快,更节省时间。
用Gauss消元法求解三对角方程组,由于需要存储一个n×n的方阵,因此该算法的空间复杂度为;然而,使用追赶法求解该三对角方程组,只需要存储4个n维向量,因而,因此,与Gauss消元法相比,追赶法的存储空间占用更小、更优。
因此,评价一个数值计算方法的好坏,应该综合考虑它的时间复杂度与空间复杂度。一般情况下,在使算法有更快的计算速度的前提下,应该尽量让算法占用更小的存储空间,因为这关系到该算法程序能否在给定的计算机上成功运转。
4) 要通过数值实验的检验
任何一个算法除了从理论上要满足上述三点外,还要通过数值实验检验它的有效性。
根据数值计算方法的这些特点,对正在学习该课程的初学者们,我们给出如下建议:首先,注意掌握数值算法的基本原理和思想,注意算法的处理技巧及其与计算机的结合,重视误差分析与收敛性及稳定性等基本理论;其次,理论联系实际,通过例题的学习,学会使用数值方法解决实际计算问题;再次,由于本书内容包括微积分、代数、常微分方程、线性规划等学科的数值方法,您*好先掌握这几门课程的基本内容,之后再开始学习这一课程;此外,您还需要能掌握一门以上的计算机程序设计语言,如MATLAB,Fortran,C/C++或Java等;*后,为了牢固掌握本书的内容,您还需要在教师的指导下做一定数量的理论分析与计算练习。
1.2 误差、有效数字与机器数系
1.2.1 误差的概念与来源
误差是衡量某个数量的精确值与近似值之间接近程度的度量。任给两个量和,其中,是某数学量或物理量的精确值,如某时某地大气温度的”真实状态”或”真值”;是的近似值,一般情况下,近似值是该数学量或物理量的测量值,如大气温度的测量值。
一般地,称为近似值相对于精确值的误差,记为。即误差就是近似值减去精确值。而。称为近似值x相对于精确值x的绝对误差,记为
(1.2.1)
显然,即利用式(1.2.1)计算绝对误差时,近似值x与精确值x的角色可以互换,或者说它们的地位是相等的。
事实上,我们也可以称为近似值x相对于精确值x的绝对误差,记为。这是因为误差的概念不是绝对的,实际上,本书的部分章节也采用了这样的做法,丢掉绝对值符号后,书写起来更为方便简洁。
若存在常数,使绝对误差满足不等式时,则称±为绝对误差限。绝对误差e(x)和绝对误差限±是有单位量,其单位与x的相同。
当时,称比值为近似值x相对于精确值x的相对误差,记为
(1.2.2)
事实上,通常由于x无法获得,因此常用公式代替去求近似相对误差,有些场合也称
(1.2.3)
为近似值x相对于精确值x的相对误差。实际上,当x非常接近x时,有
即与只相差一个与同阶的小量,因此可用代替去计算相对误差的大小。若存在非负实常数,使之满足不等式
定价:69.0
ISBN:9787030536440
作者:雷金贵,李建良,蒋勇
版次:1
出版时间:2017-09
内容提要:
《数值分析与计算方法》是为理工科高等院校普遍开设的“数值分析”与“计算方法”课程而编写的参考教材,第二版共10章,全部教学内容大约需要120个学时,主要包括:数值计算的基本理论,插值问题,线性方程组的直接与迭代解法,方程求根,数据拟合与函数逼近,数值积分与数值微分,常微分方程初(边)值问题,矩阵特征值与特征向量的幂法计算,线性规划及其在矛盾方程组求近似解中的应用等内容,为了方便教师根据不同的学科背景与教学计划灵活安排教学,全书采用模块化方式组织教学内容,各个章节相对独立,部分章节标题后面带“*”表示该章节为选修内容。为了方便初学者及时掌握学习重点,每章后面附有适量习题;此外,为了提高初学者分析问题、解决问题的能力,提高其程序设计能力与综合素质,本书在附录中安排了10篇“上机实习课题”,以方便其上机计算练习。
全书秉承大学生综合能力锻炼与素质培养的核心理念,注重理论与实际相结合,在保持科学严谨的基础上,内容阐述深入浅出,脉络清晰,层次分明,方便读者快速查阅与参考。
目录:
目录
第二版前言
第*版前言
第1章 绪论 1
1.1 计算机数值方法概述 1
1.1.1 数值计算方法的概念与任务 1
1.1.2 数值计算问题的解题过程与步骤 3
1.1.3 本课程的内容与数值算法的特点 4
1.2 误差、有效数字与机器数系 6
1.2.1 误差的概念与来源 6
1.2.2 有效数字与机器数系 7
1.2.3 舍入误差的产生 11
1.3 误差传播与防范 12
1.3.1 误差的传播 13
1.3.2 防止“大数吃小数” 14
1.3.3 避免绝对值相近的数作减法 15
1.3.4 避免0或接近0的数作除数 16
1.3.5 避免绝对值很大的数作乘数 16
1.3.6 简化计算公式,减少计算量 17
1.3.7 设计稳定的算法 17
1.3.8 精度丢失定理 19
习题1 20
第2章 插值法 22
2.1 插值问题 22
2.1.1 基本概念 22
2.1.2 插值多项式的存在*一性 22
2.2 拉格朗日(Lagrange)插值 23
2.2.1 Lagrange插值多项式 23
2.2.2 插值余项 25
2.3 差商与牛顿(Newton)插值 28
2.3.1 差商的定义和性质 28
2.3.2 Newton插值公式 30
2.4 差分与等距节点插值 33
2.4.1 差分及其性质 33
2.4.2 等距节点插值公式 34
2.5 埃尔米特(Hermite)插值 36
2.6 三次样条插值 40
2.6.1 多项式插值的缺陷与分段插值 40
2.6.2 三次样条插值函数 41
2.6.3 三次样条插值函数的构造方法 42
2.6.4 两点说明 48
习题2 49
第3章 线性方程组的直接解法 52
3.1 引言 52
3.2 Gauss消元法 53
3.2.1 三角形方程组的解法 53
3.2.2 预备知识 54
3.2.3 Gauss消元法 55
3.2.4 Gauss消元法的计算量 58
3.2.5 Gauss消元法的条件 59
3.2.6 列主元消元法 61
3.2.7 全主元消元法 63
3.3 Gauss-Jordan消元法与矩阵求逆 64
3.3.1 Gauss-Jordan消元法 64
3.3.2 用Gauss-Jordan消元法求逆矩阵 67
3.4 矩阵分解 69
3.4.1 Gauss消元法的矩阵解释 69
3.4.2 Doolittle分解 71
3.4.3 方程组的求解举例 75
3.4.4 正定阵的Doolittle分解 77
3.4.5 Cholesky分解与平方根法 79
3.4.6 LDLT分解与改进的平方根法 82
3.4.7 带列主元的三角分解 83
3.5 追赶法 89
3.6 向量范数 93
3.6.1 向量范数定义 93
3.6.2 向量范数等价性与一致连续性 95
3.7 矩阵范数 98
3.7.1 方阵的范数 98
3.7.2 m×n阶矩阵的范数 105
3.8 条件数与方程组的误差分析 106
3.8.1 病态方程组与条件数 106
3.8.2 方程组的摄动分析 109
3.8.3 Gauss消元法的浮点误差分析 112
3.8.4 方程组的病态检测与改善 114
习题3 117
第4章 方程求根 120
4.1 方程根的存在、*一性与有根区间 120
4.1.1 方程根的存在与*一性 121
4.1.2 有根区间的确定方法 121
4.2 二分法 123
4.3 Picard迭代法与收敛性 126
4.3.1 Picard迭代格式的收敛性 128
4.3.2 Picard迭代法敛散性的几何解释 130
4.3.3 Picard迭代法的局部收敛性和误差估计 132
4.3.4 Picard迭代的收敛速度与渐近误差估计 135
4.4 Newton-Raphson迭代法 137
4.4.1 Newton-Raphson迭代法的构造 137
4.4.2 Newton法的大范围收敛性 138
4.4.3 Newton法的局部收敛性 141
4.4.4 Newton法的改进 142
4.4.5 求非线性方程组的Newton法 143
4.5 割线法 144
4.6 代数方程求根 146
4.6.1 秦九韶算法 147
4.6.2 秦九韶算法在导数求值中的应用 148
4.6.3 代数方程的Newton法 149
4.6.4 劈因子法 150
4.7 加速方法 154
4.7.1 Aitken加速法 154
4.7.2 Steffensen迭代法 155
4.7.3 其他加速技巧 156
习题4 157
第5章 线性方程组的迭代解法 159
5.1 迭代法的构造 159
5.1.1 Jacobi迭代法的构造 160
5.1.2 Gauss-Seidel迭代法的构造 162
5.2 迭代法的收敛性 165
5.2.1 一阶定常迭代法的收敛性 166
5.2.2 Jacobi迭代法与Gauss-Seidel迭代法收敛性的判定 171
5.2.3 迭代法的收敛速度 176
5.3 逐次超松弛迭代法(SOR方法) 176
5.3.1 SOR迭代的构造 177
5.3.2 SOR方法的收敛性 178
5.3.3 相容次序与*佳松弛因子的选择 181
习题5 183
第6章 近似理论 185
6.1 矩阵的广义逆 185
6.1.1 Moore-Penrose广义逆 185
6.1.2 广义逆的性质 188
6.2 方程组的*小二乘解 190
6.2.1 方程组的*小二乘解 190
6.2.2 方程组的极小*小二乘解 193
6.3 矩阵的正交分解与方程组的*小二乘解 195
6.3.1 Gram-Schmidt正交化方法 195
6.3.2 矩阵正交分解在求极小*小二乘解中的应用 199
6.3.3 Householder变换 201
6.3.4 Householder变换在矩阵正交分解中的应用 203
6.4 矩阵的奇异值分解 208
6.5 数据拟合 214
6.6 正交多项式 218
6.6.1 正交多项式的概念与性质 218
6.6.2 Chebyshev多项式 220
6.6.3 Chebyshev正交多项式的应用 223
6.6.4 其他正交多项式 230
6.7 线性*小二乘问题 230
6.8 正交多项式在数据拟合中的应用 235
6.9 函数逼近 238
6.9.1 *佳平方逼近 240
6.9.2 *佳一致逼近 245
习题6 248
第7章 数值积分与数值微分 251
7.1 插值型数值积分公式 251
7.1.1 中矩形公式和梯形公式 251
7.1.2 插值型求积公式 253
7.1.3 求积公式的代数精确度 254
7.2 Newton-Cotes(牛顿-科茨)型求积公式 256
7.2.1 Newton-Cotes型求积公式的导出 256
7.2.2 几种低阶求积公式的余项 260
7.3 复化求积法 261
7.4 龙贝格(Romberg)算法 264
7.4.1 区间逐次二分法 264
7.4.2 复化求积公式的阶 266
7.4.3 Romberg算法 266
7.5 Gauss(高斯)型求积公式 270
7.5.1 基本概念 270
7.5.2 Gauss点 271
7.5.3 Gauss-Legendre(高斯-勒让德)公式 272
7.5.4 稳定性和收敛性 274
7.5.5 带权 Gauss公式 275
7.6 数值微分 277
7.6.1 插值型求导公式 277
7.6.2 三次样条插值求导 280
习题7 281
第8章 常微分方程数值解法 283
8.1 常微分方程初值问题 283
8.1.1 常微分方程(组)初值问题的提法与解的存在性 283
8.1.2 常微分方程的离散化 285
8.1.3 基本概念 286
8.1.4 Euler 显式格式的几何解释 287
8.1.5 误差与差分格式的阶 288
8.2 Runge-Kutta(龙格-库塔)法 291
8.2.1 Runge-Kutta法的基本思想 291
8.2.2 四级四阶Runge-Kutta法 293
8.2.3 步长的选取 294
8.3 单步法的收敛性和稳定性 296
8.3.1 收敛性的概念 296
8.3.2 Euler显式格式的收敛性 297
8.3.3 一般单步法的收敛性 299
8.3.4 单步法的稳定性 302
8.4 线性多步法 304
8.4.1 Adams外推法 305
8.4.2 Adams内插法 307
8.4.3 Adams预报-校正格式 308
8.5 常微分方程组与边值问题的数值解法 309
8.5.1 一阶方程组 309
8.5.2 高阶方程的初值问题 310
8.5.3 边值问题的差分解法 310
习题8 312
第9章 矩阵特征值与特征向量的幂法计算 314
9.1 幂法 314
9.1.1 幂法 314
9.1.2 规范化幂法 319
9.2 幂法的加速与反幂法 321
9.2.1 原点平移法 321?
9.2.2 Rayleigh商加速法 323
9.2.3 反幂法 324
9.3 实对称矩阵的Jacobi(雅可比)方法 326
9.3.1 预备知识 326
9.3.2 Givens平面旋转变换与二阶方阵的对角化 327
9.3.3 实对称矩阵的Jacobi方法 328
9.3.4 Jacobi方法的收敛性 330
9.3.5 Jacobi过关法 331
9.4 QR方法 332
9.4.1 基本的QR方法 332
9.4.2 带原点平移的QR方法 337
习题9 338
第10章 线性规划 340
10.1 线性规划问题与其对偶问题 340
10.1.1 线性规划模型 340
10.1.2 对偶 345
10.2 线性规划的基本定理 347
10.2.1 LP问题可行域 347
10.2.2 LP问题的解 349
10.2.3 线性规划的基本定理 350
10.2.4 图解法 354
10.3 单纯形法 356
10.3.1 单纯形法 356
10.3.2 初始可行解的确定 364
10.4 矛盾方程组的近似解 365
10.4.1 e1-问题 365
10.4.2 e∞-问题 368
习题10 370
参考文献 374
附录 上机实习课题 375
1.1 误差分析与控制 375
1.2 插值问题 375
1.3 矩阵条件数的估计 376
1.4 方程求根 377
1.5 线性方程组求解 377
1.6 曲线拟合问题 378
1.7 数值积分 379
1.8 常微分方程初(边)值问题 379
1.9 矩阵的特征值与特征向量 381
1.10 线性规划 381
在线试读:
第1章 绪论
本章的重点是介绍数值计算方法课程的基础知识,包括误差的概念与估计、有效数字与机器数系的基本理论,数值计算过程中误差形成、传播的机制与预防措施等。
1.1 计算机数值方法概述
1.1.1 数值计算方法的概念与任务
电子计算机的工作依赖于其物理硬件设备(包括中央处理器、内外存储器等),以及以算法为核心的应用软件(俗称程序)。通常情况下,根据解决问题的不同类型,可将算法分为数值算法与非数值算法。从计算机的出现至今,数值算法一直受到科学研究与工程技术领域的共同关注,人们习惯上将研究数值算法的学科称为数值计算方法,简称计算方法。即数值计算方法是一门数学学科,该学科的重点是研究如何在电子计算机上实现数值计算或数值求解的相关理论与方法,相应的计算实习则是将有关理论与方法在计算机上实现的系统训练。
从20世纪40年代电子计算机诞生至今,随着计算机硬件技术的快速发展,计算机在物理内存、CPU运算速度等方面已逐渐达到其物理极限。因此,在研究、设计、应用计算方法时,不但要求能够设计出可解决实际问题的算法,而且必须考虑降低算法复杂性的问题,即如何提高算法的计算速度、如何减少程序中变量对物理内存的占用,以及如何降低算法的结构复杂性或者增加算法的稳定性等问题。
作为科学研究与工程技术领域中的重要理论与实现工具,数值计算方法当然可以不依赖于计算机而独立进行。但是,将数值计算方法与计算机应用结合起来,形成能够在计算机上编程实现的数值计算方法,不但可以使科学问题能够得到更快、更好的解决,而且可以大大提高人类应用计算机的水平。因此,在老师的安排与指导之下,让初学者进行适当的计算实习与演练,自然成为本门课程教学过程中一个非常重要的环节。
实践证明,通过数值计算方法相关课程的学习和训练,初学者能够在掌握数值计算方法的理论与方法的同时,也能在一定程度上提高其发现问题、分析问题、解决问题的能力,进而达到提高其综合素质的目的。这对21世纪的科技人员来说显然更为重要。
在初步了解了什么是数值计算方法课程之后,接下来有人可能会问:与传统的数学学科相比,数值计算方法能够解决什么类型的问题?如何解决呢?从宏观的角度上看,数值计算方法又有哪些典型特征呢?
针对以上这几个问题,我们简单介绍几个实际的数值计算类问题。
(1) 2008年8月8日,第29届夏季奥林匹克运动会在北京举行,全国上下一片欢腾。然而,那些为北京奥运会作天气预报的科学家们并不轻松,由于担心一场突如其来的大雨会搅乱组委会的精心安排,他们时刻关注着北京的天气变化。于是我们要问的第*个问题是:“数值天气预报”是如何做出的?又如何判定数值预报是可信的呢?
(2) 给定如下数据表
表示的离散函数f(x),如何求函数值f(2.8)的近似值呢?又如何判定所求近似值是有效的呢?
(3) 如何求出函数的所有极值?
(4) 如何求曲线与直线和所包围几何图形的面积?
(5) 如何用计算机求解线性方程组
如何论证用计算机求出的解是可信的?判断标准又是什么呢?
(6) 如何用数值计算方法求常微分方程初值问题
(7) 如何求矩阵
的按模*小特征值和相应的特征向量呢?
上述7组问题是一些典型的数值计算类问题。在这些问题中,问题(1)的解答过程极其复杂,我们将在本节略作简单介绍,其余6组问题的求解方法是本书的重点内容,将在本书后续章节中逐一展开论述。
针对数值天气预报的问题,简而言之,如果假设所考虑的是某地区短时的天气预报问题,且所研究气体介质是有黏性可压缩的、斜压干大气系统,则天气预报在数学上可以归结为:
以某一个时刻大气状态为初始值的,以Navier-Stokes方程组(简称N-S方程组)
(1.1.1)
为控制方程的一个初边值问题。首先要说明的是:根据当前数学的发展水平,根本无法用纯数学的方法直接求得上述初边值问题的精确解,实践中天气预报的问题只能通过数值计算方法来求解。
实际的情况是,日常天气预报中的气象参数值,一般是通过某种气象学模式(由微分方程组的差分格式和参数设置软件打包而成的软件包,如WRF模式或MM5模式等),代入某时刻的大气状态值作为初值,用气象模式在(大型)计算机上进行数值计算得到的。事实上,真正搞明白天气预报的问题,远没有上面所说的那样容易。读者首先要学习”天气学原理”“数值天气预报”这样的学科,然而为了学习”数值天气预报”这种学科,您必须先学习数值计算方法,否则真是不知所云了。
1.1.2 数值计算问题的解题过程与步骤
一般情况下,针对那些能够用计算机解决的科学与工程计算问题(如前面的7组问题),我们可将其求解过程初步概括为如图1.1所示的模式。
图1.1 计算机解决实际问题的一般过程
根据图1.1,用计算机来解决科学研究与工程计算问题,一般包括”建立数学模型”“设计计算方法”“编写程序”“求出结果”4个重要过程(图中以A、B、C、D标号)。具体地讲,用计算机解决实际问题的第*步是”建立数学模型”,即所谓的”数学建模”。当然,对某些具体的数值计算问题,建模过程可以跳过,如前面的问题(2).(7)。第二步,要为模型设计适当的”计算方法”,通常一个好的计算方法能够起到事半功倍的效果。当然,对于一个非常简单的算法,如一个只有9个员工的小公司发放基本工资的问题,只需设计一个Excel表格就可以,不需要编写程序;然而有些复杂的问题,必须为算法编写一个程序,即进入流程图中的第三步”编写程序”。接下来进入第四步,代入适当的数据运行该计算机程序”求出结果”。*后,”分析结果”是否令人满意,即如果结果满意,则可以”运用结果”得出”结论”,算法结束;否则,如果对”结果”不满意,应该重新审视”数值算法”或”模型”是否合理,回到开始阶段重复上述过程,直至*后得到一个令人满意的结果为止。
因此,”如何建立数学模型、设计数值算法”是实际问题能否顺利得到解决的关键过程。一般来说,”建立数学模型”是数学建模的问题,属于应用数学的学科范畴。在模型已经建立之后,如何为数学模型设计”数值算法”,恰恰就是本书所要处理的核心问题。
1.1.3 本课程的内容与数值算法的特点
数值计算方法类课程的主要目的是教会初学者根据数学模型设计出相应的数值计算方法,并将数值计算方法在计算机上实现。除此之外,计算方法中的一些理论与方法也在”建立数学模型”等环节中扮演着重要角色。例如,本书第6章中的曲线拟合方法通常被作为建立数学模型的主要工具之一。因此,数值计算方法在科学与工程设计中起着重要的作用。
可以这样说,凡是有数学模型出现的地方都应有一个算法设计的问题。
尽管实际问题复杂多变,相应的数学模型五花八门,但从理论上依然可对其作比较系统的分类,从而可将数值计算方法问题大致概括为:数值逼近、数值微分与数值积分、微分方程数值解、非线性方程(组)的数值求解、线性方程组的数值求解、特征值及特征向量计算等。通过这些问题中比较简单的常见计算方法的学习,可以帮助我们掌握计算方法的基本理论、方法与技巧,提高程序设计的能力,以便为今后解决各种实际问题奠定良好的基础。
然而,我们不能片面地将数值计算方法课程理解为各种数值计算方法的简单罗列和堆积,不客气地讲,其实数值计算方法课程本身就是一门内容丰富、研究方法深刻、有自身理论体系的学科。它既有纯数学的高度抽象性、严密性与科学性,又有应用学科的广泛性与实际试验的高度技术性,是一门实用性很强的应用数学与计算机科学相融合的交叉学科。
例如,第3章中所介绍的线性方程组的数值求解问题。线性代数这门学科仅仅介绍了与线性代数方程组解的存在性、*一性、解的结构,以及计算精确解有关的基本理论。根据这些基本理论,使用电子计算机求解一个含有数十个未知数的线性代数方程组都非常困难,更不用说求解拥有几十万、几百万、甚至几千万个未知数的大型方程组了。可见,要求解这类问题,还应根据方程特点研究适合计算机使用的、满足精度要求、节约计算时间的有效算法及其相关的理论。在实现这些算法时,往往还要根据计算机容量、字长、速度等指标,研究具体的求解步骤与程序设计技巧。
数值计算方法的特点,从宏观上可概括为如下几点。
1) 要面向计算机
要根据计算机的特点,设计出实际可行的有效算法,即这些算法只能包括加、减、乘、除运算,因为只有这些运算是计算机能直接处理的。
2) 要有可靠的理论分析
数值算法能任意逼近精确解并达到预先提出的精度要求,对近似算法要保证收敛性和数值稳定性,并对数值计算结果进行误差分析。
3) 要有更小的时间(空间)复杂度
算法的时间(空间)复杂度是在解决实际问题的过程中,算法程序在计算机上执行时,衡量程序运行时间(占用内、外存空间)的一种度量方法。假设数值计算问题的规模大小与自然数n有关,一般情况下,可用函数T(n)表示算法的时间复杂度,用函数D(n)表示算法的空间复杂度。
例如,若用Gauss消元法求解一个n阶三对角方程组,根据第3章的分析,该方法计算乘除法的次数约为,且乘除法的计算量是Gauss消元法的主要计算量,因而该算法的时间复杂度为;若用追赶法求解该三对角方程组,同理可得,算法的时间复杂度,于是有
因此,与Gauss消元法相比,用追赶法求解该三对角方程组,计算的速度更快,更节省时间。
用Gauss消元法求解三对角方程组,由于需要存储一个n×n的方阵,因此该算法的空间复杂度为;然而,使用追赶法求解该三对角方程组,只需要存储4个n维向量,因而,因此,与Gauss消元法相比,追赶法的存储空间占用更小、更优。
因此,评价一个数值计算方法的好坏,应该综合考虑它的时间复杂度与空间复杂度。一般情况下,在使算法有更快的计算速度的前提下,应该尽量让算法占用更小的存储空间,因为这关系到该算法程序能否在给定的计算机上成功运转。
4) 要通过数值实验的检验
任何一个算法除了从理论上要满足上述三点外,还要通过数值实验检验它的有效性。
根据数值计算方法的这些特点,对正在学习该课程的初学者们,我们给出如下建议:首先,注意掌握数值算法的基本原理和思想,注意算法的处理技巧及其与计算机的结合,重视误差分析与收敛性及稳定性等基本理论;其次,理论联系实际,通过例题的学习,学会使用数值方法解决实际计算问题;再次,由于本书内容包括微积分、代数、常微分方程、线性规划等学科的数值方法,您*好先掌握这几门课程的基本内容,之后再开始学习这一课程;此外,您还需要能掌握一门以上的计算机程序设计语言,如MATLAB,Fortran,C/C++或Java等;*后,为了牢固掌握本书的内容,您还需要在教师的指导下做一定数量的理论分析与计算练习。
1.2 误差、有效数字与机器数系
1.2.1 误差的概念与来源
误差是衡量某个数量的精确值与近似值之间接近程度的度量。任给两个量和,其中,是某数学量或物理量的精确值,如某时某地大气温度的”真实状态”或”真值”;是的近似值,一般情况下,近似值是该数学量或物理量的测量值,如大气温度的测量值。
一般地,称为近似值相对于精确值的误差,记为。即误差就是近似值减去精确值。而。称为近似值x相对于精确值x的绝对误差,记为
(1.2.1)
显然,即利用式(1.2.1)计算绝对误差时,近似值x与精确值x的角色可以互换,或者说它们的地位是相等的。
事实上,我们也可以称为近似值x相对于精确值x的绝对误差,记为。这是因为误差的概念不是绝对的,实际上,本书的部分章节也采用了这样的做法,丢掉绝对值符号后,书写起来更为方便简洁。
若存在常数,使绝对误差满足不等式时,则称±为绝对误差限。绝对误差e(x)和绝对误差限±是有单位量,其单位与x的相同。
当时,称比值为近似值x相对于精确值x的相对误差,记为
(1.2.2)
事实上,通常由于x无法获得,因此常用公式代替去求近似相对误差,有些场合也称
(1.2.3)
为近似值x相对于精确值x的相对误差。实际上,当x非常接近x时,有
即与只相差一个与同阶的小量,因此可用代替去计算相对误差的大小。若存在非负实常数,使之满足不等式