Professional Documents
Culture Documents
数值分析与计算方法
数值分析与计算方法
主 编 蒋 勇 李建良
参 编 卢长娜 陈文兵 雷金贵
白 羽 陈允杰
北 京
内 容 简 介
《数值分析与计算方法》是为理工科大学的“数值分析”和“计算方
法”课程而编写的教材. 本书突出“培养综合素质与能力”的核心理念, 注
重理论与实际结合, 主要内容包括绪论、插值问题、曲线拟合与逼近、数
值积分与数值微分、常微分方程数值解法、非线性方程求解、线性方程组
的直接解法与迭代法、矩阵的特征值与特征向量计算等. 为帮助学生掌握
内容, 每章附有适量习题; 为培养学生的综合素质、提高学生的实际技能,
本书专门安排了“上机实习课题”, 并配备了相应的计算实习题. 全书采用
模块化结构, 章节相对独立, 脉络分明, 阐述严谨, 深入浅出, 便于教师根
据学生的不同背景与教学计划灵活安排教学.
本书同时可作为理工科大学相关专业的研究生课程教材, 并可供从事
科学与工程计算的科技工作者参考.
图书在版编目(CIP)数据
出版
北京东黄城根北街 16 号
邮政编码: 100717
http://www.sciencep.com
印刷
科学出版社发行 各地新华书店经销
*
2012 年 1 月第 一 版 开本: B5(720×1000)
2012 年 1 月第一次印刷 印张: 14
字数: 268 000
定价: 35.00 元
(如有印装质量问题, 我社负责调换)
前 言
“数值分析” 与 “计算方法” 是理工科大学各专业普遍开设的两门密切相关的
核心课程. 其中, “数值分析” 作为核心的专业基础课, 主要开设对象为数学、统计、
计算机科学等专业的学生; 而 “计算方法” 作为重要的专业基础课或选修课, 主要
开设对象为其他理工科专业的学生. 从内容上看, 这是两门不同的课程, 各有不同
的要求和侧重点. 但是, 它们又具有较大的交叉与重叠. 前者通常侧重数值方法的
理论基础、算法设计与分析等, 后者通常侧重对算法的了解、实际应用等.
科学技术的不断发展与社会事业的不断进步, 对现代大学生与研究生的综合素
质、创新与应用能力提出了新的要求:一方面, 要求数理专业的学生具有更好的开
拓性与实际应用能力; 另一方面, 对接受技术与应用能力训练为主的工科类学生以
及非数理专业的其他理科学生, 也要求其在综合素质 (包括数理素质) 方面受到更
好的训练.
作为 “十二五” 规划 “人才培养模式创新与课程体系改革”、“人才培养模式创
新实验基地”、“学术与技能分类、专业培养分流 —— 人才培养的创新与实践”、“基
于 ‘学术型、技能型、国际化’ 的多元化人才培养模式的研究与实践”、“数值分析精
品课程建设” 等多项教学研究、教学改革与质量工程建设的成果之一, 我们在本书
中尝试性地将 “数值分析” 与 “计算方法” 两门课程的内容进行了有机的结合与互
补性的融合, 供这两门课程教学使用. 希望本书能够在教学中配合教师, 对学生综
合素质的培养与实际技能的训练有所帮助. 应当说明, 鉴于不同学科与专业的实际
情况与要求, 在教学过程中需要根据学生的背景因材施教, 对教学内容做适当的取
舍与补充. 为了便于教学, 我们力求在保证系统性与层次性的基础上, 采用模块化
结构, 章节相对独立; 在保持阐述严谨的基础上, 层次分明, 循序渐进, 希望有助于
教师根据学生的不同背景与各专业不同的教学计划灵活安排教学. 为了帮助学生提
高自学能力, 我们在编写过程中特别注意叙述的深入浅出, 希望有助于学生在教师
指导下, 通过自学也能掌握相关课程的主要内容. 从这个意义上讲, 本书也特别适
合于 “教师讲授与学生自学” 相结合的教学改革.
本书突出 “培养综合素质与能力” 的核心理念, 注重理论与实际结合, 主要内
容包括绪论、插值问题、曲线拟合与逼近、数值积分与数值微分、常微分方程数值
解法、非线性方程求解、线性方程组的直接解法与迭代法、矩阵的特征值与特征向
量计算等. 为帮助学生掌握内容, 每章附有适量习题; 为培养学生的综合素质、提高
学生的实际技能, 本书专门安排了 “上机实习课题”, 并配备了相应的计算实习题.
· ii · 前 言
本书同时可作为理工科大学相关专业的研究生课程教材, 并可供从事科学与工
程计算的科技工作者参考.
本书是在李建良教授、蒋勇教授等所编著的《计算机数值方法》(该书曾获南
京理工大学优秀教材一等奖等) 的基础上, 根据上述原则由蒋勇、李建良、卢长娜、
陈文兵、雷金贵、白羽、陈允杰等江苏省内外多所高校的教授、博士共同改编而成.
在改编过程中, 南京信息工程大学数学专业的部分研究生参与了部分编辑工作. 我
们在此对所有参与工作的同志表示衷心的感谢. 此外, 特别感谢南京信息工程大学
优秀教材出版基金对本书的立项与经济资助, 感谢计算数学、数值模拟与仿真等方
面的众多专家对我们相关工作的支持与帮助!
欢迎各位读者提出宝贵意见, 以便我们在再版过程中改正.
南京信息工程大学数学与统计学院 蒋 勇
南京理工大学理学院 李建良
目 录
前言
绪论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
0.1 计算机数值方法的任务 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
0.2 关于方程求根及其二分法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
0.3 误差分析的重要性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
第 1 章 插值法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1 插值问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.1 基本概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.2 插值多项式的存在唯一性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2 拉格朗日 (Lagrange) 插值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2.1 Lagrange 插值多项式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2.2 插值余项表达式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3 差商与牛顿 (Newton) 插值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.3.1 差商的定义和性质 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.3.2 Newton 插值公式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.4 差分与等距节点插值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.4.1 差分及其性质 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.4.2 等距节点插值公式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.5 埃尔米特 (Hermite) 插值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.6 三次样条插值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.6.1 多项式插值的缺陷与分段插值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.6.2 三次样条插值函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.6.3 三次样条插值函数的构造方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
1.6.4 两点说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
习题 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
第 2 章 曲线拟合与平方逼近 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.1 观测数据的最小二乘拟合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.1.1 最小二乘问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.1.2 正规方程组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.2 正交多项式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
· iv · 目 录
4.2.2 四阶 Runge-Kutta 方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
4.2.3 步长的选取 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
4.3 单步法的收敛性和稳定性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
4.3.1 单步法的收敛性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
4.3.2 单步法的稳定性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
4.4 线性多步法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
4.4.1 Adams 显示公式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
4.4.2 Adams 隐式公式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
4.4.3 Adams 预报–校正公式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
4.5 一阶方程组与高阶方程组的数值解法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
4.5.1 一阶方程组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
4.5.2 化高阶方程为一阶方程组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
4.6 边值问题的差分解法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
习题 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
第 5 章 非线性方程求根 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
5.1 迭代法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
5.1.1 简单迭代法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
5.1.2 收敛性问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
5.1.3 迭代格式的收敛速度与加速 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
5.2 牛顿 (Newton) 迭代法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
5.2.1 Newton 迭代法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
5.2.2 局部收敛性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
5.2.3 Newton 下山法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
5.2.4 解非线性方程组的 Newton 迭代法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
5.3 弦截法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
5.3.1 单点弦截法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
5.3.2 双点弦截法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
5.4 代数方程求根 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
5.4.1 秦九韶算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
5.4.2 代数方程的 Newton 法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
5.4.3 劈因子法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
习题 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
第 6 章 线性方程组的直接解法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
6.1 引言 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
6.2 高斯 (Gauss) 消去法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
· vi · 目 录
0.1 计算机数值方法的任务
为了说明计算机数值方法的任务及研究对象, 我们自然要看清它在解决实际
问题中扮演的角色. 一般地, 用数学方法或计算机解决实际问题的过程可概括为如
图 0-1 所示的模式.
由图 0-1 可见, 用计算机解决科学与工程领域计算问题的一般过程包括 (a) 建
立数学模型、(b) 设计计算方法、(c) 设计程序、(d) 上机运算等, 以分别得到 (A) 数
学模型、(B) 计算方法、(C) 程序、(D) 结果等为目标. 不难看出, 从 (A) 数学模型
出发, 通过 “设计计算方法” 得到适当的 (B) 计算方法, 再经过 “设计程序” 得到可
行的 (C) 程序, 这都是实际问题能否得到解决的关键过程, 也恰好就是本书所要处
理的问题. 总之, 计算机数值方法的主要目的是:根据数学模型设计出相应的计算
方法, 并将计算机数值方法在计算机上实现. 除此之外, 计算方法中的有关理论与
方法也在 “建立数学模型” 等环节中扮演着重要角色. 例如, 本书第 2 章中的曲线
·2· 绪 论
图 0-1 计算机解决实际问题的一般过程
题. 在线性代数中只介绍解的存在唯一性及有关理论和精确解法, 用这些理论和方
法还不能在计算机上求解上百个未知数的方程组, 甚至, 我们在第 6 章的引言中将
看到, 即便是二三十个未知数的线性代数方程组, 都难以求解, 更不用说求解十几
万个未知数的方程组了. 可见, 要求解这类问题, 还应根据方程的特点研究适合计
算机使用的、满足精度要求的、节约计算时间的有效算法及其相关理论. 在实现这
些算法时往往还要根据计算机容量、字长、速度等指标, 研究具体求解步骤的程序
设计技巧. 另外, 对于被证明是行之有效的其他方法也应采用.
计算机数值方法的特点概括如下:
1) 面向计算机
要根据计算机的特点提供实际可行的有效算法, 即算法只能包括加、减、乘、
除运算, 使计算机能直接处理.
2) 有可靠的理论分析
能任意逼近并达到精度要求, 对近似算法要保证收敛性和数值稳定性, 还要对
误差进行分析, 这些都建立在相应的数学理论基础上.
3) 有好的计算复杂性
时间复杂性好是指节省时间, 空间复杂性好是指节省存储量, 这也是建立算法
要研究的问题, 它们关系到算法能否在计算机上实现.
4) 有数值实验
任何一个算法除了从理论上要满足上述三点外, 还要通过数值实验证明是行之
有效的.
根据计算机数值方法的这些特点, 学习时我们首先要注意掌握方法的基本原理
和思想, 要注意方法处理的技巧及其与计算机的结合, 要重视误差分析、收敛性和
稳定性等基本理论; 其次, 要通过例子, 学习使用各种计算方法来解决实际计算问
题; 最后, 为了掌握本课程的内容, 还应做一定数量的理论分析与计算练习. 由于本
课程内容包括了微积分、代数、常微分方程的数值方法, 读者必须掌握这几门课程
的基本内容后才能学习本课程.
下面我们举两个例子, 对上述内容加以说明.
0.2 关于方程求根及其二分法
我们考虑如下问题:
问题 A. 求 f (x) = x4 − 2x2 − 4x + 19 590 426 的极值.
问题 B. 求 y = f (x) = (x3 − x − 1)−1 与 y = 0, x = 0, x = 1.3 所包围的面积.
问题 C. 求方程 y 000 − y 0 − y = 0 的通解.
·4· 绪 论
由高等数学的知识不难发现它们都归结为方程 x3 − x − 1 = 0 的求解问题. 对
大多数人来说, 找出其解并不是一件容易的事. 而这只是实际问题中出现的一个非
常简单的代数方程的求解问题, 我们面对的其他实际问题也不仅仅是代数方程的求
解问题. 即使是代数方程的求解问题, 当方程的次数较高时人们也难以用公式、分
析等方法直接求解. 事实上, 19 世纪挪威数学家阿贝尔 (Abel) 已经证明:对次数
高于 4 次的代数方程, 不可能由方程的系数直接表示出解的形式. 这就迫使人们去
寻求解决各种实际问题的切实可行的数值计算方法. 这里, 我们不妨来看一下代数
方程的比较经典的求解方法 —— 二分法.
设函数 f (x) 在闭区间 [a, b] 上连续, 且 f (a)f (b) < 0, 根据连续函数的性质,
f (x) 在开区间 (a, b) 内一定有实的零点, 即方程 f (x) = 0 在开区间 (a, b) 内一定有
实根. 我们这里假定它在开区间 (a, b) 内有唯一的单实根 x∗ , 此即连续函数介值定
理. 我们记为定理 0.1.
定理 0.1 设实函数 f (x) 在闭区间 [a, b] 上连续, 且 f (a)f (b) < 0, 则方程
f (x) = 0 在开区间 (a, b) 内至少有 1 个实根.
考察有根区间 (a, b), 取中点 x0 = (a + b)/2 将它分为两半, 然后进行根的搜索,
即检查 f (x0 )[当 f (x0 ) = 0 时, 则 x∗ = x0 ] 与 f (a) 是否同号. 如果确系同号, 说明
所求的根 x∗ 在 x0 的右侧, 这时令 a1 = x0 , b1 = b; 否则 x∗ 必在 x0 左侧, 这时令
a1 = a, b1 = x0 (图 0-2). 不管出现哪一种情形, 新的有根区间 [a1 , b1 ] 的长度仅为
[a, b] 的一半.
图 0-2 二分法的几何意义
|x∗ − xk | < ε,
其中, ε 为预定精度.
上述求解方法称为二分法. 它是计算机中一种常用的算法. 我们给出其算法框
图, 如图 0-3. 其中, a, b 表示有根区间的左、右端点; x 表示近似根.
各框的具体含义如下:
[框 1] 从所给区间 (a, b) 着手二分.
[框 2] 取有根区间 (a, b) 的中点 x 作为近似根.
[框 3] 确定二分后新的有根区间 (a, b).
[框 4] 检查近似根 x 是否满足精度要求.
例 0.1 用二分法求方程 x3 − x − 1 = 0 在区间 (1, 1.5) 内的一个实根, 要求
误差不超过 0.005.
解: ① 因为 f (1) = −1, f (1.5) = 0.875, 所以
另外, 显然 f (x) 在 [1, 1.5] 连续, 故由定理 0.1, f (x) 在区间 (1,1.5) 内有根.
② 预估所要二分的次数. 按误差估计式
1
|x∗ − xk | 6 (b − a),
2k+1
只需二分 6 次, 便能达到所要求的精度.
·6· 绪 论
图 0-3 二分法的算法框图
0.3 误差分析的重要性
通常人们习惯地认为, 只要从理论上给出了计算步骤, 即可大胆地计算下去, 而
0.3 误差分析的重要性 ·7·
不考虑计算过程中舍入误差的影响. 也有人在将复杂问题化成简单问题时误认为截
去比如方程的无穷小量不会对方程的解产生很大的误差. 诸如此类, 在实际问题的
求解上, 往往会产生面目全非的结果, 甚至在计算机上无法运行下去.
这里我们仅给出一个例子来说明问题的严重性, 从而引起我们在设计计算方法
时对相应问题的重视.
Z 1
xn
例 0.2 建立计算 In = dx 的递推公式并计算 I1 , I2 , I3 , I4 .
0 x + 25
解:① 显然
Z 1 n Z 1
x + 25xn−1 1
In + 25In−1 = dx = xn−1 dx = , (0.1)
0 x + 25 0 n
故有递推公式
1
In = − 25In−1 .
n
② 保留 4 位有效数字, 计算如下:
Z 1
1 ¯1
I0 = dx = ln(x + 25)¯0 = 0.039 22,
0 x + 25
I1 = 1 − 25I0 = 1 − 25 × 0.039 22 = 0.019 50,
1 1
I2 = − 25I1 = − 25 × 0.019 50 = 0.012 50,
2 2
1 1
I3 = − 25I2 = − 25 × 0.012 50 = 0.020 83,
3 3
1 1
I4 = − 25I3 = − 25 × 0.020 83 = −0.270 75.
4 4
③ 分析计算结果如下.
xn
令 fn (x) = , 由于 fn (x) 在区间 (0, 1] 上都是大于零的, 所以, 对任意的
x + 25
Z 1
整数 n, 都有 In = fn (x)dx > 0, 这与 ② 中 I4 = −0.270 75 < 0 矛盾. 由此可见,
0
上述方法并不能保证结果的正确性, 为什么呢?这是因为在计算 I0 时有误差 (只保
留了小数点后 5 位).
准确值为
I1 = 1 − 25I0 ,
近似值为
I¯1 = 1 − 25I¯0 ,
所以
¯ ¯ ¯ ¯
¯I1 − I 1 ¯ = 25 ¯I 0 − I0 ¯ .
·8· 绪 论
同理可得
¯ ¯ ¯ ¯ ¯ ¯
¯I2 − I 2 ¯ = 25 ¯I 1 − I1 ¯ = 252 ¯I0 − I 0 ¯ ,
¯ ¯ ¯ ¯ ¯ ¯ ¯ ¯
¯I3 − I 3 ¯ = 25 ¯I2 − I 2 ¯ = 252 ¯I1 − I 1 ¯ = 253 ¯I0 − I 0 ¯ ,
¯ ¯ ¯ ¯
¯I4 − I 4 ¯ = · · · = 254 ¯I0 − I 0 ¯ .
¯ ¯
由于 ¯I0 − I 0 ¯ 在计算机上进行计算时, 不可避免地会丢失有效数字, 产生误差,
而在递推公式中, 每相差一步, 误差将放大 25 倍, 在运行到第 4 步时, 误差放大了
254 = 390 625 倍!
对于这种现象, 应该如何处理呢?如果改变次序, 可运用以下递推关系式.
由式 (0.1) 得 µ ¶
1 1
In−1 = − In , (0.2)
25 n
1
|In−1 − I n−1 | = |In − I n |,
25
µ ¶n−4
1
|I4 − I 4 | = · · · = |In − I n |.
25
可见, 改变次序可以使计算误差越来越小.
由于
Z 1 Z 1 n
xn x 1 1
0< dx < dx = × → 0, n → ∞,
0 x + 25 0 25 25 n
所以
In → 0, n → ∞,
故可取
I7 ≈ 0, I 7 = 0.
但是
√ √
12 345 678 − 12 345 677
1
=√ √
12 345 678 + 12 346 677
=0.142 302 50 · · · × 10−3
≈0.142 303 · · · × 10−3 .
3) 防止大数 “吃掉” 小数
在数值运算中参加运算的数有时数量级相差很大, 而计算机位数有限, 如不注
意运算次序就可能出现大数 “吃掉” 小数的现象, 从而影响计算结果的可靠性.
例如,在 5 位十进制模拟计算机上, 计算
1000
X
A = 524 92 + δi , 0.1 6 δi 6 0.9, i = 1, 2, · · · , 1000.
i=1
把运算写成规格化形式, 为
1000
X
A = 0.524 92 × 105 + δi .
i=1
· 10 · 绪 论
于是
0.001 × 105 + 0.524 92 × 105 6 A 6 0.009 × 105 + 0.524 92 × 105 ,
524 92 6 A 6 533 92.
4) 注意简化计算步骤, 减少运算次数
同样一个计算问题, 如果能减少计算次数, 不但可节省计算机的计算时间, 还
能减少计算误差, 这是数值计算必须遵从的原则, 也是计算方法要研究的重要内容.
例如, 计算 x255 的值. 如果逐个相乘要用 254 次乘法, 但若写成
1.1 插 值 问 题
1.1.1 基本概念
1.1.2 插值多项式的存在唯一性
所谓多项式插值就是要构造一个不超过 n 次的多项式
Pn (x) = a0 + a1 x + · · · + an xn , (1.2)
使其满足插值条件式 (1.1), 则
· 12 · 第1章 插 值 法
a0 + a1 x0 + · · · + an xn0 = f (x0 ),
a + a x + · · · + a xn = f (x ),
0 1 1 n 1 1
(1.3)
· · · · · ·
a0 + a1 xn + · · · + an xnn = f (xn ).
当 i 6= j 时, xi 6= xj , 则 Y
V = (xj − xi ) 6= 0.
06i<j6n
类似地, 若已知实验数据 (x0 , f (x0 )), (x1 , f (x1 )), (x2 , f (x2 )), 那么经过这三点一样可
以确定唯一的一条抛物线 (二次函数), 设其方程为
f (x0 )
L2 (x0 ) = A(x0 − x1 )(x0 − x2 ) = f (x0 ), A= .
(x0 − x1 )(x0 − x2 )
类似地, 令 x = x1 , 则
f (x1 )
L2 (x1 ) = B(x1 − x0 )(x1 − x2 ) = f (x1 ), B= .
(x1 − x0 )(x1 − x2 )
令 x = x2 , 则
f (x2 )
L2 (x2 ) = C(x2 − x0 )(x2 − x1 ) = f (x2 ), C= .
(x2 − x0 )(x2 − x1 )
呢?若记
(x − x0 ) · · · (x − xi−1 )(x − xi+1 ) · · · (x − xn )
li (x) = , i = 0, 1, · · · , n, (1.9)
(xi − x0 ) · · · (xi − xi−1 )(xi − xi+1 ) · · · (xi − xn )
· 14 · 第1章 插 值 法
所以 n
X
Ln (xj ) = li (xj )f (xi ) = f (xj ), j = 0, 1, · · · , n. (1.13)
i=0
则 n
Y
0
ωn+1 (xi ) = (xi − xj ). (1.15)
j=0
j6=i
这样 Ln (x) 又可表示成
n
X ωn+1 (x)
Ln (x) = 0 f (xi ). (1.16)
i=0
(x − xi )ωn+1 (xi )
值得提出的是:插值多项式可以有各种不同的表达形式, 但如果不限定次数,
那么插值多项式不是唯一的. 事实上, 设 a(x) 是任意的多项式, 则多项式
P (x) = Ln (x) + a(x)(x − x0 ) · · · (x − xn )
定理 1.2 设 f (x), f 0 (x), · · · , f (n) (x) 在区间 [a, b] 上连续, f (n+1) (x) 在区间
(a, b) 内存在, 节点 a 6 x0 < x1 < · · · < xn 6 b, Ln (x) 是满足插值条件 Ln (xi ) =
f (xi ) (i = 0, 1, · · · , n) 的插值多项式, 则对任何 x ∈ [a, b], 插值余项为
f (n+1) (ξ)
Rn (x) = f (x) − Ln (x) = ωn+1 (x), (1.17)
(n + 1)!
Rn (xi ) = 0, i = 0, 1, · · · , n,
故 Rn (x) 可写成
xi 0 1 2 3
f (xi ) 1.0000 1.6487 2.7183 4.4817
(x − 2)(x − 3) (x − 1)(x − 3)
J2 (x) = × 1.6487 + × 2.7183
(1 − 2)(1 − 3) (2 − 1)(2 − 3)
(x − 3)(x − 2)
+ × 4.4817
(3 − 1)(3 − 2)
=0.3469x2 + 0.0289x + 1.2729,
于是
f (2.8) ≈ L2 (2.8) = 4.0735.
若取 x0 = 0, x1 = 1, x2 = 2 作为插值基点, 此时通过这三点的二次插值多项
式为
(x − 1)(x − 2) (x − 0)(x − 2)
L̃2 (x) = × 1.0000 + × 1.6487
(0 − 1)(0 − 2) (1 − 0)(1 − 2)
(x − 0)(x − 1)
+ × 2.7183
(2 − 0)(2 − 1)
=0.2105x2 + 0.4383x + 1.0000,
于是
f (2.8) ≈ L̃2 (2.8) = 3.8770.
故
1 2
h 6 5 × 10−5 ,
8
即
h 6 0.02.
函数表允许的最大步长是 0.02.
Pn (xj ) = f (xj ), j = 0, 1, · · · , n,
可得:
当 x = x0 时, Pn (x0 ) = a0 = f (x0 ).
当 x = x1 时, Pn (x1 ) = a0 + a1 (x1 − x0 ) = f (x1 ), 推得
f (x1 ) − f (x0 )
a1 = .
x1 − x0
称为 f (x) 在 x0 , x1 , · · · , xk 处的 k 阶差商.
差商的计算可列表进行 (见表 1-1).
差商具有下列基本性质.
性质 1.1 f (x) 在 x0 , x1 , · · · , xk 处的 k 阶差商 f [x0 , x1 , · · · , xk ] 可以表示为
函数值 f (x0 ), f (x1 ), · · · , f (xk ) 的线性组合, 形如
k
X f (xi )
f [x0 , x1 , · · · , xk ] = 0 , (1.22)
i=0
ωk+1 (xi )
k
Y
其中, ωk+1 (x) = (x − xj ).
j=0
表 1-1 差商表
xi f (xi ) 一阶差商 二阶差商 三阶差商 四阶差商
x0 f (x0 )
f [x0 , x1 ]
x1 f (x1 ) f [x0 , x1 , x2 ]
f [x1 , x2 ] f [x0 , x1 , x2 , x3 ]
x2 f (x2 ) f [x1 , x2 , x3 ] f [x0 , x1 , x2 , x3 , x4 ]
f [x2 , x3 ] f [x1 , x2 , x3 , x4 ]
x3 f (x3 ) f [x2 , x3 , x4 ]
f [x3 , x4 ]
x4 f (x4 )
.. .. .. .. .. ..
. . . . . .
1.3 差商与牛顿 (Newton) 插值 · 19 ·
这个性质可用数学归纳法证明. 并从该性质可以看出差商与节点的次序无关,
即有:
性质 1.2 差商具有对称性, 即在 f [x0 , x1 , · · · , xk ] 中任意改变节点 xi , xj 的
次序, 其值不变.
性质 1.3 对于 n 次多项式 f (x) 的 k 阶差商 f [x0 , x1 , · · · , xk−1 ], 当 k 6 n 时
是 n − k 次多项式, 而当 k > n 时其值恒等于零.
只要证明, 若 f [x, x0 , · · · , xl ] 是 m 次多项式时, f [x, x0 , · · · , xl+1 ] 是 m − 1 次
多项式即可. 而根据多项式的特性又仅需验证 f [x, x0 , · · · , xl ] = xm 的情形. 事实
上,
f [x, x0 , · · · , xl ] − f [x0 , xl , · · · , xl+1 ]
f [x, x0 , · · · , xl+1 ] =
x − xl+1
xm − xm l+1
= = xm−1 + xm−2 xl+1 + · · · + xm−1 l+1 ,
x − xl+1
······ (1.24)
· 20 · 第1章 插 值 法
记
Nn (x) =f (x0 ) + f [x0 , x1 ](x − x0 ) + f [x0 , x1 , x2 ](x − x0 )(x − x1 )
+ · · · + f [x0 , x1 , · · · , xn ](x − x0 ) · · · (x − xn−1 ), (1.26)
则
f (x) = Nn (x) + R̃n (x), (1.28)
又由于
Ln (xi ) = f (xi ), i = 0, 1, · · · , n,
所以式 (1.31) 中 Ln (x) 在各节点处的各阶差商值等于 f (x) 在这些节点处相应的
各阶差商值, 故
Ln (x) =Ln (x0 ) + Ln [x0 , x1 ](x − x0 )
+ · · · + Ln [x0 , x1 , · · · , xn ](x − x0 ) · · · (x − xn−1 )
=f (x0 ) + f [x0 , x1 ](x − x0 ) + · · · + f [x0 , x1 , · · · , xn ](x − x0 ) · · · (x − xn−1 )
=Nn (x), (1.32)
即确实满足插值条件式 (1.29).
Newton 插值公式的优点是:当增加一个节点时, 即增加一次插值多项式的次
数时, 只要再增加一项就行了, 且有递推关系式
和
f (x) = Nn (x) + R̃n (x).
结合式 (1.32), 两个插值多项式的余项也应相等, 即有
f (n+1) (ξ)
f [x, x0 , x1 , · · · , xn ] = , ξ ∈ (a, b).
(n + 1)!
因此可以得到差商的另一个重要性质:
性质 1.4
f (k) (ξ)
f [x0 , x1 , · · · , xk ] =
, (1.34)
k!
其中, ξ 介于 x0 , x1 , · · · , xk 的最小值和最大值之间.
√
例 1.3 已知 f (x) = x 在点 x = 2, 2.1, 2.2 的值, 试作二次 Newton 插值多
项式. 若增加一个点 x = 2.3, 再求三次 Newton 插值多项式.
解:作差商表 1-2.
· 22 · 第1章 插 值 法
于是
N2 (x) = 1.414 214 + 0.349 24(x − 2.0) − 0.041 10(x − 2.0)(x − 2.1),
而
N3 (x) =1.414 214 + 0.349 24(x − 2.0) − 0.041 10(x − 2.0)(x − 2.1)
+ 0.009 167(x − 2.0)(x − 2.1)(x − 2.2)
=N2 (x) + 0.009 167(x − 2.0)(x − 2.1)(x − 2.2).
1.4 差分与等距节点插值
Newton 插值方法增强了插值多项式应用的灵活性, 但为了计算差商, 需要多
次进行除法运算. 而当插值节点等距时, 我们可以利用此特征对 Newton 插值公式
变形, 以减少计算量. 为此下面先引入差分的概念.
1.4.1 差分及其性质
定义 1.2 设在等距节点 x0 , x1 = x0 + h, · · · , xn = x0 + nh 处, y = f (x) 的取
值为 f0 , f1 , · · · , fn , 其中, h > 0 为相邻两节点间的距离, 称为步长. 称
∆fk = fk+1 − fk
为 m 阶差分.
特别地, 规定零阶差分为
∆0 fk = fk , k = 0, 1, · · · , n.
差分与差商之间有如下重要关系:
1.4 差分与等距节点插值 · 23 ·
∆m f0
f [x0 , x1 , · · · , xm ] = . (1.35)
m!h
事实上,
fk+1 − fk ∆fk
f [xk , xk+1 ] = = ,
h h
且
f [xk+1 , xk+2 ] − f [xk , xk+1 ] ∆2 fk
f [xk , xk+1 , xk+2 ] = = .
xk+2 − xk 2!h2
一般地, 由数学归纳法可以证明
∆m fk
f [xk , xk+1 , · · · , xk+m ] = .
m!hm
特别地, 当 k = 0 时, 得
∆m f0
. f [x0 , x1 , · · · , xm ] =
m!hm
此外, 利用归纳法我们还可以证明高阶差分和函数值之间的关系为
m
X
∆m fk = (−1)i Cm
i
fk+m−i , (1.36)
i=0
i
其中, Cm 为二项式系数, 且
i m!
Cm = .
i!(m − i)!
计算差分时, 可仿差商的计算格式, 列出差分表进行 (见表 1-3).
表 1-3 差分表
xi fi ∆fi ∆2 fi ∆3 fi ∆4 fi
x0 f0
∆f0
x1 f1 ∆2 f0
∆f1 ∆3 f0
x2 f2 ∆2 f1 ∆4 f0
∆f2 ∆3 f1
x3 f3 ∆2 f2
∆f3
x4 f4
.. .. .. .. .. ..
. . . . . .
∇fk = fk − fk−1
和
∇m fk = ∇m−1 fk − ∇m−1 fk−1 , m = 2, 3, · · · . (1.37)
· 24 · 第1章 插 值 法
和
δ m fk = δ m−1 fk+ 21 − f m−1 fk− 12 , m = 2, 3, · · · ,
h h
其中, fk− 12 , fk+ 12 分别表示 f (x) 在 x = xk − , xk + 处的函数值 (h 为步长).
2 2
各阶的向后差分和中心差分的计算同样可以通过构造相应的差分表来完成.
1.4.2 等距节点插值公式
将 Newton 插值多项式 (1.26) 中各阶差商分别用相应的差分代替, 就可以得到
各种形式的等距节点的插值公式. 但考虑到节点的选取方法与近似的效果有密切
联系, 故应视节点的不同分别选取进行讨论.
1. Newton 前插公式
∆f0 ∆2 f0
Nm (x) =f0 + (x − x0 ) + (x − x0 )(x − x1 )
h 2h2
m
∆ f0
+ ··· + (x − x0 ) · · · (x − xm−1 ), m = 1, 2, · · · , n.
m!hm
作线性变换
x = x0 + th, 0 6 t 6 m,
则
x − xk = (t − k)h, k = 0, 1, · · · , m.
于是
Nm (x) =Nm (x0 + th)
t(t − 1) 2 t(t − 1) · · · (t − m + 1) m
=f0 + t∆f0 + ∆ f0 + · · · + ∆ f0 , (1.38)
2! m!
相应的余项为
hm+1 f (m+1) (ξ)
Rm (x) = Rm (x0 + th) = t(t − 1) · · · (t − m), (1.39)
(m + 1)!
其中, ξ ∈ (x0 , xm ).
2. Newton 后插公式
项式调整为
作变换
x = xn + th, −m 6 t 6 0,
则
x − xn−k = (t + k)h, k = −m, −m + 1, · · · , 0.
再由
∆k fn−k
f [xn , xn−1 , · · · , xn−k ] = , k = 0, 1, · · · , m,
k!hk
代入式 (1.40) 得
t(t + 1) 2
Nm (x) =Nm (xn + th) = fn + t∆fn−1 + ∆ fn−2
2!
t(t + 1) · · · (t + m − 1) m
+ ··· + ∆ fn−m , m = 1, 2, · · · , n. (1.41)
m!
相应的余项为
hm+1 f (m+1) (ξ)
Rm (x) = t(t + 1) · · · (t + m), (1.42)
(m + 1)!
其中, ξ ∈ (xn−m , xn ).
例 1.4 已知数据表
xi 0 1 2 3
f (xi ) 1.0000 1.6487 2.7183 4.4817
则三次插值多项式为 (h = 1)
0.4209 0.2729
N3 (x) = 1 + 0.6487x + x(x − 1) + x(x − 1)(x − 2)
2! 3!
· 26 · 第1章 插 值 法
二阶 Newton 后插公式为
0.6938
N2 (x) = 4.4817 + 1.7634(x − 3) + (x − 3)(x − 2)
2!
2 2
= 0.3469x + 0.0289x + 1.2729.
所以
f (2.8) ≈ N2 (2.8) = 4.0735.
或 (
1, k = i,
hi (xk ) = 0, h̄0i (xk ) = (1.45)
0, k 6= i.
从而有
αi (x) = 1 − 2li0 (xi )(x − xi ), βi (x) = x − xi . (1.48)
其中
当 f (x), f 0 (x), · · · , f (2n+1) (x) 在区间 [a, b] 上连续, f (2n+2) (x) 在区间 (a, b) 内
存在, 且 x0 , x1 , · · · , xn 是区间 [a, b] 上的互异节点时, 对任何 x ∈ [a, b], 仿 Lagrange
插值余项的推导, 可得 Hermite 插值多项式的余项为
f (2n+2) (ξ) 2
R2n+1 (x) = f (x) − H2n+1 (x) = ω (x), (1.49)
(2n + 2)! n+1
n
Y
其中, ξ ∈ (a, b); ωn+1 (x) = (x − xj ).
j=0
当 n = 1 时, 作为重要的特例可以得到满足条件
相应的插值余项为
f (4) (ξ)
R3 (x) = f (x) − H3 (x) = (x − x0 )2 (x − x1 )2 , ξ ∈ (x0 , x1 ).
4!
Hermite 插值问题的形式是多样的, 对一个具体问题的解法也往往不唯一, 如
能充分利用问题的特点, 那么求解的过程就有可能简化.
例 1.5 设 a 6 x0 < x1 < x2 6 b, f (x) 在区间 [a, b] 上具有连续的四阶导数.
试求满足条件
P (xi ) = f (xi ), i = 0, 1, 2,
P 0 (x1 ) = f 0 (x1 )
于是
f 0 (x1 ) − f [x0 , x1 ] − f [x0 , x1 , x2 ](x1 − x0 )
A= .
(x1 − x0 )(x1 − x2 )
代入式 (1.50) 即得 P (x).
为了求出其余项表达式, 设
1.6 三次样条插值
1.6.1 多项式插值的缺陷与分段插值
对于足够光滑的函数 f (x), 当其插值多项式的次数逐渐增高时, 是否能使逼近
的程度也得到逐步的改善呢?
· 30 · 第1章 插 值 法
例 1.6 考察函数
1
f (x) = , x ∈ [−1, 1].
1 + (5x)2
1
现把 [−1, 1] 区间分为 10 等分, 取分点 xk = −1 + k (k = 0, 1, · · · , 10) 为插值节
5
点, 则可作一个十次插值多项式 P10 (x). 将 f (x) 与 P10 (x) 在区间 [0.8, 1] 上一些点
分别取值列于表 1-5.
图 1-1 高次多项式插值缺陷
图 1-2 分段插值示意图
此时插值函数为
P1 (x), x ∈ [x0 , x1 ],
P (x), x ∈ [x1 , x2 ],
2
P (x) =
······
Pn (x), x ∈ [xn−1 , xn ],
其中
x − xi x − xi−1
Pi (x) = f (xi−1 ) + f (xi ), i = 1, · · · , n.
xi−1 − xi xi − xi−1
分段多项式插值有较好的局部性质, 可由于分段原因, 虽然在连接处能连续但
常常不够光滑, 即导数或高阶导数不连续. 因此如果既要克服高次插值多项式的不
足, 又要有一定的光滑性, 就需要样条插值来实现.
1.6.2 三次样条插值函数
(2) 已知两端的二阶导数值, 即
于是
2 4 6
Si00 (xi ) = mi−1 + mi − 2 [f (xi ) − f (xi−1 )].
hi hi hi
同理可得
00 6x − 2xi − 4xi+1 6x − 4xi − 2xi+1
Si+1 (x) = mi + mi+1
h2i+1 h2i+1
6(xi + xi+1 − 2x)
+ [f (xi+1 ) − f (xi )].
h3i+1
于是
00 4 2 6
Si+1 (xi ) = − mi − mi+1 + [f (xi+1 ) − f (xi )]. (1.53)
hi+1 hi+1 h2i+1
由 Si00 (xi ) = Si+1
00
(xi ) 得
µ ¶
2 4 4 2
mi−1 + + mi + mi+1
hi hi hi+1 hi+1
· ¸
f (xi+1 ) − f (xi ) f (xi ) − f (xi−1 )
=6 + . (1.54)
h2i+1 h2i
µ ¶
1 1
用2 + 除式 (1.54) 两边, 且记
hi hi+1
hi+1 hi
λi = , µi = 1 − λi = ,
hi + hi+1 hi + hi+1
gi = 3{µi f [xi , xi+1 ] + λi f [xi−1 , xi ]}, i = 1, 2, · · · , n − 1,
则可得
λi mi−1 + 2mi + µi mi+1 = gi , i = 1, 2, · · · , n − 1. (1.55)
m0 = f 0 (x0 ), mn = f 0 (xn ).
故有
f (x1 ) − f (x0 ) h1 00
2m0 + m1 = 3 − f (x0 ). (1.57)
h1 2
同理, 由条件 S 00 (xn ) = f 00 (xn ) 得
f (xn ) − f (xn−1 ) hn 00
mn−1 + 2mn = 3 + f (xn ). (1.58)
hn 2
结合式 (1.55), (1.57) 和 (1.58), 即得确定 m0 , m1 , · · · , mn 的线性方程组
2 1 m0 g0
λ1 2 µ1 m1 g1
.. .. .. .. ..
. . . . = , (1.59)
.
λn 2 µn mn−1 gn−1
1 2 mn gn
1.6 三次样条插值 · 35 ·
其中
f (x1 ) − f (x0 ) h1 00
g0 = 3 − f (x0 ),
h1 2
f (xn ) − f (xn−1 ) hn 00
gn = 3 + f (xn ).
hn 2
对于线性方程组 (1.56) 和 (1.59), 可证明它们的系数矩阵都是非奇异的, 从而
这些方程组都有唯一确定的解.
解上述方程组 (此类型的线性方程组称为三对角方程组, 可用简便的 “追赶法”
求解. 具体实施过程见 6.4 节), 求出 m0 , m1 , · · · , mn 的值, 将它们代入式 (1.51) 即
得三次样条插值函数在各子区间上的表达式.
例 1.7 已知数据表
xi 0 1 2 3
f (xi ) 0 2 3 6
f 0 (xi ) 1 0
hi : h1 = 1, h2 = 1, h3 = 1.
1 1
λi : λ1 = , λ2 = .
2 2
1 1
µi : µ1 = , µ2 = .
2 2
9
gi : g1 = 3{µ1 f [x1 , x2 ] + λ1 f [x0 , x1 ]} = ,
2
g2 = 3{µ2 f [x2 , x3 ] + λ2 f [x1 , x2 ]} = 6,
即
g1 − λ1 f 0 (x0 ) = 4,
g2 − µ2 f 0 (x3 ) = 6.
故确定 m1 , m2 的方程组为
1 " # " #
2
2 m 1 4
1 = ,
2 m2 6
2
解得
4 8
m1 = , m2 = .
3 3
· 36 · 第1章 插 值 法
(x − x1 )2 [2(x − x0 ) + h1 ] (x − x0 )2 [2(x1 − x) + h1 ]
S1 (x) = 3 f (x0 ) + f (x1 )
h1 h31
(x1 − x)2 (x − x0 ) (x − x0 )2 (x − x1 )
+ m 0 + m1
h21 h21
4
=2x2 (3 − 2x) + x(x − 1)2 + x2 (x − 1)
3
5 3 8 2
= − x + x + x.
3 3
同理可得, S(x) 在区间 [1,2] 与 [2,3] 上的表达式分别为
25 2 11
S2 (x) = 2x3 − x + 12x − ,
3 3
10 3 71 2
S3 (x) = − x + x − 52x + 39.
3 3
故所求三次样条插值函数 S(x) 在所讨论的区间 [0,3] 上的表达式为
5 8
− x3 + x2 + x, x ∈ [0, 1],
3 3
25 11
S(x) = 2x3 − x2 + 12x − , x ∈ [1, 2],
3 3
10 3 71 2
− x + x − 52x + 39, x ∈ [2, 3].
3 3
利用 S(x) 的表达式就容易计算 f (0.3) 与 f (2.4) 的近似值了.
由于 0.3 ∈ [0, 1], 故用 S1 (x) 计算得到
同理可得
f (2.4) ≈ S3 (2.4) = 4.44.
③ 计算
hi+1
λi = , µi = 1 − λi ,
hi + hi+1
1.6 三次样条插值 · 37 ·
同理可得
0 hi+1 hi+1
Si+1 (xi ) = Mi − Mi+1 + f [xi , xi+1 ]. (1.63)
3 6
由于 Si0 (xi ) = Si+1
0
(xi ), 故有
hi hi + hi+1 hi+1
Mi−1 + Mi + Mi+1 = f [xi , xi+1 ] − f [xi−1 , xi ]. (1.64)
6 3 6
沿用前面的记号, 将式 (1.64) 整理得
µi Mi−1 + 2Mi + λi Mi+1 = di , i = 1, 2, · · · , n − 1, (1.65)
其中
di = 6f [xi−1 , xi , xi+1 ].
这 n − 1 个方程一样含有 M0 , M1 , · · · , Mn 共 n + 1 个未知量, 也需要加上两
个边界条件才能确定:
(1) 已知两端的一阶导数值时, 即有
M0 = f 00 (x0 ), Mn = f 00 (xn ),
则式 (1.65) 可改写成
2 λ1 M1 d1 − µ1 f 00 (x0 )
µ2 2 λ2 M2 d2
. .. . .. .. .. ..
. . = . . (1.68)
µn−2 2 λn−2 Mn−2 dn−2
µn−1 2 Mn−1 dn−1 − λn−1 f 00 (xn )
1.6 三次样条插值 · 39 ·
1.6.4 两点说明
1. 关于插值的误差估计
其中
5 1 3 α + α−1
C0 = , C1 = , C2 = , C3 = , h = max hi ,
384 24 8 2 i
h
α= , kf (4) k∞ = max |f (4) (x)|.
min hi α6x6b
i
证明:略.
可以看出, 只要 h → 0, 便能保证 S(x) → f (x), S 00 (x) → f 00 (x).
2. 关于样条函数的统一表示形式
上面得到的三次样条插值函数是以分段形式表示的, 即
S1 (x), x ∈ [x0 , x1 ],
S (x), x ∈ [x , x ],
2 1 2
S(x) =
······
Sn (x), x ∈ [xn−1 , xn ].
当这种表示方法在分析使用不方便时, 我们可把它们写成另一种统一表达形式.
事实上, 以分两段情形为例. 设
(
S1 (x), x ∈ [x0 , x1 ],
S(x) =
S2 (x), x ∈ [x1 , x2 ].
由于
S1 (x1 ) = S2 (x1 ), S10 (x1 ) = S20 (x1 ), S100 (x1 ) = S200 (x1 ),
所以 (
S1 (x), x ∈ [x0 , x1 ],
S(x) = 3
S2 (x) + b1 (x − x1 ) , x ∈ [x1 , x2 ],
· 40 · 第1章 插 值 法
记作
S(x) = S1 (x) + b1 (x − x1 )3+ ,
其中 (
0, x < x1 ,
(x − x1 )3+ = 3
(x − x1 ) , x > x1 ,
称为截断幂函数.
一般地, n + 1 个节点的三次样条插值函数可表示为
习 题 1
π π π π π
1. 已知 sin x 在 x = 0, , , , 的值, 试用二次插值多项式求 sin x 在 x = 的近似
6 4 3 2 5
值, 并估计误差.
2. 设 x0 , x1 , · · · , xn 为互不相同的节点, 证明:
n
X
(1) lk (x) = 1.
k=0
Xn
(2) lk (x)g(xk ) = g(x), g(x) 为不超过 n 次的多项式.
k=0
1 ¯ ¯
(b − a)2 max ¯f 00 (x)¯ .
max |f (x)| 6
a6x6b 8 a6x6b
· ¸
1 1 1 1 1 1
5. 设 f (x) = x5 + 3x3 + x + 1, 试求 f [1, 2, 3, 4, 5, 6] 及 f 1, , , , , , 的差商值.
2 3 4 5 6 7
6. 已知数据表
的 Hermite 插值多项式.
10. 求一个次数不高于 4 次的多项式 P (x), 使其满足
并估计误差.
11. 设 x0 , x1 , · · · , xn 为互不相同的节点, 证明:
n
X n
X
xi hi (x) + h̄i (x) = x,
i=0 i=0
其中, hi (x) = [1 − 2li (xi )(x − xi )][li (x)]2 , h̄i (x) = (x − xi )[li (x)]2 , 而 li (x) 是 Lagrange 插值
基函数.
12. 已知数据表
xi 0 1 2 3
f (xi ) 1 3 6 5
f 0 (xi ) 2 –1
2.1 观测数据的最小二乘拟合
2.1.1 最小二乘问题
对于给定的观测数据式 (2.1), 设
n
X
P (x) = ak ϕk (x), n ¿ N, (2.2)
k=0
ϕk (x) = xk , k = 0, 1, 2, · · · , n.
δi = f (xi ) − Pn (xi ), i = 1, 2, · · · , N,
n
X
称多元极值问题式 (2.5) 为最小二乘问题, 而满足式 (2.5) 的解 Pn∗ (x) = a∗k xk 为
k=0
最小二乘拟合多项式.
2.1.2 正规方程组
由微分可知, 式 (2.5) 的解 a∗0 , a∗1 , · · · , a∗n 应该满足方程组
∂φ
= 0, j = 0, 1, · · · , n,
∂aj
而 " #
XN n
X
∂φ
=2 ωi f (xi ) − ak xi (−xji ),
k
j = 0, 1, · · · , n, (2.6)
∂aj i=1 k=0
则
N
X n
X N
X
ωi xji f (xi ) − ak ωi xk+j
i = 0, j = 0, 1, · · · , n,
i=1 k=0 i=1
即
· 44 · 第2章 曲线拟合与平方逼近
X X X X
a0 ωi + a1 ωi xi + · · · + an ωi xni = ωi f (xi ),
X X X X
a
0 ωi xi + a1 ωi x2i + · · · + an ωi xn+1
i = ωi xi f (xi ),
(2.7)
······
a X ω xn + a X ω xn+1 + · · · + a X ω x2n = X ω xn f (x ),
0 i i 1 i i n i i i i i
X N
X
其中, ·= ·. n + 1 阶线性方程组 (2.7) 称为正规方程组 (或法方程组). 下面
i=1
将说明正规方程组 (2.7) 解的存在唯一性, 并进一步确认这一组解将使问题式 (2.5)
有解.
定理 2.1 正规方程组 (2.7) 有唯一解.
证明:用反证法. 若不然, 则正规方程组 (2.7) 相应的齐次方程组
n
X N
X
ak ωi xik+j = 0, j = 0, 1, · · · , n, (2.8)
k=0 i=1
有非零解.
用 aj (j = 0, 1, 2, · · · , n) 分别乘等式 (2.8) 两边, 然后所得的 n + 1 式相加得
n n N N n n N
à n !2
X X X k+j
X X j
X X X
k k
0= aj ak ωi xi = ωi aj xi ak xi = ωi ak xi ,
j=0 k=0 i=1 i=1 j=0 k=0 i=1 k=0
n
X
因此有 ak xki = 0 (i = 1, 2, · · · , N ), 即 n 次多项式 Pn (x) 有 N 个零点 xi (i =
k=0
1, 2, · · · , N ). 由于 n ¿ N , 故必有 ak = 0(k = 0, 1, 2, · · · , n), 与齐次方程组 (2.8) 有
非零解矛盾. 证毕.
n
X
定理 2.2 设 a∗k (k = 0, 1, · · · , n) 为正规方程组 (2.7) 的解, 则 Pn∗ (x) = a∗k xk
k=0
为式 (2.5) 的解.
证明:对于任意的一组实数 bk = 0(k = 0, 1, 2, · · · , n), 构造不超过 n 次的多
项式
n
X
P (x) = bk xk ,
k=0
其相应的偏方差的平方和为 φ(b0 , b1 , · · · , bn ), 由于
2 " #2
N
X n
X n
X n
X N
X n
X
= ωi f (xi ) − a∗k xki + a∗j xji − bj xji − ωi f (xi ) − a∗k xki
i=1 k=0 j=0 j=0 i=1 k=0
N
" n
# n
X X X
>2 ωi f (xi ) − a∗k xki (a∗j − bj )xji
i=1 k=0 j=0
n N
" n
#
X X X
=2 (a∗j − bj ) ωi f (xi ) − a∗k xki xji
j=0 i=1 k=0
Xn
∂φ(a∗0 , · · · , a∗n )
=− (a∗j − bj ) ,
j=0
∂aj
∂φ(a∗0 , · · · , a∗n )
= 0, j = 0, 1, · · · , n.
∂aj
n
X
故由 φ(b0 , · · · , bn ) 的任意性, 则 Pn∗ = a∗k xk 为问题式 (2.5) 的解. 证毕.
k=1
例 2.1 对于数据表
xi 1 2 3 4 5
f (xi ) 4 4.5 6 8 8.5
ωi 2 1 3 1 1
解得
a = 2.5648, b = 1.2037.
· 46 · 第2章 曲线拟合与平方逼近
同理可得
8a + 74b = 47,
74a + 1142b = 528.5.
解得
a = 3.9795, b = 0.2049,
即满足观测数据表的二次拟合多项式为
y = 3.9795 + 0.2049x2 .
2.2 正交多项式
2.2.1 切比雪夫 (Chebyshev) 多项式
1. 定义和性质
定义 2.1
事实上, 只要验证
Tn+1 (x) + Tn−1 (x) = 2xTn (x)
即可.
记 θ = arccos x (或 x = cos θ), 根据定义 2.1, 则
从而, 我们立即有
T0 (x) = 1,
T1 (x) = x,
T2 (x) = 2x2 − 1, (2.12)
T3 (x) = 4x3 − 3x,
T4 (x) = 8x4 − 8x2 + 1.
由归纳法容易证明:
性质 2.2 (次数) Tn (x) 是 n 次多项式, 且首项系数 (xn 的系数) 为 2n−1 .
性质 2.3 (零点) Tn (x) 在区间 [−1, 1] 上有 n 个不同的实零点:
2k + 1
x̄k = cos π, k = 0, 1, · · · , n − 1.
2n
证明:令 Tn (x) = 0, 即
· 48 · 第2章 曲线拟合与平方逼近
cos(n arccos x) = 0,
故
π
n arccos x = kπ + ,
2
于是
2k + 1
arccos x =
π.
2n
由于当 k = 1, 2, · · · , n 时, x 的取值互不相同, 且都在区间 [−1, 1] 内, 所以
Tn (x) 的零点为
2k + 1
x̄k = cos π, k = 0, 1, · · · , n − 1.
2n
性质 2.4 (极值点) Tn (x) 在区间 [−1, 1] 内的 n + 1 个点
k
x̄0k = cos π, k = 0, 1, · · · , n,
n
处轮流取最大值 1 和最小值 −1.
事实上,
· µ ¶¸ µ ¶
k k
Tn (x̄0k ) = cos n arccos cos π = cos n · π = (−1)k .
n n
性质 2.5 (奇偶性) 对于 Tn (x), 当 n = 2m 时, T2m (x) 是偶函数; 当 n = 2m+1
时, T2m+1 (x) 是奇函数.
因为
Tn (−x) = cos[n arccos(−x)] = cos[n(π − arccos x)]
= cos nπ cos(n arccos x) = (−1)n Tn (x).
使得 ¯ ¯
¯ Tn (x) ¯ 1
max |Q(x)| 6 max ¯ n−1 − 0¯¯ = n−1
¯
−16x61 −16x61 2 2
成立, 则
1
|Q(x)| 6 , x ∈ [−1, 1],
2n−1
即
1 1
− 6 Q(x) 6 , x ∈ [−1, 1].
2n−1 2n−1
因为 Tn (x) 在区间 [−1, 1] 内的 n + 1 个点
k
x̄0k = cos π, k = 0, 1, · · · , n,
n
Tn (x)
处轮流取得最大值 1 和最小值 −1. 先考察函数 Q(x) − n−1 在 x̄0k (k = 0, 1, · · · , n)
2
处的符号. 由于
Tn (x̄0 ) 1
Q(x̄00 ) − n−10 = Q(x̄00 ) − n−1 6 0,
2 2
Tn (x̄0 ) 1
Q(x̄01 ) − n−11 = Q(x̄01 ) + n−1 > 0,
2 2
Tn (x̄0 ) 1
Q(x̄02 ) − n−12 = Q(x̄02 ) − n−1 6 0,
2 2
······
Tn (x)
因此, Q(x)− n−1 在区间 (−1, 1) 上 n+1 个不同点 x̄0k (k = 0, 1, · · · , n) 处轮流变号,
2
Tn (x) Tn (x)
则由介值定理知, Q(x) − n−1 在区间 (−1, 1) 上至少有 n 个零点. 而 Q(x) − n−1
2 2
为一个不超过 n − 1 次的多项式, 所以
Tn (x)
Q(x) − ≡0
2n−1
与假设矛盾. 证毕.
· 50 · 第2章 曲线拟合与平方逼近
2. 插值余项的近似极小化
此时只要选插值节点为
2k + 1
tk = cos π, k = 0, 1, · · · , n − 1,
2n
相应地,
a+b b−a 2k + 1
xk = + cos π, k = 0, 1, · · · , n − 1. (2.15)
2 2 2n
2.2 正交多项式 · 51 ·
此时,
M̃n
max |f (x) − Ln−1 (x)| 6 max |ωn (x)|
a6x6b n! a6x6b
µ ¶n
M̃n b − a
= max |(t − t0 )(t − t1 ) · · · (t − tn−1 )|
n! 2 −16t61
n
M̃n (b − a)
= , (2.16)
n! 22n−1
¯ ¯
其中, M̃n = max ¯f (n) (x)¯.
a6x6b
若有
max |f (x) − Pn (x)| 6 εn ¿ ε,
−16x61
使其误差
max |f (x) − Pn,n−m (x)| < ε.
−16x61
(n) (n)
gn (x) = a(n) n
n x + an−1 xn−1 + · · · + a0 , n = 0, 1, · · · ,
表 2-2 常用的正交多项式
名称 区间 权函数 表达式与记号 首项系数
1 dn (2n)!
Legendre [−1, 1] 1 Pn (x) = n (x2 − 1)n
2 n! dxn 2n (n!)2
dn
Laguerre [0, +∞) e−x Ln (x) = ex n (xn e−x ) (−1)n
dx
n
2 2 d 2
Hermite (−∞, +∞) e−x Hn (x) = (−1) ex
n (e−x ) 2n
dxn
它们的递推关系为
2n + 1 n
Pn+1 (x) = xPn (x) − Pn−1 (x), P0 (x) = 1, P1 (x) = x,
n+1 n+1
Ln+1 (x) = (2n + 1 − x)Ln (x) − n2 Ln−1 (x), L0 (x) = 1, L1 (x) = −x + 1, (2.19)
Hn+1 (x) = 2xHn (x) − 2nHn−1 (x), H0 (x) = 1, H1 (x) = 2x.
其正交性为
Z 1
0, m 6= n,
Pn (x)Pm (x)dx = 2
−1
, m = n,
2n + 1
· 54 · 第2章 曲线拟合与平方逼近
Z (
+∞
−x 0, m 6= n,
e Ln (x)Lm (x)dx = 2
(2.20)
0 (n!) , m = n,
Z (
+∞
−x2 0, m 6= n,
e Hn (x)Hm (x)dx = n
√
−∞ 2 n! π, m = n.
2.3 最佳平方逼近
2.3.1 预备知识
定义 2.4 设 f (x), g(x) ∈ C[a, b], ρ(x) > 0, 积分
Z b
(f, g) = ρ(x)f (x)g(x)dx (2.21)
a
因为 Z b
ρ(x)gk2 (x)dx > 0, k = 0, 1, · · · , n,
a
2.3 最佳平方逼近 · 55 ·
所以
ak = 0, k = 0, 1, · · · , n,
其中 Z b
(ϕi , ϕj ) = ρ(x)ϕi (x)ϕj (x)dx, i, j = 0, 1, · · · , n.
a
2.3.2 最佳平方逼近
n
X
所谓最佳平方逼近, 就是对 f (x) ∈ C[a, b] 要找一个函数 P (x) = ai ϕi (x), 使
i=1
Z b
2
φ(a0 , a1 , · · · , an ) = ρ(x) [f (x) − P (x)] dx
a
最小, 即
· 56 · 第2章 曲线拟合与平方逼近
Z " n
#2
b X
min φ(a0 , a1 , · · · , an ) = min ρ(x) f (x) − ai ϕi (x) dx,
a0 ,a1 ,··· ,an ∈R a0 ,a1 ,··· ,an ∈R a i=0
(2.23)
其中, {ϕi (x)}(i = 0, 1, 2, · · · , n) 是确定的线性无关的函数系. 根据多元函数极值原
理, 则式 (2.23) 的解必须满足
∂φ
= 0, k = 0, 1, · · · , n,
∂ak
而
Z " n
#
∂φ b X
=2 ρ(x) f (x) − ai ϕi (x) [−ϕk (x)] dx = 0, k = 0, 1, · · · , n,
∂ak a i=0
于是有
(ϕ0 , ϕ0 )a0 + (ϕ0 , ϕ1 )a1 + · · · + (ϕ0 , ϕn )an = (ϕ0 , f ),
(ϕ , ϕ )a + (ϕ , ϕ )a + · · · + (ϕ , ϕ )a = (ϕ , f ),
1 0 0 1 1 1 1 n n 1
(2.24)
······
(ϕn , ϕ0 )a0 + (ϕn , ϕ1 )a1 + · · · + (ϕn , ϕn )an = (ϕn , f ).
和式 (2.7) 一样, 称 n + 1 阶线性方程组 (2.24) 为正规方程组.
定理 2.4 正规方程组 (2.24) 有唯一解.
证明:因为 {ϕi (x)} (i = 0, 1, 2, · · · , n) 线性无关, 由定理 2.3 知 G(ϕ0 , ϕ1 , · · · ,
ϕn ) 6= 0, 故方程组 (2.24) 有唯一解. 证毕.
n
X
定理 2.5 设 ai (i = 0, 1, · · · , n) 为正规方程组 (2.24) 的解, 则 P (x) = ai ϕi (x)
i=0
是式 (2.23) 的解.
证明:仿定理 2.2 的证明 (略).
例 2.3 设 f (x) = x4 , x ∈ [−1, 1], 求 P (x) ∈ H2 (不超过二次多项式的全体),
使 Z 1
[f (x) − P (x)]2 dx
−1
最小.
解:设 P (x) = a + bx + cx2 , 即取
则 a, b, c 应满足正规方程组
(ϕ0 , ϕ0 )a + (ϕ0 , ϕ1 )b + (ϕ0 , ϕ2 )c = (ϕ0 , f ),
(ϕ1 , ϕ0 )a + (ϕ1 , ϕ1 )b + (ϕ1 , ϕ2 )c = (ϕ1 , f ),
(ϕ , ϕ )a + (ϕ , ϕ )b + (ϕ , ϕ )c = (ϕ , f ),
2 0 2 1 2 2 2
2.3 最佳平方逼近 · 57 ·
其中 Z Z
1 1
(ϕ0 , ϕ0 ) = dx = 2, (ϕ1 , ϕ0 ) = (ϕ0 , ϕ1 ) = xdx = 0,
−1 −1
Z 1 Z 1
2
(ϕ2 , ϕ0 ) = (ϕ0 , ϕ2 ) = x2 dx = , (ϕ2 , ϕ1 ) = (ϕ1 , ϕ2 ) = x3 dx = 0,
−1 3 −1
Z 1 Z 1
2 2
(ϕ1 , ϕ1 ) = x2 dx =
, (ϕ2 , ϕ2 ) = x4 dx = ,
−1 3 −1 5
Z 1 Z 1 Z 1
2 2
(ϕ0 , f ) = x4 dx = , (ϕ1 , f ) = x5 dx = 0, (ϕ2 , f ) = x6 dx = .
−1 5 −1 −1 7
于是得
2 2
2a + c = ,
3 5
2
b = 0,
3
2
a + 2c = 2.
3 5 7
解得
3 6
a=− , b = 0, c= .
35 7
所以
3 6
P (x) = − + x2 ,
35 7
相应的平方误差为 Z 1
[f (x) − P (x)]2 dx = 0.0116.
−1
则 Z b
ρ(x)f (x)ϕk (x)dx
a (f, ϕk )
ak = Z b
= , k = 0, 1, · · · , n. (2.25)
(ϕk , ϕk )
ρ(x)ϕ2k (x)dx
a
Z 1
例 2.4 设 f (x) = x4 , x ∈ [−1, 1], 求 P (x) ∈ H2 , 使 [f (x) − P (x)2 ]dx
−1
· 58 · 第2章 曲线拟合与平方逼近
最小.
解:设 P (x) = a0 ϕ0 (x) + a1 ϕ1 (x) + a2 ϕ2 (x) 为二次多项式, 由于原问题的积分
区间为 [−1, 1], 权函数 ρ(x) ≡ 1, 故取
ϕk (x) = Pk (x), k = 0, 1, 2,
习 题 2
1. 已知实验数据
试求最小二乘拟合二次多项式.
2. 在某实验过程中, 对物体的长度分别进行了 n 次测量, 测得的 n 个数据为 x1 , x2 , · · · , xn ,
通常将它们的平均值
1
x̄ = (x1 + x2 + · · · + xn )
n
作为该物体的长度值, 试说明理由.
3. 对于实验数据
xi 0 1 2 3 4
f (xi ) 2.00 2.05 3.00 9.60 34.0
t/s 1 2 4 8 16 32 64
w/g 4.22 4.02 3.85 3.59 3.44 3.02 2.59
但实际使用这种方法往往有一定的困难, 原因在于:
sin x
(1) 大量的被积函数的原函数找不出来或不能用初等函数表示, 如 cos x2 ,
x
等.
(2) f (x) 仅由数据表给出.
在上面这些情况下, Newton-Leibniz 公式都不能直接运用. 因此我们有必要研
究积分的数值计算方法.
3.1 数值积分的基本思想与代数精确度
3.1.1 基本思想
对于积分
Z b
I= f (x)dx,
a
式 (3.2) 右端近似计算积分的数值公式称为中矩形公式.
若用积分区间两端点的函数值 f (a) , f (b) 的算术平均作为 f (ξ) 的近似值, 即
取
1
f (ξ) ≈ [f (a) + f (b)] ,
2
则由式 (3.1) 得
Z b
b−a
f (x)dx ≈ T = [f (a) + f (b)] . (3.3)
a 2
3.1.2 插值型求积公式
设给定一组节点
a 6 x0 < x1 < x2 < · · · < xn 6 b,
其中
· 62 · 第3章 数值积分与数值微分
Yn
x − xj
lk (x) = , k = 0, 1, · · · , n.
j=0
xk − xj
j6=k
则
Z b Z b Z b
f (n+1) (ξ)
I= f (x)dx = Ln (x)dx + (x − x0 ) · · · (x − xn )dx
a a a (n + 1)!
n
X
= Ak f (xk ) + Rn [f ] = In + Rn [f ], (3.4)
k=0
其中 Z b
Ak = lk (x)dx, k = 0, 1, · · · , n.
a
3.1.3 代数精确度
数值求积公式是近似计算积分方法, 为了保证精确性, 我们当然希望求积公式
能对尽可能多的函数准确地成立, 为此我们引入代数精确度的概念.
定义 3.1 一个数值求积公式如能对所有不超过 m 次的多项式准确地成立,
而对某一个 m + 1 次多项式不再准确, 则称该求积公式具有 m 次代数精确度, 简称
为有m 次代数精度.
容易验证, 中矩形公式 (3.2) 和梯形公式 (3.3) 均具有一次代数精度. 进一步,
对于求积公式 (3.4), 当 f (x) 是任意的不超过 n 次的多项式时, 由式 (3.5) 得 Rn [f ] = 0,
于是有:
定理 3.1 形如式 (3.4) 的插值型数值求积公式至少具有 n 次代数精度.
一般地, 欲使某个数值求积公式具有 m 次代数精度, 即该公式能对所有不超过
m 次的多项式准确地成立, 而根据多项式的叠加性, 只要验证它能分别对于 f (x) =
1, x, x2 , · · · , xm 都准确成立即可. 若数值求积公式为
Z b L
X
f (x)dx ≈ Ak f (xk ), (3.6)
a k=0
XL
Ak = b − a,
k=0
L
X 1
Ak xk = (b2 − a2 ),
2 (3.7)
k=0
······
L
X 1
Ak xm (bm+1 − am+1 ).
k =
m+1
k=0
取 xk 作为求积节点, 构造插值型求积公式. 称
n
X (n)
In = (b − a) Ck f (xk ) (3.8)
k=0
引进变换
x = a + th, 0 6 t 6 h,
故 Z Z
n
n Y n
n Y
(n) 1 (t − i)h (−1)n−k
Ck = hdt = (t − i)dt. (3.9)
b−a 0 i=0
(k − i)h nk!(n − k)! 0 i=0
i6=k i6=k
Z
(2) 1 2 4
C1 =− t(t − 2)dt = ,
2 0 6
Z 2
(2) 1 1
C2 = t(t − 1)dt = .
4 0 6
相应的求积公式 · µ ¶ ¸
b−a a+b
S= f (a) + 4f + f (b) (3.10)
6 2
称为辛普森 (Simpson) 公式.
为了便于应用, 把部分 Cotes 系数汇总成为表 3-1.
利用表 3-1, 可以很快写出各种等距节点下的数值求积公式. 例如, n = 4 时的
Newton-Cotes 公式为
b−a
C= [7f (x0 ) + 32f (x1 ) + 12f (x2 ) + 32f (x1 ) + 7f (x4 )] , (3.11)
90
b−a
其中, xk = a+kh (k = 0, 1, 2, 3, 4); h = . 特别地我们称式 (3.11) 为 Cotes 公式.
4
表 3-1 部分 Cotes 系数
(n)
n Ck (k = 0, 1, · · · , n)
1 1
1
2 2
1 4 1
2
6 6 6
1 3 3 1
3
8 8 8 8
7 16 2 16 7
4
90 45 15 45 90
19 25 25 25 25 19
5
288 96 144 144 96 288
41 9 9 34 9 9 41
6
840 35 280 105 280 35 840
751 3577 1323 2989 2989 1323 3577 751
7
17 280 17 280 17 280 17 280 17 280 17 280 17 280 17 280
989 5888 −928 10 496 −4540 10 490 −928 5888 989
8
28 350 28 350 28 350 28 350 28 350 28 350 28 350 28 350 28 350
引进变换 x = a + th, 则有
Z n
nY
Rn [f ] = hn+2 (t − i)dt.
0 i=0
n n
若 n 为偶数, 则 为整数, 再令 t = u + , 进而有
2 2
Z n Y
n ³ ´
2 n
Rn [f ] = hn+2 u + − i du = 0.
n
− i=0 2
2
因为被积函数 n
n ³
Y ´ Y
2
n
H(u) = u+ −j = (u − i)
i=0
2 n
i=− 2
是奇函数. 证毕.
3.2.2 几种低阶求积公式的余项
首先考察梯形公式, 按余项公式 (3.5), 梯形公式 (3.3) 的余项为
Z b 00
f (ξ)
RT [f ] = I − T = (x − a)(x − b)dx.
a 2!
由于 (x − a) (x − b) 在区间 [a, b] 上保号 (非正), 应用积分中值定理, 在区间 (a, b)
内存在一点 η, 使
· 66 · 第3章 数值积分与数值微分
Z b
f 00 (η) f 00 (η)
RT [f ] = (x − a) (x − b)dx = − (x − a)3 , η ∈ (a, b). (3.12)
2 a 12
b−a
将积分区间 [a, b] 进行 n 等分, h = , 等分节点为 xk = a + kh(k = 0, 1, 2, · · · ,
n
n). 在子区间 [xk , xk+1 ] 上采用梯形公式, 则该区间上积分近似值为
h
Tn(k) = [f (xk ) + f (xk+1 )] ,
2
相应的余项为
Z xk+1
(n) h3 00
RT (k) [f ] = f (x)dx − Tk =− f (ηk ), ηk ∈ [xk , xk+1 ].
n
xk 12
因此
Z b n−1
X h
f (x)dx ≈ Tn = [f (xk ) + f (xk+1 )]
a 2
k=0
" n−1
#
h X
= f (a) + 2 f (xk ) + f (b) (3.15)
2
k=1
hh i
n−1
X
Sn = f (xk ) + 4f (xk+ 12 ) + f (xk+1 )
6
k=0
" n−1 n−1
#
h X X
= f (a) + 2 f (xk ) + 4 f (xk+ 12 ) + f (b) , (3.17)
6
k=0 k=0
Z xk+1
h5 (4)
f (x)dx − Sn(k) = − f (ηk ), ηk ∈ [xk , xk+1 ]. (3.18)
xk 2880
故 ¯ µ ¶¯
¯ ¯ Z 1 ¯ kπ ¯¯
Z 1
1
¯ (k) ¯ k ¯
¯f (x)¯ 6 t ¯cos tx + dt 6 tk dt = .
0 2 ¯ 0 k + 1
根据式 (3.16), 为满足误差要求, 只需 n 满足
1 1 1
2
|f 00 (η)| 6 2
× 6 5 × 10−4 ,
12n 12n 3
即 n > 7.45. 取 n = 8, 按求积公式 (3.15)
· µ ¶ µ ¶ µ ¶
1 1 1 1 3
I ≈ T8 = × f (0) + 2f + 2f + 2f
8 2 8 4 8
3.3 龙贝格 (Romberg) 算法 · 69 ·
µ ¶ µ ¶ µ ¶ µ ¶ ¸
1 5 3 7
+ 2f + 2f + 2f + 2f + f (1)
2 8 4 8
=0.945 691 1.
h Xh i
n−1
X n−1
(k)
T2n = Tn,2 = f (xk ) + 2f (xk+ 12 ) + f (xk+1 )
4
k=0 k=0
n−1
X
Tn h
= + f (xk+ 12 ). (3.21)
2 2
k=0
于是
1
I − T2n ≈ (T2n − Tn ) . (3.22)
3
由于积分的精确值未知, 因此无法将 T2n 的值与之比较, 由式 (3.22), 我们可以
将
|T2n − Tn | < ε
例 3.2 利用梯形公式的递推关系计算积分
Z 1
sin x
I= dx,
0 x
3.3 龙贝格 (Romberg) 算法 · 71 ·
使误差不超过 5 × 10−6 .
解:利用递推公式 (3.23) 计算如下:
1
T20 = T1 = [f (0) + f (1)] = 0.920 735 49,
2 µ ¶
T1 1 1
T21 = T2 = + f = 0.939 793 28,
2 2 2
· µ ¶ µ ¶¸
T2 1 1 3
T22 = T4 = + f +f = 0.944 513 52,
2 4 4 4
· µ ¶ µ ¶ µ ¶ µ ¶¸
T4 1 1 3 5 7
T23 = T8 = + f +f +f +f = 0.945 690 86,
2 8 8 8 8 8
······
仿上可得
因为
|T28 − T27 | < 2 × 10−6 ,
故取 Z 1
sin x
dx ≈ T28 = 0.946 082 71.
0 x
3.3.2 Romberg 算法
于是
4T2n − Tn
Sn = , (3.24)
4−1
即通过对 Tn , T2n 适当组合确实能改进数值效果 (代数精度提高了 2 次). 基于这一
思路我们也可以对 Sn , S2n 进一步组合, 由于
(b − a)5 (4)
I − Sn = − f (η1 ), η1 ∈ [a, b] ,
2880n4
(b − a)5 (4)
I − S2n = − f (η2 ), η2 ∈ [a, b] ,
2880(2n)4
同样假设 f (4) (η1 ) ≈ f (4) (η2 ), 则
I − Sn
≈ 24 = 42 .
I − S2n
于是
42 S2n − Sn
I≈ .
42 − 1
容易验证
42 S2n − Sn
Cn = . (3.25)
42 − 1
同样地, 对复化 Cotes 公式进行类似处理, 可得代数精度为 7 次的 Romberg
公式
42 C2n − Cn
Rn = . (3.26)
43 − 1
进一步, 对 Rn , R2n 进行组合可得
42 R2n − Rn 256 1
En = = R2n − Rn . (3.27)
44 − 1 255 255
但由于 Sn , Cn , Rn 都是来自于最基础的复化梯形公式 Tn (本身含一定的截断误差),
256
因舍入误差的逐步积累, 加上 的比值太接近于 1, 故使 En 的组合失去了实用
255
意义.
另外, 由式 (3.24), (3.25) 和 (3.26) 可以看出, Sn , Cn , Rn 的组合形式都建立在
区间等分数成倍变化的基础上, 这就要求复化梯形公式的区间等分数必须按 2k (k =
0, 1, 2, · · · ) 增加. 于是基于最初的 T2k (k = 0, 1, 2, · · · ) 按表 3-2 所示步骤计算:
3.3 龙贝格 (Romberg) 算法 · 73 ·
(k)
为了便于程序设计, 表 3-2 中各近似常常用二维数组 Tm 来表示, 其中, 上标
(k)
k 和下标 m 分别表示 Tm 在表中的行、列序号 (均从 0 开始). 于是所用到的各个
公式可以统一写成便于程序设计的计算格式, 即
b−a
(0)
T0 = [f (a) + f (b)] ,
2
2k−1 µ ¶
b−a X
(k−1)
(k) T0 b−a
T0 = + k f a + (2i − 1) k , k = 1, 2, · · · , (3.28)
2 2 2
k=0
m (k+1) (k)
4 T − T
Tm
(k)
= m−1 m−1
, m = 1, 2, · · · , k = 0, 1, · · · ,
4m − 1
这样可逐行构造出下列二维 T 数表 (表 3-3):
表 3-3 二维 T 数表
(0)
T0
(1) (0)
T0 T1
(2) (1) (0)
T0 T1 T2
(3) (2) (1) (0)
T0 T1 T2 T3
.. .. .. ..
. . . .
要求精确到 5 × 10−8 .
解:按公式 (3.28), 计算结果如表 3-4 所示.
此时 ¯ ¯
¯ (0) (1) ¯
¯T3 − T2 ¯ < 5 × 10−8 ,
故有 Z 1
sin x
dx ≈ 0.946 083 069.
0 x
值得提出的是:
4m (k)
(1) 如式 (3.27)En 组合分析那样, 当 m 较大时, 接近 1, 此时 Tm ≈
4m − 1
(k+1) (k)
Tm . 因此实际运算中, 通常规定 m 6 3, 即算到 Romberg 序列的 {T3 } 为止,
以避免不必要的计算量.
(2) 计算 S1 需要计算到 T2 , 用了 3 个点的函数值, 代数精确度为 3 次; 计算
C1 需计算到 T4 , 用到了 5 个点的函数值, 代数精确度为 5 次; 但计算 R1 需要计算
T8 , 用了 9 个点的函数值, 其代数精确度只有 7 次, 这说明 Romberg 公式已不属于
插值型求积公式, 否则其代数精确度至少应为 8 次.
(3) 每次区间的分半, 即区间的等分数是成倍增长的, 相应的复化梯形的计算
量也将成倍增加, 这是 Romberg 算法在应用中必须注意的问题.
3.4 高斯 (Gauss) 公式
3.4.1 基本概念
数值积分公式
Z b n
X
f (x)dx ≈ Ak f (xk ) (3.29)
a k=0
3.4 高斯 (Gauss) 公式 · 75 ·
解得 A0 = 2, x0 = 0.
故一点 Gauss 公式为 Z 1
f (x)dx ≈ 2f (0), (3.31)
−1
即中矩形公式就是一点 Gauss 公式.
类似地, 设二点 Gauss 公式为
Z 1
f (x)dx ≈ A0 f (x0 ) + A1 f (x1 ),
−1
1
由式 (3.32) 中的第 2, 4 两式得 x20 = x21 , 进而由第 1, 3 两式得 x20 = , 最后可
3
解得
A0 = A1 = 1,
√
3
x0 = −x1 = − .
3
所以二点 Gauss 公式为
Z à √ ! Ã√ !
1
3 3
f (x)dx ≈ f − +f . (3.33)
−1 3 3
定理 3.3 对于插值型求积公式
Z 1 n
X
f (x)dx ≈ Ak f (xk ), (3.34)
−1 k=0
n
Y
其节点 xk (k = 0, 1, · · · , n) 为 Gauss 点的充要条件是:ω(x) = (x − xk ) 与一切
k=0
不超过 n 次的多项式 P (x) 正交, 即
Z 1
ω(x)P (x)dx = 0. (3.35)
−1
由式 (3.35) 得
Z 1 Z 1
f (x)dx = Q2 (x)dx.
−1 −1
又因为
f (xk ) = ω(xk )Q1 (xk ) + Q2 (xk ), k = 0, 1, · · · , n,
所以 Z 1 n
X n
X
Q2 (x)dx = Ak Q2 (xk ) = Ak f (xk ).
−1 k=0 k=0
从而有 Z 1 n
X
f (x)dx = Ak f (xk ).
−1 k=0
于是
Z 1 Z 1
2n+1 [(n + 1)!]2
ω(x)P (x)dx = Pn+1 (x)P (x)dx
−1 [2(n + 1)]! −1
2 Z 1 n
X
2n+1 [(n + 1)!]
= Pn+1 (x) āk Pk (x)dx
[2(n + 1)]! −1 k=0
= 0.
因此
Z 1 n
X
R [f ] = f (x)dx − Ak f (xk )
−1 k=0
Z 1 Z 1
= f (x)dx − H2n+1 (x)dx
−1 −1
Z 1
f (2n+2) (ξ) 2
= ω (x)dx.
−1 (2n + 2)!
3.4.4 稳定性和收敛性
由表 3-5 可以看出, Gauss 点往往是无理的, 这就使数据 f (xk ) 必然有一定误
差, 那么这种误差是否会影响最终结果呢?实际上, 因为 Gauss 求积公式 (3.29) 的
系数具有下列特点:
(1) 因为积分式对函数 f (x) = 1 准确成立, 则
Xn
Ak = b − a.
k=0
记 ε = max |εk |, 则
06k6n
而 " #
n
X n
X n
Y
2
Āk f (x̄k ) = Āk (x̄k − x̄i ) = 0.
k=0 k=0 i=0
3.4.5 带权 Gauss 公式
对于积分 Z b
I= ρ(x)f (x)dx,
a
(n!)2
Ak = − , k = 0, 1, · · · , n.
L0n+1 (xk )Ln (xk )
其余项为
2
[(n + 1)!] (2n+2)
R[f ] = f (η), 0 < η < +∞.
(2n + 2)!
一般地,
Z +∞ n
X
f (x)dx ≈ Ak exk f (xk ).
0 k=0
2) 高斯–埃尔米特公式
Z +∞ n
X
2
e−x f (x)dx ≈ Ak f (xk ), (3.40)
−∞ k=0
求积公式余项为
√
(n + 1)! π (2n+2)
R [f ] = n+1 f (η), −∞ < η < +∞.
2 (2n + 2)!
类似地,
Z +∞ n
X 2
f (x)dx ≈ Ak exk f (xk ).
−∞ k=0
3) 高斯–切比雪夫公式
Z 1 n µ ¶
f (x) π X 2k + 1
√ dx ≈ f cos π , (3.41)
−1 1 − x2 n+1 2n + 2
k=0
其余项表达式为
π
R [f ] = f (2n+2) (η), −1 < η < +1.
2(2n+1) (2n + 2)!
解: 作变换替换 x = t + 2, 则积分为
Z 1 Z 1
dt dx
I= = .
−1 t + 2 −1 x +2
· 82 · 第3章 数值积分与数值微分
利用 Gauss-Legendre 求积公式得
8 1 5 1 1
I≈ × + × √ + √
9 2+0 9 15 15
2− 2+
5 5
4 5 20
= + × = 1.098 039 2.
9 9 17
3.5 数 值 微 分
对于确定的函数表达式 f (x), 函数的导数值总是可以按各种求导的公式和规
则或是直接通过导数定义的极限积分求得, 但当函数是以数据表的形式给出时, 微
分学中的方法就不能使用. 对此, 下面介绍两个基本的数值求导方法.
3.5.1 插值型求导公式
设已知 f (x) 在节点 xk (k = 0, 1, · · · , n) 的函数值为 f (x0 ), f (x1 ), · · · , f (xn ), 运
用插值原理, 可以作 n 次插值多项式 Pn (x) 作为 f (x) 的近似, 由于多项式的求导
比较容易, 进而我们可取 Pn0 (x) 的值作为 f 0 (x) 的近似值, 这样建立的数值公式
f 0 (x) ≈ Pn0 (x) (3.42)
1) 两点公式
设已给出两个节点 x0 , x1 处的函数值 f (x0 ), f (x1 ), 作线性插值多项式
x − x1 x − x0
P1 (x) = f (x0 ) + f (x1 ).
x0 − x1 x1 − x0
记 h = x1 − x0 , 并对上式两端求导, 则
1
P10 (x) = [−f (x0 ) + f (x1 )] .
h
于是, 有下列求导公式:
1
P10 (x0 ) = [f (x1 ) − f (x0 )] ,
h
1
P10 (x1 ) =
[f (x1 ) − f (x0 )] .
h
而利用余项公式 (3.43), 带余项的两点公式是
1 h
f 0 (x0 ) = [f (x1 ) − f (x0 )] − f 00 (ξ1 ),
h 2
1 h
f 0 (x1 ) = [f (x1 ) − f (x0 )] + f 00 (ξ2 ). (3.44)
h 2
2) 三点公式
已给出三个节点 x0 , x1 = x0 + h, x2 = x0 + 2h 处的函数值 f (x0 ), f (x1 ), f (x2 ),
作二次插值多项式
(x − x1 )(x − x2 ) (x − x0 )(x − x2 )
P2 (x) = f (x0 ) + f (x1 )
(x0 − x1 )(x0 − x2 ) (x1 − x0 )(x1 − x2 )
(x − x0 )(x − x1 )
+ f (x2 ).
(x2 − x0 )(x2 − x1 )
令 x = x0 + h, 则上式可表为
1 1
P0 (x0 + th) = (t − 1)(t − 2)f (x0 ) − t(t − 2)f (x2 ) + t(t − 1)f (x0 ).
2 2
两端关于 t 求导, 得
1
P20 (x0 + th) = [(2t − 3)f (x0 ) − (4t − 4)f (x1 ) + (2t − 1)f (x2 )] , (3.45)
2h
其中, “ 0 ” 表示对变量 x 的求导. 在式 (3.45) 中分别取 t = 0, 1, 2 则得三种三点求
导公式
1
P20 (x0 ) = [−3f (x0 ) + 4f (x1 ) − f (x2 )] ,
2h
1
P20 (x1 ) = [−f (x0 ) + f (x2 )] ,
2h
· 84 · 第3章 数值积分与数值微分
1
P20 (x2 ) = [f (x0 ) − 4f (x1 ) + 3f (x2 )] .
2h
相应地, 带余项的三点求导公式如下:
1 h2
f 0 (x0 ) = [−3f (x0 ) + 4f (x1 ) − f (x2 )] + f 000 (ξ1 ),
2h 3
2
1 h
f 0 (x1 ) = [−f (x0 ) + f (x2 )] − f 000 (ξ2 ), (3.46)
2h 6
1 h2
f 0 (x2 ) = [f (x0 ) − 4f (x1 ) + 3f (x2 )] + f 000 (ξ3 ).
2h 3
用插值多项式 Pn (x) 作为 f (x) 的近似函数, 还可以建立高阶数值微分公式:
f (k) (x) ≈ Pm
(k)
(x), k = 1, 2, · · · , m.
1 h2
f 00 (xi ) = 2
[f (x0 ) − 2f (x1 ) + f (x2 )] − f (4) (ξi ), i = 0, 1, 2. (3.47)
h 12
3) 实用的五点公式
设已给出函数 f (x) 在 5 个节点 xk = x0 + kh(k = 0, 1, 2, 3, 4) 处的函数值
f (xk )(k = 0, 1, 2, 3, 4). 重复类似手段, 我们可导出下列五点公式:
1
m0 = [−25f (x0 ) + 48f (x1 ) − 36f (x2 ) + 16f (x3 ) − 3f (x4 )] ,
12h
1
m1 = [−3f (x0 ) − 10f (x1 ) + 18f (x2 ) − 6f (x3 ) + f (x4 )] ,
12h
1
m2 = [f (x0 ) − 8f (x1 ) + 8f (x3 ) − f (x4 )] , (3.48)
12h
1
m3 = [−f (x0 ) + 6f (x1 ) − 18f (x2 ) + 10f (x3 ) + 3f (x4 )] ,
12h
1
m4 = [3f (x0 ) − 16f (x1 ) + 36f (x2 ) − 48f (x3 ) + 25f (x4 )] ,
12h
其中, mk 表示一阶导数 f 0 (xk ) 的近似值. 按式 (3.43) 不难推导出公式的余项 (略).
再记 Mk 为二阶导数 f 00 (xk ) 的近似值, 则二阶五点公式如下:
3.5 数值微分 · 85 ·
1
M0 = [35f (x0 ) − 104f (x1 ) + 114f (x2 ) − 56f (x3 ) + 11f (x4 )] ,
12h2
1
M1 = [11f (x0 ) − 20f (x1 ) + 6f (x2 ) + 4f (x3 ) − f (x4 )] ,
12h2
1
M2 = [−f (x0 ) + 16f (x1 ) − 30f (x2 ) + 16f (x3 ) − f (x4 )] , (3.49)
12h2
1
M3 = [−f (x0 ) + 4f (x1 ) + 6f (x2 ) − 20f (x3 ) + 11f (x4 )] ,
12h2
1
M4 = [11f (x0 ) − 56f (x1 ) + 114f (x2 ) − 104f (x3 ) + 35f (x4 )] .
12h2
对于给定的数据表, 用五点公式求节点上的导数值往往能取得满意的结果. 5
个相邻节点的选法一般是在所求导数的该节点两侧各取两个邻近的节点, 如一侧的
节点数不足两个, 则用另一侧的节点来补足.
√
例 3.5 利用 f (x) = x 的一张数据表 (表 3-6 左部), 按五点公式求节点上
的导数值.
解: 结果如表 3-6 所示.
表 3-6 五点公式计算结果比较
xi f (xi ) mi f 0 (xi ) Mi × 103 f 00 (xi ) × 103
100 10.000 000 0.050 000 0.050 000 −0.250 92 −0.250 00
101 10.049 875 0.049 751 0.049 752 −0.245 92 −0.246 30
102 10.099 504 0.049 507 0.049 507 −0.241 92 −0.242 68
103 10.148 891 0.049 267 0.049 267 −0.238 92 −0.239 16
104 10.198 039 0.049 029 0.049 029 −0.236 92 −0.235 72
105 10.246 950 0.048 793 0.048 795 −0.235 92 −0.232 36
3.5.2 三次样条插值求导
如果用三次样条插值函数 S (x) 作为 f (x) 的近似函数, 不但可以使函数值非
常接近, 而且还可以使导数值非常接近. 因为在一定条件 [如 f (x) 具有连续的四阶
导数] 下, 由 1.6 节定理 1.3 知, 当 h = max hi → 0 时, 则
16i6n
¯ ¯
¯ (m) ¯
¯f (x) − S (m) (x)¯ = O(h(4−m) ), m = 0, 1, 2, 3,
习 题 3
Z b
1. 如果 f 00 (x) > 0, 证明:用梯形公式计算积分 f (x)dx 所得结果比准确值大, 并说明
a
几何意义.
2. 求节点 x1 , x2 , x3 以及待定系数 C, 使求积公式
Z 1
f (x)dx ≈ C [f (x1 ) + f (x2 ) + f (x3 )]
−1
具有 3 次代数精度.
3. 确定下列公式中的参数, 使其代数精度尽量高, 并说明所得公式最高代数精度的次数.
Z h
(1) f (x)dx ≈ A−1 f (−h) + A0 f (x) + A1 f (h).
−h
Z 2h
(2) f (x)dx ≈ A−1 f (−h) + A0 f (0) + A1 f (h).
−2h
Z 1
1
(3) f (x)dx ≈ [f (−1) + 2f (x1 ) +3f (x2 )].
−1 3
Z h
h £ ¤
(4) f (x)dx ≈ [f (0) + f (h)] + Ah2 f 0 (0) − f 0 (h) .
0 2
4. 已知数据表
Z 2.6
试用全部数据计算 f (x)dx 的近似值.
1.8
习 题 3 · 87 ·
5. 利用 Simpson 公式计算积分
Z 1
I= ex dx,
0
并估计误差.
Z b
6. 利用复化梯形公式计算 f (x)dx, 应该将区间多少等分, 才能保证误差不超过 ε(计
a
算过程不计舍入误差)?
7. 利用复化 Simpson 公式计算:
Z 6
x
(1) 2
dx (区间三等分).
0 4+x
Z 9
1
(2) dx (区间四等分).
1 x
8. 利用 Romberg 算法计算积分.
Z 1
4
(1) dx.
0 1 + x2
Z 1
2
(2) √ e−x dx.
π 0
9. 利用 Gauss-Legendre 求积公式计算积分
Z 4
1
I= 2
dx,
−4 1 + x
π2
并与真值 I = 比较.
2
Z b
12. 证明:复化梯形公式和复化 Simpson 公式当 n → ∞ 时收敛到积分 f (x)dx.
a
第4章 常微分方程数值解法
4.1 数值解法的基本思想和途径
4.1.1 初值问题
科学和工程领域中常涉及常微分方程的定解问题的求解. 而这类问题中最基
本、最简单的形式就是一阶微分方程的初值问题:
(
y 0 = f (x, y),
(4.1)
y(a) = y0 .
我们知道, 只要函数 f (x, y) 适当光滑, 譬如关于 y 满足利普希茨 (Lipschitz) 条件:
|f (x, y) − f (x, y)| 6 L |y − y| ,
那么理论上就可以保证初值问题式 (4.1) 的解 y = y (x) 存在且唯一, 但理论上存
在的唯一解并不总能用解析形式表示出来. 尽管我们已经学习了各种解析求解方
法, 但它们仅适用于求解一些特殊类型的方程, 而从实际问题中抽象出来的微分方
程主要依赖于数值解法.
所谓数值解法就是要寻找解 y = y (x) 在一系列离散点:
x1 < x2 < · · · < xk < xk+1 < · · ·
上的近似值 y1 , y2 , · · · , yk , yk+1 , · · · . 为便于叙述, 把相邻两个节点的间距 h = xk+1 −
xk 称为步长, 并且如果不作特别说明, 我们总假定 h 为定数. 相应地, 这时节点可
表示为 xk = a + kh (k = 0, 1, · · · ).
实施数值解法的手段是将初值问题式 (4.1) 按一定规则转化成关于近似值 yk
计算的递推关系式 ——差分方程, 并称这一转化过程为离散化过程, 即
离散化
初值问题式 (4.1)−→ 差分方程.
数值解法的主要特点是:采用 “步进方式”, 按节点次序步步向前推进, 即按
y0 → y1 → y2 → · · · → yk → yk+1 → · · ·
进行递推.
4.1.2 离散化方法
1. 用差商代替导数的方法
这样右端积分可用数值积分方法计算其近似值.
(1) 积分用 (左) 矩形公式计算, 得
yk+1 = yk + hf (xk , yk ), k = 0, 1, 2, · · · ,
3. 泰勒展开法
1) 单步法
为了求得后一点 xk+1 上的数值解 yk+1 , 只要知道前面一点 xk 的数值解 yk
就可以了. 其特征有:①差分方程中关于 y 的下标最大差为 1; ②是自开始的方法,
即 y1 → y2 → y3 → · · · , 如 Euler 公式 (4.2)、梯形公式 (4.5) 等.
4.1 数值解法的基本思想和途径 · 91 ·
2) 多步法
计算 yk+1 时, 要用到前面多点的数值解信息, 比如要用到前面 m(> 1) 点的信
息, 此时差分方程中关于 y 的下标最大差为 m, 这就称为 m 步法. 例如, 中心 Euler
公式是两步法.
2. 显格式与隐格式
yk+1 = yk + hf (xk , yk ) , k = 0, 1, 2, · · · ,
图 4-1 欧拉公式的几何意义
由改进 Euler 公式
ȳk+1 = yk + hf (xk , yk ),
即
yk+1 = yk + c1 K1 + c2 K2 ,
K1 = hf (xk , yk ),
K = hf (x + λ h, y + µ hf (x , y )),
2 k 1 k 1 k k
将上式代入式 (4.13) 得
1 1
若取 c2 = , 则 c1 = , λ1 = µ1 = 1, 于是式 (4.13) 就可写为
2 2
h
yk+1 = yk + [f (xk , yk ) + f (xk + h, yk + hf (xk , yk ))] ,
2
这就是改进 Euler 公式.
1
取 c2 = 1, 则 c1 = 0, λ1 = µ1 = , 于是式 (4.13) 成为
2
µ ¶
h h
yk+1 = yk + hf xk + , yk + f (xk , yk ) ,
2 2
这就是变形 Euler 公式.
由式 (4.14) 可以看出, 满足式 (4.15) 的参数 c1 , c2 , λ1 , µ1 所产生的差分格式,
¡ ¢
其局部截断误差都为 O h3 , 即都是二阶方法, 统一称为二阶 Runge-Kutta 方法.
4.2.2 四阶 Runge-Kutta 方法
类似地, 我们可以更多地对 f (x, y) 的不同点的值进行组合. 若设差分格式为
yk+1 = yk + c1 K1 + c2 K2 + c3 K3 + c4 K4 ,
K1 = hf (xk , yk ),
K2 = hf (xk + λ1 h, yk + µ11 K1 ), (4.16)
K3 = hf (xk + λ2 h, yk + µ21 K1 + µ22 K2 ),
K = hf (x + λ h, y + µ K + µ K + µ K ),
4 k 3 k 31 1 32 2 33 3
即 · h ¸ h
(2) (2) (h)
15 y(xk+1 ) − yk+1 ≈ yk+1 − yk+1 ,
从而 · h ¸
h
( 2 ≈ ) 1 (2) (h)
y(xk+1 ) − yk+1 yk+1 − yk+1 .
15
¯ h ¯
¯ ( ) (h) ¯¯
¯ 2
记 ∆ = ¯yk+1 − yk+1 ¯, 这样我们可以通过检查步长折半前后两次计算所得的
4.3 单步法的收敛性和稳定性 · 97 ·
∆ 值确定所选步长是否合适.
具体运用时, 将分以下两种情况处理对于给定的精确要求 ε > 0:
(1) 如果 ∆ > ε, 则反复折半进行计算, 直到 ∆ < ε 为止, 此时取最终计算中的
步长为所需的步长.
(2) 如果 ∆ < ε, 则反复将步长加倍, 直到 ∆ > ε 为止, 此时前一次计算中的步
长就是所选择的步长.
这种通过加倍或折半处理步长的手段称为变步长方法.
4.3 单步法的收敛性和稳定性
4.3.1 单步法的收敛性
用差分方程的解 yk 作为初值问题的解 y(xk ) 的近似是数值解法的基本思想.
那么, 当所取步长 h 足够小时, 差分方程的解 yk 也能充分接近 y(xk ) 吗?
当然, 对于 xk = x0 + th, 这里的讨论不是对固定的 k, 否则当 h → 0 时,
xk → x0 , 显然这样的讨论无任何实际意义. 对此, 我们给出:
定义 4.1 若一种数值方法对任意固定的点 xk = x0 + th, 当 h → 0(同时
k → ∞) 时, 有 yk → y(xk ) 成立, 则该数值方法是收敛的.
先考察简单的初值问题 (
y 0 = λy,
(4.18)
y(0) = y0 ,
其准确解为 y = y0 eλx .
对式 (4.18), 若用 Euler 公式进行计算, 则
于是
yk = y0 (1 + λh)k , k = 1, 2, · · · .
由于 x0 = 0, 则 xk = kh, 故有
· ¸λxk
1
k
yk = y0 (1 + λh) = y0 (1 + λh) λh ,
而
1
(1 + λh) λh → e, h → 0,
所以, 当 k → ∞ 时, 有
yk → y0 eλxk = y(xk ).
因此差分方程的解 yk (h → 0) 确实能收敛到原初值问题的解.
· 98 · 第4章 常微分方程数值解法
利用假设条件式 (4.20) 得
从而
据此不等式反复递推, 整理可得
k Chp h k
i
|ek | 6 (1 + hLϕ ) |e0 | + (1 + hLϕ ) − 1 .
Lϕ
若当 xk − x0 = kh 6 M 时, 则有
(1 + hLϕ )k 6 ek(hLϕ ) 6 eM Lϕ .
所以
Chp M Lϕ
|ek | 6 |e0 |eM Lϕ + (e − 1),
Lϕ
即当初值准确时, 即 e0 = 0, 则式 (4.21) 成立. 证毕.
根据这一结论, 判断单步法式 (4.19) 的收敛性, 就归结为证其增量函数能否满
足 Lipschitz 条件式 (4.20).
对于 Euler 方法, 由于增量函数就是 f (x, y), 故当 f (x, y) 关于 y 满足 Lipschitz
条件时它是收敛的.
类似地, 在一定条件下, 改进 Euler 法以及 Runge-Kutta 方程也可分别进行
验证.
4.3.2 单步法的稳定性
定义 4.2 若一种数值方法在某节点值 yk 上的扰动为 δ, 而以后各节点的值
ym (m > k) 上产生的偏差均不超过 δ, 则称该方法是稳定的.
稳定性是比较复杂的问题, 这里仅考察下列简单的模型方程:
y 0 = λy.
基于对微分公式本身的稳定性, 假设 λ < 0.
1) 对于 Euler 公式的稳定性
对模型方程, 其 Euler 公式为
即
εk+1 = (1 + hλ)εk .
若要方程稳定, 则应有
· 100 · 第4章 常微分方程数值解法
|εk+1 | 6 |εk | ,
则应使
|1 + hλ| 6 1.
yk+1 = yk + hλyk+1 ,
则有
1
yk+1 = yk .
1 − λh
类似地, 可得
1
εk+1 = εk .
1 − λh
由于 λ < 0, 故恒有 ¯ ¯
¯ 1 ¯
¯ ¯
¯ 1 − λh ¯ 6 1,
即恒有
|εk+1 | 6 |εk |.
4.4 线性多步法
上面我们通过对 f (x, y) 不同点的数值进行组合得到了高阶的公式 (Runge-
Kutta 公式), 但每一步都要对 f (x, y) 的不同点的函数值分别进行计算. 而在逐步
推进的求解过程中, 计算 yk+1 之前已经求出了一系列的近似值 y0 , y1 , · · · , yk , 并且
通常也已经对 f (x0 , y0 ), f (x1 , y1 ),· · · , f (xk , yk ) 进行过计算, 若能充分利用这些已
经计算过的 f (x, y) 的函数值, 即对这些已有的 f (x, y) 的函数值进行适当线性组合,
同样可期望得到阶数较高的差分格式, 这就是构造所谓多步法的基本思想.
一般的 m 步法公式具体形式如下:
4.4 线性多步法 · 101 ·
其中, ∆j 表示 j 阶向前差分; 而
j (−t)!
C−t = .
j!(−t − j)!
Z xk+1 Z xk+1
将 pr (x)dx 作为 f (x, y(x))dx 的近似值, 即得下列 Adams 显式公式:
xk xk
Z xk+1 Z 1 Xr
j
yk+1 = yk + pr (x)dx = yk + h (−1)j C−t ∆j fk−j dt
xk 0 j=0
r
X
= yk + h bj ∆j fk−j , (4.26)
j=0
其中
· 102 · 第4章 常微分方程数值解法
Z 1
j
bj = (−1)j C−t dt, j = 0, 1, 2, · · · , r.
0
分别计算可得表 4-4.
为便于实际使用, 利用差分展开式
j
X
∆j fk−j = (−1)i Cji fk−i ,
i=0
r = 0 时, 即为 Euler 公式.
r = 3 时, 则相应的差分格式为
h
yk+1 = yk +
(55fk − 59fk−1 + 37fk−2 − 9fk−3 ) . (4.28)
24
Z xk+1 Z xk+1
由于式 (4.27) 最初来自于 pr (x)dx 作为 f (x, y(x))dx 的近似值, 因此
xk xk
Z 1
f (r+1) (ξ)
= (th)[(t + 1)h] · · · [(t + r)h]hdt
0 (r + 1)!
Z 1
hr+2
= f (r+1) (ξ)t(t + 1) · · · (t + r)dt
(r + 1)! 0
= O(hr+2 ),
其中 Z 0
j
b̃j = (−1)j C−t dt, j = 0, 1, · · · .
−1
它的具体数值见表 4-6.
T = O(hr+2 ),
4.5 一阶方程组与高阶方程组的数值解法
4.5.1 一阶方程组
为了便于说明, 以两个方程为例, 考察初值问题
(
y 0 = f (x, y(x), z(x))
, y(a) = y0 , z(a) = z0 . (4.33)
z 0 = g(x, y(x), z(x))
初值问题式 (4.33) 的 Euler 公式为
yk+1 = yk + hf (xk , yk , zk ) = yk + hfk ,
(4.34)
zk+1 = zk + hg(xk , yk , zk ) = zk + hgk .
引进向量记号
à ! à ! à ! à !
y f yk fk
Y = , F = , Yk = , Fk = ,
z g zk gk
则初值问题式 (4.33) 可写成
(
Y 0 = F (x, Y ),
(4.35)
Y (a) = Y0 .
4.5.2 化高阶方程为一阶方程组
对于高阶微分方程的初值问题, 原则上总可以归结为一阶微分方程组进行求
解. 例如, 考察下列 n 阶微分方程:
y (n) = f (x, y, y 0 , · · · , y (n−1) ), (4.36)
初始条件为
(n−1)
y(a) = y0 , y 0 (a) = y00 , ··· , y (n−1) (a) = y0 . (4.37)
只要引进新的变量
y1 = y, y2 = y 0 , ··· , yn = y (n−1) ,
相应的初始化条件为
(n−1)
y1 (a) = y0 , y2 (a) = y00 , ··· , yn (a) = y0 . (4.39)
4.6 边值问题的差分解法
许多的数学物理问题可抽象为二阶常微分边值问题:
00 0
y + p(x)y + q(x)y = f (x),
y(a) = α, a < x < b. (4.40)
y(b) = β,
利用差商代替导数的思想, 取
4.6 边值问题的差分解法 · 107 ·
整理可得关于特定的节点近似值 yk (k = 1, 2, · · · , n − 1) 构成的线性方程组
AY = b, (4.42)
其中
−2 − 10−2 1 y1 0.001
1 −2 − 10−2 1 y2 0.002
.. .. .. .. ..
. . . .= .
1 −2 − 10−2 1 y8 0.008
1 −2 − 10−2 y9 −0.991
表 4-9 差分方法计算结果与准确值比较
xk yk y(xk )
0.1 0.070 49 0.070 47
0.2 0.142 68 0.142 64
0.3 0.218 30 0.218 24
0.4 0.299 11 0.299 03
0.5 0.386 90 0.386 82
0.6 0.483 57 0.483 48
0.7 0.591 07 0.590 99
0.8 0.711 48 0.711 41
0.9 0.847 00 0.846 96
习 题 4
1. 对于初值问题 (
y 0 = ax + b,
y(0) = 0,
1 2
分别导出 Euler 公式和改进 Euler 公式的近似解答式, 并与准确解 y = ax + bx 相比较.
2
2. 用 Euler 公式求初值问题
(
y 0 = x + y,
0 6 x 6 1,
y(0) = 1,
的局部截断误差表达式, 并说明方法的阶.
4. 用改进 Euler 公式计算积分 Z x 2
et dt
0
5. 用梯形公式解初值问题式 (
y 0 + y = 0,
y(0) = 1,
证明其近似解为 µ ¶k
2−h
yk = , k = 1, 2, · · · ,
2+h
并证明当 h → 0 时, 它收敛于原初值问题式的准确解 e−x .
6. 用标准的四阶 Runge-Kutta 公式求解下列初值问题式 (取步长 h = 0.2, 计算 3 步):
(
y 0 = y + x,
(1)
y(0) = 1.
y 0 = y − 2x ,
(2) y
y(0) = 1.
ln x2 − 4x − xex − 1 = 0 (超越方程).
一方面由于非线性方程的求解比较困难, 另一方面在求解这类实际问题时, 人
们只需要获得满足一定精度的近似解就可以了, 所以研究求非线性方程近似解的数
值方法具有重要的现实意义.
绪论中介绍的二分法就是一种常用的求解上述非线性方程近似解的数值方法.
但该方法具有收敛速度慢、不能求偶数重根等不足. 本章将重点介绍求解非线性方
程近似解的基本理论和常用的数值方法.
5.1 迭 代 法
5.1.1 简单迭代法
考虑如下非线性方程:
f (x) = 0, (5.1)
其中, f (x) ∈ C [a, b], 且 f (x) 在 [a, b] 上存在实根. 若方程 (5.1) 可化为形如方程
(5.2) 的等价的不动点方程
x = ϕ(x), (5.2)
据此, 可以构造如下公式:
xk+1 = ϕ(xk ), k = 0, 1, 2, · · · . (5.3)
lim xk+1 = x∗ ,
k→∞
即
x∗ = ϕ(x∗ ).
进而
f (x∗ ) = 0.
当迭代达到一定次数时, 例如算到第 n 步得 xn , 则可以把 xn 作为方程根 x∗ 的近
似值. 一般我们称式 (5.3) 为求解非线性方程 (5.1) 的根 x∗ 的迭代格式, {xk } 称为
迭代序列, x0 为迭代初值, ϕ(x) 为迭代函数. 相应地, 上述求根方法称为简单迭代
法, 也称为逐次逼近法或Picard 迭代法. 且若迭代序列 {xk } 收敛到方程的根, 我
们称之为简单迭代法收敛或迭代格式收敛, 反之, 若迭代序列不收敛, 我们称迭代
格式发散.
现在的问题是:由方程得到的迭代格式是否一定收敛, 是否收敛于方程的根,
以及如何判断收敛性?我们看下面的例子.
例 5.1 求方程 x3 − x − 1 = 0 在区间 (1, 1.5) 上的一个根.
√ √
解:(1) 将方程化为等价方程 x = 3 x + 1, 即令迭代函数 ϕ (x) = 3 x + 1, 于是
可得如下迭代格式:
√
xk+1 = 3 xk + 1, k = 0, 1, 2, · · · .
以 x0 = 1 为初值, 可得如下近似解序列 (表 5-1):
√
表 5-1 迭代公式 xk+1 = 3
xk + 1 的近似解序列
迭代次数 1 2 3 4 5 ···
近似解 1.259 92 1.312 29 1.322 35 1.326 48 1.324 71 ···
看来序列是发散的.
由例 5.1 中的 (1) 和 (2) 两种解法, 我们不难发现同一个方程得到的不同迭代
格式, 有的收敛, 有的发散. 那么, 迭代格式要满足什么条件才能使迭代格式收敛
呢?这正是我们下面要讨论的问题.
5.1.2 收敛性问题
g(a) = a − ϕ(a) 6 0,
g(b) = b − ϕ(b) > 0.
g(x∗ ) = 0,
即
x∗ = ϕ(x∗ ) 或 f (x∗ ) = 0.
存在性得证.
再证唯一性. 用反证法, 设还有一根 x̃∗ , 使 x̃∗ = ϕ (x̃∗ ), 由微分中值定理知
|x∗ − x̃∗ | = |ϕ (x∗ ) − ϕ (x̃∗ )| = |ϕ0 (η)| · |x∗ − x̃∗ | 6 L |x∗ − x̃∗ | < |x∗ − x̃∗ | ,
从而
lim xk = x∗ ,
k→+∞
若 x1 ∈ [a, b], 则
收敛于方程的根 x∗ .
(2) 由已知得 ϕ(x) = x3 − 1, 显然 |ϕ0 (x)| = 3x2 > 3 > 1, 由定理 5.2 知, 迭代格
式发散.
注:(1) 从上面的例题可以看出, 要证明一个简单迭代法收敛, 只要证明简单迭
代法的迭代函数满足定理 5.1 中的条件即可.
(2) 但是如果要证明一个迭代法发散, 只是由迭代函数不满足定理 5.1 还不足
以说明迭代法是发散的, 还需要另外用定理 5.2 证明.
(3) 定理 5.1 中的条件 (2) 可以用如下条件代替:
· 114 · 第5章 非线性方程求根
图 5-2 迭代格式发散的情况
5.1 迭 代 法 · 115 ·
此外, 对于 ∀x ∈ ∆, 因为
故总有 ϕ(x) ∈ ∆.
于是由定理 5-1 得迭代序列 xk+1 = ϕ(xk ) 对所有初值 x0 ∈ ∆ 均收敛.
在实际应用中, 往往希望实现对迭代过程中得到的近似解 xk 进行估计, 以便
明确迭代过程终止的时刻. 为此, 我们给出如下的误差估计方法.
定理 5.4 在定理 5.1 的条件下, 有如下误差估计式:
L
(1) |x∗ − xk | 6 |xk − xk−1 |, k = 1, 2, · · · . (5.5)
1−L
Lk
(2) |x∗ − xk | 6 |x1 − x0 |, k = 1, 2, · · · . (5.6)
1−L
证明: (1) 证明公式 (5.5):
由定理 5.1 的条件 (2), ∃ηk 介于 xk 与 xk−1 之间, 使
|xk+1 − xk | = |ϕ(xk ) − ϕ(xk−1 )| = |ϕ0 (ηk )| · |xk − xk−1 | 6 L |xk − xk−1 | , (5.7)
所以
6 L |xk − x∗ | + |xk+1 − xk | .
将右边第一项移至左边, 有
1 L
|xk − x∗ | 6 |xk+1 − xk | 6 |xk − xk−1 | , k = 1, 2, · · · . (5.8)
1−L 1−L
(2) 证明公式 (5.6):
由式 (5.7) 和 (5.8) 知
L L2 Lk
|xk − x∗ | 6 |xk − xk−1 | 6 |xk−1 − xk−2 | 6 · · · 6 |x1 − x0 | ,
1−L 1−L 1−L
k = 1, 2, · · · .
µ ¶
1 9
ϕ(x) = x+ ,
2 x
µ ¶¯
0 ∗ 1 9 ¯¯
ϕ (x ) = 1− 2 ¯ = 0,
2 x x=3
ϕ00 (x∗ ) 6= 0.
故 p = 2, 即迭代格式
µ ¶
1 9
xk+1 = xk + , k = 0, 1, 2, · · · ,
2 xk
平方收敛, 实际上, 经计算所得近似解序列如表 5-3 所示.
2. 加速方法
(1 + c) x = (1 + c) ϕ (x) , c 6= −1.
若令
Φ 0 (x∗ ) = {ϕ(x) + c[ϕ(x) − x]}0 |x=x∗ = 0,
则
ϕ0 (x∗ )
c= ,
1 − ϕ0 (x∗ )
即
ϕ0 (x∗ )
x = Φ(x) = ϕ(x) + [ϕ(x) − x].
1 − ϕ0 (x∗ )
5.2 牛顿 (Newton) 迭代法 · 119 ·
因为 Φ 0 (x∗ ) = 0, 故迭代格式
1
xk+1 = [ϕ(xk ) − ϕ0 (x∗ )xk ] (5.9)
1 − ϕ0 (x∗ )
至少平方收敛.
然而, 实际计算时, 由于式 (5.9) 中的 x∗ 未知, 故通常用 x∗ 的近似值代替, 例
如, 用 xk0 代替 x∗ , 可得到如下迭代格式:
1
xk+1 = [ϕ (xk ) − Lxk ] , (5.10)
1−L
其中, L = ϕ0 (xk0 ). 值得注意的是:作这样的处理后迭代速度将可能不是平方收
敛了.
√
例 5.4 求 x = 3 x + 1 在区间 [1, 1.5] 上的一个根.
√
解:取 xk0 = 1.3, 则由 ϕ(x) = 3 x + 1 得 L = ϕ0 (xk0 ) ≈ 0.19, 得迭代格式
1 ¡√ 3
¢
xk+1 = xk + 1 − 0.19xk .
0.81
经计算得表 5-4.
则构造新的迭代法:
xn g(g(xn )) − g 2 (xn )
xn+1 = , n = 0, 1, 2, · · · . (5.12)
g(g(xn )) − 2g(xn ) + xn
该方法能够将线性收敛的迭代法格式 (5.11) 的收敛的速度变为平方收敛, p 阶收敛
的迭代法变为 2p − 1 阶收敛, 甚至不收敛的迭代格式能变为收敛的. 读者可完成习
题 5 第 3 题.
构造迭代法格式是一项具有技巧性的工作, 上一节我们主要立足于建立与原方
程 f (x) = 0 等价的不动点方程 x = ϕ (x), 从而得到迭代格式 xk+1 = ϕ (xk ), 但构
· 120 · 第5章 非线性方程求根
f (x1 )
x2 = x1 − .
f 0 (x1 )
如此继续下去, 在 xk 处有近似方程
图 5-3 Newton 法
5.2.2 局部收敛性
f (x) f (x)f 00 (x)
对于 Newton 迭代法, 其迭代函数为 ϕ(x) = x− 0
, 从而 ϕ0 (x) = .
f (x) [f 0 (x)]2
当 x∗ 是 f (x) 的单根时, 即有 f (x∗ ) = 0, f 0 (x∗ ) 6= 0, 则由上式知 ϕ0 (x∗ ) = 0, 从而
由定理 5.5 不难判定:当 x∗ 是方程的单根时, Newton 法具有局部平方收敛速度.
例 5.5 设 c > 0, 试用 Newton 法解二次方程 x2 − c = 0, 从而导出不用开方
√
而直接计算 c 的算法.
解:令原方程为 f (x) = x2 − c = 0, 则 f (xk ) = x2k − c, f 0 (xk ) = 2xk , 于是求
√
c 的 Newton 法迭代格式为
x2k − c
xk+1 = xk − , k = 0, 1, · · · ,
2xk
即 µ ¶
1 c
xk+1 = xk + , k = 0, 1, · · · .
2 xk
与例 5.3 比较, 即为 c = 9 的情形. 我们在例 5.3 中已经发现, 它具有非常快的收敛
速度.
以上我们假设 x∗ 是 f (x) = 0 的单根, 当 x∗ 是 m(> 2) 重根时, 即
f (x) = (x − x∗ )m g(x),
其中, g(x∗ ) 6= 0. 则可以证明, 下列迭代格式至少具有二阶收敛速度:
f (xk )
xk+1 = xk − m , k = 0, 1, · · · .
f 0 (xk )
关于至少二阶收敛的证明留给读者 (习题 5 第 6 题).
由于 Newton 法的局部收敛性, 它对初值要求较高. 只有初值 x0 选得充分靠
∗
近 x , 才能保证序列收敛. 为了保证非局部收敛, 必须再增加一些条件. 我们有:
· 122 · 第5章 非线性方程求根
5.3 弦 截 法
5.3.1 单点弦截法
Newton 法的一个不足之处是需要计算导数值 f 0 (xk ), 而当 f (x) 比较复杂时
计算起来就比较麻烦. 此外, 由于要计算导函数 f 0 (xk ), 往往会影响运算速度. 当
f 0 (x) 在某些点不存在时, 还可能导致意外情况发生. 因此, 人们希望导出不含导函
数 f 0 (x) 的迭代公式. 很自然的一个想法就是用某个数值去近似代替 f 0 (xk ).
f (xk ) − f (x0 )
若用平均变化率 近似代替 f 0 (xk )(瞬时变化率), 则可得迭代格
xk − x0
式:
f (xk )
xk+1 = xk − (xk − x0 ), k = 0, 1, · · · . (5.24)
f (xk ) − f (x0 )
图 5-4 单点弦截法的几何解释
由式 (5.24) 易知其迭代函数为
f (x)
ϕ(x) = x − (x − x0 ).
f (x) − f (x0 )
5.4 代数方程求根 · 125 ·
因 f (x∗ ) = 0, 故求导数得
¯ ¯ ¯ ¯
¯ f 0 (x∗ ) ∗ ¯ ¯ f 0 (x∗ ) ¯
0 ∗ ¯
|ϕ (x )| = ¯1 + ¯ ¯
(x − x0 )¯ = ¯1 − ¯.
f (x0 ) [f (x∗ ) − f (x0 )]/(x∗ − x0 ) ¯
f (x∗ ) − f (x0 )
当初值 x0 充分接近 x∗ 时, 很接近 f 0 (x∗ ), 且符号也相同, 所以
x∗ − x0
0 < |ϕ0 (x∗ )| < 1.
图 5-5 双点弦截法的几何解释
5.4 代数方程求根
如果 f (x) 是多项式, 则特别地, f (x) = 0 称作代数方程. 前面介绍的方程求根
方法原则上也适用于解代数方程, 但由于多项式的特殊性, 我们可以针对其特点提
· 126 · 第5章 非线性方程求根
供另外一些有效的算法.
5.4.1 秦九韶算法
多项式的一个重要特点是求值方便. 设给定多项式
从而
b0 = a0 ,
bi = ai + x0 bi−1 , 1 6 i 6 n, (5.27)
f (x ) = b .
0 n
考察 Newton 公式
f (xk )
xk+1 = xk − , k = 0, 1, 2, · · · . (5.29)
f 0 (xk )
且
c0 = b0 ,
ci = bi + xk ci−1 , 1 6 i 6 n − 1, (5.31)
f 0 (x ) = c .
k n−1
5.4.3 劈因子法
如果能从多项式
中分离出一个二次因式
w∗ (x) = x2 + u∗ x + v ∗ ,
显然 r0 , r1 均为 u, v 的函数 (
r0 = r0 (u, v),
(5.33)
r1 = r1 (u, v).
如果 (r0 , r1 ) ≈ (0,0), 则 w (x) 就是满足精度的二次因子. 但遗憾的是, 一般情
况下, (r0 , r1 ) 6= (0, 0). 于是应该修正 u 和 v 使之分别变成 u + ∆u 和 v + ∆v, 并
满足 (
r0 (u + ∆u, v + ∆v) = 0,
(5.34)
r1 (u + ∆u, v + ∆v) = 0.
如果在上述方程组中求出 ∆u 和 ∆v, 则所求的二次因子变为
(1) 第一步:计算 r0 和 r1 . 将
于是 r0 , r1 的计算公式为
b0 = a0 ,
b1 = a1 − ub0 ,
bi = ai − ubi−1 − vbi−2 , 2 6 i 6 n, (5.40)
r0 = bn−1 ,
r = b + ub
1 n n−1 .
∂r0 ∂r1
(2) 第二步:计算 , . 将式 (5.32) 关于 v 求导, 得
∂v ∂v
∂p
p(x) = −(x2 + ux + v) + s0 x + s1 , (5.41)
∂v
其中
∂r0
s0 = − ,
∂v
(5.42)
s1 = − ∂r1 .
∂v
可见, 用 x2 + ux + v 除 p(x), 作为余式可以得到 s0 x + s1 . 由于 p(x) 是 n − 2 次多
∂p
项式, 其中, 商 是 n − 4 次多项式, 记
∂v
∂p
= −(c0 xn−4 + c1 xn−5 + · · · + cn−5 x + cn−4 ),
∂v
则相当于式 (5.40), 这里有
c0 = b0 ,
c1 = b1 − ub0 ,
ci = bi − uci−1 − vci−2 , 2 6 i 6 n − 2,
s0 = cn−3 ,
s =c
1 n−2 + ucn−3 .
· 130 · 第5章 非线性方程求根
∂r0 ∂r1
(3) 第三步:计算 , . 再将式 (5.32) 关于 u 求导, 得
∂u ∂u
∂p ∂r0 ∂r1
xp(x) = −(x2 + ux + v) − x− .
∂u ∂u ∂u
另外, 由式 (5.41) 得
∂p
xp(x) = −(x2 + ux + v)x + (s0 x + s1 )x
µ ∂v ¶
∂p
= −(x + ux + v) x − s0 − (us0 − s1 )x − vs0 .
∂v
比较上面两个式子知
∂r0
= us0 − s1 ,
∂u
∂r1
= vs0 .
∂v
习 题 5
1. 用简单迭代法求解方程 x = e−x 在 x = 0.5 附近的一个根. 要求事先确定有根区间并
判断迭代格式的收敛性, 误差上限 ε = 10−5 .
2. 分别用简单迭代法和加速后的迭代法计算方程 x = lg(x + 2) 在 x = 0.5 附近的近似
根, 要求 |x∗ − xk | < 10−4 , 并比较收敛的快慢.
3. 利用简单迭代法的艾特肯 (Aitken) 加速方法, 求解方程 x = x3 − 1, 要求 |x∗ − xk | <
10−4 .
4. 用简单迭代法求解下列方程的根, 并验证收敛性, 结果精确至 4 位有效数字:
(1) x5 − x − 1 = 0. (2) ex = 8x.
(3) 12 − 3x = tan x. (4) e2x − 5x2 + 2 = 0.
5. 设 x∗ 是 f (x) = 0 在区间 [a, b] 上的根, x ∈ [a, b] 是 x∗ 的近似值, 且
¯ ¯
m = min ¯f 0 (x)¯ 6= 0,
x∈[a,b]
|f (xk )|
证明 |xk − x∗ | 6 .
m
6. 如果 x∗ 满足 x∗ = ϕ (x∗ ), 则称 x∗ 为 ϕ (x) 的不动点. 设 x∗ 是 ϕ (x) 在区间 [a, b] 上
的不动点, 且对任意 x ∈ [a, b] 有 0 6 ϕ (x) 6 1, 试证:对任意 x ∈ [a, b] 有 ϕ (x) ∈ [a, b].
7. 用 Newton 法解方程 xex − 1 = 0, 并与第 1 题中的方法比较哪种方法收敛速度更快.
8. 构造求解方程 x2 + 2x − 3 = 0 的 Newton 迭代格式, 并证明:
(1) 当 x0 ∈ (−∞, −1) 时, lim xk = −3.
k→∞
(2) 当 x0 ∈ (−1, +∞) 时, lim xk = 1.
k→∞
习 题 5 · 131 ·
1
9. 试列出 Newton 下山法的计算步骤, 并取初值 x0 = 0.6, λ = , 求 x3 − x − 1 = 0 在
32
x = 1.5 附近的一个根.
10. 设 x∗ 是方程 f (x) = 0 的 m(m > 2) 重根, 即 f (x) = (x−x∗ )m g(x), 其中, g(x∗ ) 6= 0,
证明 Newton 法线性收敛, 并证明改进的 Newton 法:
f (xk )
xk+1 = xk − m
f 0 (xk )
至少平方收敛.
11. 对方程 f (x) = 0, 若 f (x) 在 x∗ 的某邻域内二阶可微, 且在该邻域内 f 0 (x) 6= 0, 取该
√
1+ 5
邻域内的 x0 , x1 为初值. 证明:当该邻域充分小时, 双点弦截法将按 p = 收敛到根 x∗ .
2
12. 用双点弦截法求方程 x3 − x − 1 = 0 在 x = 1.5 附近的根, 使绝对误差精确到 10−4 ,
并与 Newton 法比较哪种方法收敛性更好, 哪种方法收敛速度更快.
√
13. 证明例 5.5 中的 Newton 迭代法的收敛性, 并用该方法计算 135.607, 结果精确到 6
位有效数字.
14. 用解非线性方程组的 Newton 迭代法, 求方程组
(
f1 (x, y) = x2 + y 2 − 1 = 0,
f2 (x, y) = x3 − y = 0,
6.1 引 言
前述各章的若干问题, 无论是插值公式 (包括样条插值) 的建立, 还是微分方程
的差分格式的构造, 都包含着将原问题转化为代数问题的思想, 即常将问题归结为
求解线性代数方程组. 而事实上, 这仅仅是线性代数方程组求解应用的一个方面.
几乎所有科学与工程实际问题都或多或少地涉及应用的问题, 例如建筑结构设计问
题、计算机网络问题、计算机辅助设计问题、实验数据的曲线拟合问题、管理科学
中的规划问题等. 可见, 线性代数方程组的求解不仅在计算方法课程中, 而且在科
学与工程领域中都占有极其重要的地位.
在线性代数和高等数学中, 我们已熟悉了解线性代数方程组的克拉默 (Cramer)
法则. 但是该方法的计算速度实在是太慢, 以至于当方程组阶数较高 (CT 的图像
重建时常要解成百上千阶的方程组) 时, 用其求解线性代数方程组几乎是不可能的.
事实上, 要求解 n 阶的方程组, 依 Cramer 法则要计算 n + 1 个行列式, 而每个行列
式包含 n! 个乘积的值, 其中, 每个乘积需作 n − 1 次乘法. 若不考虑其他运算, 仅
这些计算就需
N = n!(n + 1)(n − 1)
次乘法运算. 不要说成百上千阶的方程, 即便是 20 阶的方程, 当 n = 20 时, N ≈
9.7 × 1020 , 若在每秒可进行 1 亿次乘法运算的计算机上运算, 至少需三十多万年!
总之, 寻求解线性代数方程组的快速而有效的算法是十分重要的. 本章及下章
我们主要介绍有关的直接法和迭代法.
(1) 直接法:在不考虑舍入误差的情况下, 通过有限步四则运算可求得准确解
的方法. 上面提到的 Cramer 法则就是一种直接法, 只不过它中看不中用. 本章主
要介绍计算机上常用而有效的 Gauss 消去法及其相关算法、有关矩阵分解和求矩
阵逆等问题.
(2) 迭代法:用某种极限过程去逐步逼近方程组的精确解的方法. 其有关思想
类似于第 5 章求解非线性方程中的基本思想. 迭代法具有占用计算机内存少、程序
设计简单等优点, 但存在着收敛性、收敛速度等问题.
6.2.1 系数矩阵为三角形的方程组
设有系数矩阵为上三角形的方程组:
u11 x1 + u12 x2 + · · · + u1,n−1 xn−1 + u1n xn = b1 ,
u22 x2 + · · · + u2,n−1 xn−1 + u2n xn
= b2 ,
······ (6.1)
un−1,n−1 xn−1 + un−1,n xn = bn−1 ,
u x
nn n = bn ,
记为 Ã !
n
X
xi = bi − uik xk /uii , i = n, n − 1, · · · , 1, (6.2)
k=i+1
n
X
这里约定 · = 0.
k=n+1
同样, 对系数矩阵为下三角形的方程组:
l11 x1 = b1 ,
l x +l x = b2 ,
21 1 22 2
(6.3)
······
ln1 x1 + ln2 x2 + · · · + lnn xn = bn ,
0
X
这里约定 · = 0.
k=1
· 134 · 第6章 线性方程组的直接解法
对一般的线性代数方程组
a11 x1 + a12 x2 + · · · + a1n xn = b1 ,
a x + a x + ··· + a x = b ,
21 1 22 2 2n n 2
(6.5)
······
an1 x1 + an2 x2 + · · · + ann xn = bn ,
或写成矩阵形式
Ax = b,
其中
a11 a12 ··· a1n x1 b1
a21 a22 ··· a2n x2 b2
A= .. .. .. , x= .. , b= .. .
. . . . .
an1 an2 ··· ann xn bn
等价地化为上三角形方程组, 进而求得方程的解.
解:消元步骤如下: µ ¶
5
第 1 步, 消去方程组 ②, ③ 中的 x1 . 将方程 ① × − 加到方程 ② 中, 方
7
µ ¶
1
程 ①× − 加到方程 ③ 中, 得等价方程
7
7x1 + 8x2 + 11x3 = −3, ①
33 76 13 0
− x2 − x3 = − , ②
7 7 7
6 x + 10 x = 10 . ③
0
2 3
7 7 7
6.2 高斯 (Gauss) 消去法 · 135 ·
· µ ¶Áµ ¶¸
6 33
0 0
第 2 步, 消去方程 ③ 中的 x2 . 将 ② × − − 加到方程 ③0 中,
7 7
得等价方程
7x1 + 8x2 + 11x3 = −3, ①
33 76 13 0
− x2 − x3 = − , ②
7 7 7
− 6 x = 12 . ③
00
3
11 11
逐次由 ③00 , ②0 , ① 可求得 x1 = −2, x2 = 5, x3 = −3.
这种解法先把方程组化成同解的上三角形方程组 (相应的处理方程称为消去
过程或消元过程), 然后按方程相反顺序求解上三角形方程组 (相应的处理过程称
为回代过程), 得出原方程组的解. 我们称此法为 Gauss 消去法或 Gauss 消元法 (必
须强调, 早在公元前 250 年我国就已经掌握了解三元一次联立方程组的消去法).
下面我们来介绍一般的 n 阶方程组的处理过程. 为了便于说明问题. 我们用
(1) (1)
A(1) , b(1) 分别表示第 1 步消元前方程组的系数矩阵及方程的常数项, 并以 aij , bi
分别表示相应的元素. 此时等价的方程为
A(1) x = b(1) , (6.6)
即
(1) (1) (1) (1)
a11 a12 ··· a1n x1 b1
(1) (1) (1) (1)
a21 a22 ··· a2n x2 b2
(1) (1)
A = . .. .. .. , x= .. , b = . , (6.7)
.. . . . . ..
(1) (1) (1) (1)
an1 an2 ··· ann xn bn
其中
(1) (1)
aij = aij , bj = bj , i, j = 1, 2, · · · , n.
第 1 步, 消去方程组 (6.6) 中第 2 至第 n 个方程中的 x1 , 即在 A(1) 中消去
(1) (1) (1) (1) (1)
a21 , · · · , an1 . 为此, 若 a11 6= 0, 则将第 1 个方程乘以 (−a21 /a11 ) 加到第 2 个
方程中去, · · · , 将第 1 个方程乘以 (−a(1) (1)
n1 /a11 ) 加到第 n 个方程中去. 即, 若记
(1) (1)
mi1 = ai1 /a11 , 则为将第 1 个方程乘以 (−mi1 ) 加到第 i 个方程中去. 从而得到等
价的方程
A(2) x = b(2) , (6.8)
即
(1) (1) (1) (1)
a11 a12 ··· a1n x1 b1
(2) (2) (2)
0 a22 ··· a2n x2 b2
.. .. .. .. .. = . ,
. . . . . ..
(2) (2) (2)
0 an2 ··· ann xn bn
· 136 · 第6章 线性方程组的直接解法
其中
(2) (1) (1)
aij = aij − mi1 a1j , i, j = 2, 3, · · · , n,
(2) (1) (1)
bi = bi − mi1 b1 , i = 2, 3, · · · , n.
第 2 步, 消去方程组 (6.8) 中第 3 至第 n 个方程中的 x2 , 即将 A(2) 中第 2 列
第 2 行以下的元素消为零. 若 a(2) (2) (2)
22 6= 0, 记 mi2 = ai2 /a22 (i = 3, 4, · · · , n), 将方程
组 (6.8) 中第 2 个方程分别乘以 (−mi2 ) 加到第 i 个方程中, 得
A(3) x = b(3) ,
即
(1) (1) (1) (1) (1)
a11 a12 a13 ··· a1n x1 b1
(2) (2) (2) (2)
0 a22 a23 ··· a2n x2 b2
(3)
0 0
(3)
a33 ··· a3n
(3) x3
= b3 .
.. .. .. ..
..
.. .
. . . . . . ..
(3) (3) (3)
0 0 an3 ··· ann xn b3
依此类推, 一般设经第 k − 1 步得等价方程组
即 (1)
(1) (1) (1)
a11 ··· a1k ··· a1n x1 b1
.. ..
..
. .. ..
0 . . . .
(k)
(k)
akn xk
(k) .
0 0 akk ··· = bk
.. .. .. .. .. ..
..
. . . . . .
.
(k) (k) (k)
0 0 ank ··· ann xn bn
第 k 步, 消去方程组 (6.9) 中第 k + 1 至第 n 个方程中的 xk , 即将 A(k) 中第 k
列第 k 行以下的元素消为零. 若 a(k) (k) (k)
kk 6= 0, 记 mik = aik /akk (i = k + 1, · · · , n), 将
方程组 (6.9) 中第 k 个方程分别乘以 (−mik ) 加到第 i 个方程中, 得
A(k+1) x = b(k+1) ,
即
(1) (1) (1) (1)
a11 ··· a1,k+1 ··· a1n x1 b1
.. .. .. .. .. ..
. .
0 . . . .
(k+1)
0 0
(k+1)
ak+1,k+1 ···
(k+1)
ak+1,n xk+1 = b ,
k+1
.. .. .. .. .. . ..
. . . . . .. .
(k+1) (k+1) (k+1)
0 0 an,k+1 ··· ann xn bn
6.2 高斯 (Gauss) 消去法 · 137 ·
其中
(k+1) (k) (k)
aij = aij − mik akj , i, j = k + 1, k + 2, · · · , n,
(k+1) (k) (k)
bi = bi − mik bk , i = k + 1, k + 2, · · · , n.
A(n) x = b(n) ,
即
(1) (1) (1)
a11 ··· a1n x1 b1
. .. .. . .
. = . .
. . . .. . (6.10)
(n) (n)
0 ··· ann xn bn
从而完成了消元过程.
由此, 因为 a(k) kk 6= 0 (k = n, n − 1, · · · , 1), 我们可以方便地经回代过程得到原
方程组 (6.5) 的解为
(n) (n)
xn = bn /ann ,
,
n
X (6.11)
(k) (k) (k)
akj xj akk , k = n − 1, n − 2, · · · , 1.
xk = bk −
j=k+1
做完 n − 1 步后累计总运算量为
n−1
X n3 n2 5n
乘除法次数: (n − k)(n − k + 2) = + − ,
3 2 6
k=1
n−1
X n3 n
加减法次数: (n − k)(n − k + 1) = − .
3 3
k=1
· 138 · 第6章 线性方程组的直接解法
回代过程的运算量为
n
X n2 n
乘除法次数: (n − k + 1) = + ,
2 2
k=1
Xn
n2 n
加减法次数: (n − k) = − .
2 2
k=1
故 Gauss 消去法解线性代数方程组的总运算量为
n3 n
乘除法次数: + n2 − ,
3 3
n3 n2 5n
加减法次数: + − .
3 2 6
由此可知, 对于一个 20 阶的线性代数方程组, 若用 Gauss 消去法, 如果在每秒
1 万次乘除运算的计算机上计算, 从理论上讲, 不到 1 秒即可算完; 而若用 Cramer
法则运算, 即便在每秒 1 亿次乘除运算的计算机上计算, 也要用三十多万年!
6.2.3 列主元消去法
(k)
Gauss 消去法中的 akk 称为第 k 步的主元. 在上述消元过程中, 我们假定了
(k)
akk 6= 0, k = 1, 2, · · · , n,
证明:略.
6.3 高斯–若尔当 (Gauss-Jordan) 消去法与矩阵求逆 · 141 ·
从而将对线性代数方程组的消元过程看做对此增广矩阵的约化过程, 一旦该增广矩
阵约化为如下等价形式:
(n)
1 0 · · · 0 b1
0 1 · · · 0 b(n)
2
. . .. .. ,
.. .. . .
(n)
0 0 · · · 1 bn
· 142 · 第6章 线性方程组的直接解法
则原方程组的解即
(n)
b1
(n)
b2
∗
x = . .
..
(n)
bn
其中
(1)
a1j = a1j /a11 , j = 2, · · · , n,
(1)
b1 = b1 /a11 ,
(1)
aij = aij − mi1 a1j , i, j = 2, 3, · · · , n,
(1)
bi = bi /mi1 b1 , i = 2, 3, · · · , n,
mi1 = ai1 /a11 , i = 2, 3, · · · , n.
设经过 k − 1 步, 增广矩阵等价地化为
(k−1) (k−1) (k−1)
1 · · · 0 a1k ··· a1n b1
.. . . .. .. .. ..
. . . . . .
0 · · · 1 a(k−1) · · · (k−1)
ak−1,n bk−1
(k−1)
k−1,k
.
0 · · · 0 a(k−1) · · · akn
(k−1)
bk
(k−1)
kk
.. .. .. .. ..
. . . . .
(k−1) (k−1) (k−1)
0 ··· 0 ank ··· ann bn
其中
(k) (k−1) (k−1)
akj = akj /akk , j = k + 1, · · · , n,
(k) (k−1) (k−1)
bk = bk /akk ,
(k) (k−1) (k−1)
aij = aij − mik akj , i = 1, · · · , k − 1, k + 1, · · · , n, j = k + 1, · · · , n,
(k) (k−1) (k−1)
bi = bi − mik bk , i = 1, · · · , k − 1, k + 1, · · · , n,
(k−1) (k−1)
mik = aik /akk , i = 1, · · · , k − 1, k + 1, · · · , n.
经 n 步后, 增广矩阵等价地化为
(n)
1 b1
1
(n)
b2
,
.. ..
. .
(n)
1 bn
其中
(n) (n−1) (n−1)
bn = bn /ann ,
(n) (n−1) (n−1)
bi = bi − min bnn , i = 1, 2, · · · , n − 1,
(n−1) (n−1)
min = ain /ann , i = 1, 2, · · · , n − 1.
从而得到原方程的解为
(n)
b1
(n)
b2
∗
x = . .
..
(n)
bn
AX = I. (6.12)
若记
X = (x1 , x2 , · · · , xn ) , I = (e1 , e2 , · · · , en ) ,
Axi = ei , i = 1, 2, · · · , n. (6.13)
的逆矩阵 A−1 .
解:将 A 写成增广矩阵 C = [A, I], 逐次完成 Gauss-Jordan 消元, 过程如
下:
1 2 3 1 0 0 3 5 6 0 0 1
选主元
C = [A, I] =
2 4 5 0 1 0
−−−−−−−−−→ 2 4 5 0 1 0
交换 1,3 行
3 5 6 0 0 1 1 2 3 1 0 0
5 1
1 2 0 0
3 3
第一次消元 2 2
−−−−−−−−−→ 10 1 0 1 −
3 3
1 1
0 1 1 0 −
3 3
1 5
1 0 − 0 − 2
2 2
第二次消元 3 3
−−−−−−−−−→ 0 1 0 −1
2 2
1 1
0 0 1 − 0
2 2
1 0 0 1 −3 2
第三次消元
−−−−−−−−−→
0 1 0 −3 3 −1 = [I, A ].
−1
0 0 1 2 −1 0
· 146 · 第6章 线性方程组的直接解法
6.4 解三对角方程组的追赶法
在前面第 1 章、第 4 章的学习中我们已经发现, 在求解三次样条函数、常微分
方程边值问题时, 需要求解所谓的三对角方程组. 其实, 在解热传导方程、应力应
变关系、电路等问题时, 我们都会遇到此类问题. 这些问题由于系数矩阵非零元素
少, 且往往又具有主对角线元素较大的优势, 使得我们在求解这类方程时可以利用
相关特点, 设计出更为快速有效的算法. 本节介绍的追赶法就是一例.
对方程组
b1 c1 x1 d1
a2 b2 c2 x2 d2
.. .. .. .. ..
. . . . .
ai bi ci xi = di
.. .. .. .. ..
. . . . .
an−1 bn−1 cn−1 xn−1 dn−1
an bn xn dn
或简记为
Ax = d.
用消元法求解仅需消去主对角线元素以下的次对角线元素, 故可构造一组递推公
式, 使得算法更为简便. 我们先来做有关的推导工作.
第 1 步, 对第 1 行进行约化, 得同解方程
1 v1 x1 u1
a2 b2 c2 x2 d2
.. .. .. .. ..
. . . . .
ai bi ci xi = di ,
.. .. .. .. ..
. . . . .
an−1 bn−1 cn−1 xn−1 dn−1
an bn xn dn
其中
c1 d1
v1 = , u1 = . (6.14)
b1 b1
第 2 步, 对第 2 行进行约化, 消去 a2 , 并将 b2 元素所在位置约化为 1, 得
6.4 解三对角方程组的追赶法 · 147 ·
1 v1 x1 u1
0 1 v2 x2 u2
.. .. .. .. ..
. . . . .
ai bi ci xi = di ,
.. .. .. .. ..
. . . . .
an−1 bn−1 cn−1 xn−1 dn−1
an bn xn dn
其中
c2 d1 − u1 a2
v2 = , u2 = .
b2 − v1 a2 b2 − v1 a2
第 i 步, 消去 ai , 并将 bi 元素所在位置约化为 1, 得
1 v1 x1 u1
0 1 v2 u2
x2
.. .. .. . .
. . . .. ..
0 1 vi xi ui
= ,
ai+1 bi+1 ci+1 x d
i+1 i+1
. .
.. .. .. . .
. . . . .
an−1 bn−1 cn−1 d
xn−1 n−1
an bn xn dn
其中
ci di − ui−1 ai
vi = , ui = . (6.15)
bi − vi−1 ai bi − vi−1 ai
第 n 步, 消去 an , 并将 bn 元素所在位置约化为 1, 得
1 v1 x1 u1
1 v2 x2 u2
. . . . .. ..
. . . = . ,
1 vn−1 xn−1 un−1
1 xn un
其中
dn − un−1 an
un = . (6.16)
bn − vn−1 an
从而经回代得
xn = un ,
(6.17)
xi = ui − vi xi+1 , i = n, n − 1, · · · , 1.
· 148 · 第6章 线性方程组的直接解法
其中, 规定 v0 = u0 = 0, vn = 0.
我们将以上求三对角方程的方法称为 “追赶法”. 计算顺序为
v1
u1 → · · · →vun−1
n−1
→ un = xn (vn = 0) → xn−1 → · · · → x1 .
例 6.5 求解三对角方程组
−2 1 x1 −2
1 −2 1 x2 = 1 .
1 −2 x3 −4
解:由方程组可知
b1 = b2 = b3 = −2, a2 = a3 = 1, c1 = c2 = 1.
由式 (6.15) 计算得
1 2
v1 = − , u1 = 1, v2 = − , u2 = 0, u3 = 3.
2 3
再由式 (6.16) 计算得
x3 = u3 = 3, x2 = 2, x1 = 2.
其中
1 u11 u12 ··· u1n
l21 1 u22 ··· u2n
L= .. .. .. , U = .. .. .
. . . . .
ln1 ln2 ··· 1 unn
U x = y, (6.22)
6.5.1 矩阵的 LU 分解
u11 u12 ··· u1j ··· u1n
u22 ··· u2j ··· u2n
.. .. ..
. . .
.
0 ujj ··· ujn
.. ..
. .
unn
第 1 步, 比较左边及右端乘积第 1 行元素, 可得出矩阵 U 的第 1 行元素, 有
u1j = a1j , j = 2, · · · , n.
比较左边及右端乘积第 1 列元素, 得
第 2 步, 比较第 2 行元素, 有
由此可计算出矩阵 U 的第 2 行元素
再比较第 2 列元素, 有
第 k 步, 设已经定出 U 的第 1 到第 k − 1 行元素与 L 的第 1 到第 k − 1 列元
素. 比较第 k 行元素, 有
由此可计算出矩阵 U 的第 k 行元素
k−1
X
ukj = akj − lks usj , j = k, · · · , n.
s=1
6.5 矩阵的三角分解及 Gauss 消去法的变形 · 151 ·
再比较第 k 列元素, 有
和
xn = yn /unn ,
i−1
X
y i = bi −
lik yk , i = n − 1, · · · , 1.
k=1
例 6.6 用直接三角分解法解方程组
1 2 3 x 14
1
2 5 2 x2 = 18 .
3 1 5 x3 20
解:由分解公式计算得
1 0 0 1 2 3
L= 2
1 0 , U = 0 1 −4
3 −5 1 0 0 −24
求解
Ly = (14, 18, 20)T
得
y = (14, −10, −72)T .
再求解方程组
U x = (14, −10, −72)T
· 152 · 第6章 线性方程组的直接解法
得
x = (1, 2, 3)T .
在用计算机计算时, U , L 不必单独开辟单元, 占用内存. 可将逐步计算出的 U
与 L 的各行各列分别对应存放在 A 的对应位置. 这是因为一旦 U 的第 k 行、L
的第 k 列算出后, A 的第 k 行、第 k 列之前的元素就不再参与运算了. 此外, y 可
存入 b 所占的单元, 回代时 x 可存入 y 所占的单元. 因而在整个计算过程中, 除了
存放 A 与 b 的存贮单元及部分下标变量外, 不需增加新的存储单元.
与 Gauss 消去法一样, 为了保证运算能顺利进行以及方法的稳定性, 三角分解
法一般也应采用选主元的技术. 不过, 由于 LU 分解方法实际上是 Gauss 消去法的
另一种形式, 故在定理 6.1 条件下, 无需选主元即可顺利进行. 换言之, 此时 LU 分
解存在唯一性.
6.5.3 平方根法
在控制理论、有限元法应用等问题中, 常需要解系数矩阵为对称正定矩阵的方
程组. 此时可应用由 LU 分解方法改进得到的所谓平方根法. 由于对称性, 可使得
三角分解的计算量大大减少. 对此我们有:
定理 6.2 若 A 是对称正定矩阵, 则可以分解为
A = LLT ,
其中, L 为形如
l11
l21 l22
.. .. ..
. . .
ln1 ln2 ··· lnn
的下三角矩阵. 若限定 L 的主对角线上元素取正值, 则这种分解是唯一的.
证明:请读者自己证明.
那么, 如果 A 是对称正定矩阵, 求解方程组 Ax = b 就等价于求解方程组
Ly = b 和 LT x = y. 这种求解方法被称为平方根法.
6.5.4 改进的平方根法
实际上, 在一定条件下矩阵 A 可以分解为式 (6.20), 此时若再将 U 分解为
u11 u12 u1n
1 ···
u11 u11
u22 .. ..
.
.. . = DU 0 ,
U = . u
n−1,n
un−1,n−1 u n−1,n−1
unn 1
6.5 矩阵的三角分解及 Gauss 消去法的变形 · 153 ·
则
A = LDU 0 .
由对称性
A = AT = U 0 DLT .
比较以上两式可知
A = LDLT ,
则有唯一的分解
A = LDLT ,
其中
1 d1
l21 1 d2
L= .. .. .. , D= .. .
. . . .
ln1 ln2 ··· 1 dn
tij = lij dj , j = 1, 2, · · · , n, i = j + 1, · · · , n.
从而可得到另一组计算公式
i−1
X
di = aii − tis lis , i = 1, 2, · · · , n,
s=1
· 154 · 第6章 线性方程组的直接解法
j−1
X
tij = aij − tis ljs , j = 1, 2, · · · , n, i = j + 1, · · · , n,
s=1
和
xn = Ã
yn /dn ,
!Á
n
X
x = yi − lis xs di , i = n − 1, n − 2, · · · , 1.
i
s=i+1
上述方法称为改进平方根方法, 可以很方便地求解系数矩阵为对称矩阵的方程组.
6.6 向量范数和矩阵范数
在数值方法中, 经常要分析解向量的误差, 比较误差向量的 “大小”, 那么如何
定义向量的 “大小” 并以此比较呢? 这可以对向量按确定的法则定义一个非负实数
作它的 “长度”, 如可以取向量中按模 (绝对值) 最大的分量作其 “长度” 等, 然后以
这个 “长度” 为标准进行比较, 这就是计算方法中广泛使用的范数的概念.
6.6.1 向量范数
定义 6.2 若向量 x = (x1 , x2 , · · · , xn )T ∈ Rn (n 维实向量空间) 的某个实函
数 k · k 同时满足下列三个条件:
(1) kxk > 0, 其中, kxk = 0 当且仅当 x = 0 时成立 —— 非负性.
(2) kλxk = |λ| kxk, 其中, λ 为任何实数 —— 齐次性.
(3) kx + yk 6 kxk + kyk, 其中, x, y ∈ Rn —— 三角不等式.
则称 k·k 为 Rn 上的一个向量范数 (或模).
常用的向量范数有
n
X
1- 范数: kxk1 = |xi |,
i=1
à n
! 12
X
2- 范数: kxk2 = x2i ,
i=1
∞- 范数:kxk∞ = max |xi |.
16i6n
6.6 向量范数和矩阵范数 · 155 ·
上述三种范数可统一地表示为 p- 范数, 即
à n !1/p
X
p
kxkp = |xi | .
i=1
下面给出向量范数的两个常用的性质.
(1) 如果 x, y ∈ Rn , 那么 |kxk − kyk| 6 kx − yk. 事实上, 因为
有
kxk − kyk 6 kx − yk .
类似地,
kyk − kxk 6 ky − xk = kx − yk .
这样我们有
|kxk − kyk| 6 kx − yk .
有了范数的概念, 就能讨论向量序列的收敛性问题了.
定义 6.3 设有 Rn 中的向量 x∗ = (x∗1 , x∗2 , · · · , x∗n )T ∈ Rn 和向量序列 x(k) =
(k) (k) (k)
(x1 , x2 , · · · , xn )T (k = 1, 2, · · · , n), 若对所有的 i(i = 1, 2, · · · , n) 有
(k)
lim xi = x∗i ,
k→∞
© ª
则称向量序列 x(k) 收敛于向量 {x∗ }, 记作
lim x(k) = x∗ .
k→∞
© ª
定理 6.4 向量序列 x(k) 收敛于 {x∗ } 的充要条件是
° °
° (k) °
°x − x∗ ° → 0, k → ∞,
那么 ° ° ° °
° (k) ° ° °
°x − x∗ ° → 0 ⇐⇒ °x(k) − x∗ ° → 0, k → ∞,
∞
即 ° °
° °
lim x(k) = x∗ ⇐⇒ °x(k) − x∗ ° → 0, k → ∞.
k→∞
6.6.2 矩阵范数
向量的范数概念还可以推广到矩阵上去. 用 Rn×n 表示 n × n 阶实矩阵的集
合, 则有:
定义 6.4 若矩阵 A = (aij )n×n ∈ Rn×n 的某个实函数 k·k 同时满足于下列
条件:
(1) kAk > 0, 等号当且仅当 A = 0 时成立. (非负性)
(2) kλAk = |λ|kAk, 其中, λ 为任何实数. (齐次性)
(3) kA + Bk 6 kAk + kBk, 对任意 A, B ∈ Rn×n .
(4) kABk 6 kAkkBk, 对任意 A, B ∈ Rn×n .
则称 kAk 为 Rn×n 上的一个矩阵范数 (或模).
6.6 向量范数和矩阵范数 · 157 ·
1/2
n
X
例如, kAkF = a2ij 就是满足于上述 4 个条件的 Rn×n 上的一个矩阵
i,j=1
kAxk
kAk = max (6.23)
x6=0 kxk
为 Rn×n 上的矩阵算子范数.
算子范数与其相应的向量范数满足一个不等式, 即若 x ∈ Rn , A ∈ Rn×n 时有
kAxk kAxk
kAk = max > .
x6=0 kxk kxk
相容性条件对研究同时含有矩阵和向量的误差估计问题是不可或缺的.
算子范数也完全满足矩阵范数的定义条件. 事实上, 定义 6.4 的条件 (1)、(2)
对于算子范数显然成立, 下面只需证明条件 (3)、(4) 对于算子范数成立即可. 事
实上,
k(A + B)xk kAxk + kBxk kAxk kBxk
kA + Bk = max 6 max 6 max + max
x6=0 kxk x6=0 kxk x6=0 kxk x6=0 kxk
= kAk + kBk ,
由相容性条件易得另一个不等式, 即
kABxk kAk · kBxk
kABk = max 6 max = kAk · kBk .
x6=0 kxk x6=0 kxk
r
2-范数:kAk2 = max λi (AT A)
16i6n
为矩阵 A 的谱半径.
定理 6.5 如果 A ∈ Rn×n , 那么对任一算子范数 k·k, 有
ρ(A) 6 kAk .
Ax = λx.
由算子范数的相容性条件知
由于 x 6= 0, 有
|λ| 6 kAk ,
又由于 λ 的任意性, 有
ρ(A) 6 kAk .
定理 6.7 下列命题等价:
(1) 矩阵 A 是收敛的. ° °
° °
(2) 对任意算子范数, 有 lim °Ak ° = 0.
k→∞
(3) ρ(A) < 1.
(4) lim Ak x = 0, 对任意 x ∈ Rn .
k→∞
6.7 误 差 分 析
6.7.1 方程组的性态和条件数
由一个实际问题建立方程组时, 方程组的系数和右端常数项通常都或多或少地
带有一定的误差 (或扰动), 这种扰动有时使方程组的解面目全非, 有时却对解的影
响并不大. 下面来考察两个例子.
例 6.9 解下列两个方程组:
(
2x1 + x2 = 5,
(6.24)
2x1 + 1.0001x2 = 5.0001,
(
2x1 + x2 = 5,
(6.25)
2x1 + 0.9999x2 = 5.0002.
这两个方程组的常数部分只有极微小的不同, 我们可以认为方程组 (6.25) 是方程组
(6.24) 的常数部分产生小的扰动而造成的. 但是方程组 (6.24) 的准确解是 x1 = 2,
x2 = 1, 而方程组 (6.25) 的准确解是 x1 = 3.5, x2 = −2, 两者相差甚远.
例 6.10 对方程组 (
x1 + 2x2 = 7,
(6.26)
2x1 − x2 = −1,
其准确解是 x1 = 1, x2 = 3.
若将方程组改成 (
x1 + 2x2 = 7,
(6.27)
2x1 − 1.0009x2 = −1.003,
· 160 · 第6章 线性方程组的直接解法
由于 Ax = b, 故上式为
由算子范数的相容性条件得
° °
kδxk 6 °A−1 ° · kδbk , (6.28)
化简得
Aδx = −δA(x + δx).
故
° ° ° °
kδxk = °A−1 δA(x + δx)° 6 °A−1 ° kδAk (kxk + kδxk),
或
° ° ° °
(1 − °A−1 ° kδAk) kδxk 6 °A−1 ° kδAk kxk .
为矩阵 A 的条件数.
至此可知, 方程组 Ax = b 的病态程度可以不太严格地借助于系数矩阵条件数
Cond(A) 的大小来刻画:Cond(A) 的值越大, 方程组的病态可能越严重.
比如, 例 6.9 的方程组 (6.24) 的系数矩阵
à !
2 1
A= ,
2 1.0001
° °
因为 kAk∞ = 3.0001, °A−1 °∞ = 20 000, 我们可以得到
° °
Cond∞ (A) = kAk∞ °A−1 °∞ ≈ 60 002.
其条件数为
9
Cond∞ (B) = .
5
故有理由认为方程组 (6.26) 是良态的.
· 162 · 第6章 线性方程组的直接解法
6.7.2 精度分析
当求得方程组 Ax = b 的近似解 x̃ 后, 检验该解精度的一个简单办法, 是将 x̃
代回到原方程组计算残向量 r, 即
r = b − Ax̃.
习 题 6
1. 用 Gauss 消去法解下列方程组:
3x − x + 2x = −3,
1 2 3 2x1 + 4x2 − 2x3 = 3,
(1) x1 + x2 + x3 = −4, (2) x1 − x2 + 5x3 = 0,
2x + x − x = −4. 4x + x − 2x = 2.
1 2 3 1 2 3
2. 用列主元消去法解下列方程组:
x1 − x2 + x3 = −4,
−x1 + 2x2 − 2x3 = −1,
(1) 5x1 − 4x2 + 3x3 = −12, (2) 3x1 − x2 + 4x3 = 7,
2x + x + x = 11. 2x − 3x − 2x = 0.
1 2 3 1 2 3
3. 对方程组
0.4096x1 + 0.1234x2 + 0.3678x3 + 0.2943x4 = 0.4043,
0.2246x + 0.3872x + 0.4015x + 0.1129x = 0.1150,
1 2 3 4
0.3645x1 + 0.1920x2 + 0.3781x3 + 0.0643x4
= 0.4240,
0.1784x1 + 0.4002x2 + 0.2786x3 + 0.3927x4 = −0.2557,
习 题 6 · 163 ·
证明 kxkA 为 Rn 上向量的一种范数.
15. 设 x = (x1 , x2 , · · · , xn )T ∈ Rn , 试证
à n !1/p
X
lim kxkp = lim |xi |p = max |xi | = kxk∞ .
p→+∞ p→+∞ 16i6n
i=1
16. 对于 Ã !
2 6
A= ,
2 0.0001
(1) 研究矩阵 A 的性态.
(2) 分别解方程组
à ! à !
8 8
① Ax = , ② Ax = .
8.00001 8.00002
17. 已知方程组 (
x1 + 0.99x2 = 1,
0.99x1 + 0.98x2 = 1,
的解为 x1 = 100, x2 = −100. 试计算其系数矩阵的条件数, 并就近似解 x1 = 1, x2 = 0 和
x1 = 100.5, x2 = −99.5 分别计算其残向量 r, 并讨论本题的计算结果说明什么问题.
第7章 解线性方程组的迭代法
对于线性方程组
Ax = b, (7.1)
其中
a11 a12 ··· a1n x1 b1
a21 a22 ··· a2n x2 b2
A= . .. .. , x = .. , b = .. .
.. . . . .
an1 an2 ··· ann xn bn
A 为非奇异矩阵时, 当 A 为阶数不太高且稠密的矩阵时, 上章讨论的直接解法是
非常有效的. 但对由工程技术中产生的大型稀疏矩阵方程组 (A 的阶数 n 很大, 但
有较多零元素), 为了减少计算量、节约内存、充分利用 A 中有大量零元素的特点,
使用迭代方法求解方程组 (7.1) 更为合适.
仿非线性方程组迭代解法的思想, 我们同样可以先将方程组 (7.1) 改写成适合
建立迭代格式的等价方程组
x = Gx + g, (7.2)
据此建立迭代公式
x(k+1) = Gx(k) + g, k = 0, 1, 2, · · · . (7.3)
³ ´T © ª
(0) (0) (0)
设初始向量为 x(0) = x1 , x2 , · · · , xn , 由公式 (7.3) 得到一向量序列 x(k) .
如果存在一个向量 x∗ = (x∗1 , x∗2 , · · · , x∗n )T 使得 lim x(k) = x∗ , 那么可以证明向
k→∞
量 x∗ 是线性方程组 (7.1) 的解. 但是矩阵 G 和向量 g 等于什么?是否一定有
lim x(k) = x∗ ? 这就是我们本章讨论的内容.
k→∞
n 阶线性方程组 (7.1) 为
a11 x1 + a12 x2 + · · · + a1n xn = b1 ,
a x + a x + ··· + a x = b ,
21 1 22 2 2n n 2
(7.4)
······
an1 x1 + an2 x2 + · · · + ann xn = bn .
· 166 · 第7章 解线性方程组的迭代法
据此建立迭代公式
(k+1) 1 ³ (k) (k) (k)
´
x = b 1 − a12 x − a13 x − · · · − a1n xn ,
1
a11 2 3
³ ´
x(k+1) = 1 b − a x(k) − a x(k) − · · · − a x(k)
,
2 2 21 1 23 3 2n n
a22 (7.5)
······
(k+1) 1 ³ (k) (k) (k)
´
xn = bn − an1 x1 − an2 x2 − · · · − an,n−1 xn−1 ,
ann
即
n
X
(k+1) 1 (k)
xi = bi − aij xj , i = 1, 2, · · · , n. (7.6)
aii j=1
j6=i
³ ´T
如果给定初始向量 x(0) = x(0)
1 , x
(0)
2 , · · · , x
(0)
n , 那么由公式 (7.5) 或公式 (7.6)
© (k) ª
得到一个向量序列 x , 这一方法称为Jacobi 迭代法或简单迭代法.
解:把方程组改写成
1
x1 = (7.2 + x2 + 2x3 ),
10
1
x2 = (8.3 + x1 + 2x3 ),
10
x3 = 1 (4.2 + x1 + x2 ).
5
据此建立 Jacobi 迭代公式为
(k+1) 1 ³ (k) (k)
´
x1 = 7.2 + x2 + 2x3 ,
10
(k+1) 1 ³ (k) (k)
´
x2 = 8.3 + x1 + 2x3 , k = 0, 1, 2, · · · .
10
1 ³ ´
x (k+1) (k) (k)
3 = 4.2 + x1 + x2 ,
5
类似地, Seidel 迭代公式为
(k+1) 1 ³ (k) (k)
´
x1 = 7.2 + x2 + 2x3 ,
10
(k+1) 1 ³ (k+1) (k)
´
x2 = 8.3 + x1 + 2x3 , k = 0, 1, 2, · · · .
10
³ ´
x(k+1) = 1 4.2 + x(k+1) + x(k+1) ,
3 1 2
5
· 168 · 第7章 解线性方程组的迭代法
解:同样将方程组改写为
(
x1 = 5 − 2x2 ,
x2 = 5 − 3x1 .
据此建立迭代格式
( (k+1) (k)
x1 = 5 − 2x2 ,
(k+1) (k) k = 0, 1, 2, · · · .
x2 = 5 − 3x1 ,
表 7-2 迭代法发散的计算结果
k 0 1 2 3 4 5 6 ···
(k)
x1 0 5 −5 25 −35 145 −215 ···
(k)
x2 0 5 −10 20 −70 110 −430 ···
7.1.3 迭代公式的矩阵表示
对于线性方程组 (7.1), 若系数矩阵 A 为非奇异, 且 aii 6= 0 (i = 1, 2, · · · , n), 则
可将 A 分解为
A = D − L − U,
其中
0
a11
a21 0
a22
D= .. , L = − a31 a32 0 ,
. . .. ..
. .
. .
ann
an1 an2 · · · ··· 0
0 a12 a13 ··· a1n
0 a23 ··· a2n
..
U = −
0 . .
..
.
0
由 Jacobi 迭代公式,
i−1
X n
X
(k+1) 1 (k) (k)
xi = bi − aij xj − aij xj , i = 1, 2, · · · , n,
aii j=1 j=i+1
可得向量矩阵表示
h i
x(k+1) = D −1 (b + Lx(k) + U x(k) ) = D −1 (L + U )x(k) + b
= (I − D −1 A)x(k) + D −1 b. (7.9)
可得向量矩阵形式
即
(D − L)x(k+1) = U x(k) + b.
· 170 · 第7章 解线性方程组的迭代法
所以有
x(k+1) = (D − L)−1 U x(k) + (D − L)−1 b. (7.10)
将它们写成统一的迭代形式
G 称为迭代矩阵. 显然有
Jacobi 迭代法:GJ = I − D −1 A, g J = D −1 b,
Seidel 迭代法:GS = (D − L)−1 U , g S = (D − L)−1 b.
7.2 迭代法的收敛性
7.2.1 迭代法收敛的充要条件
由于统一的迭代格式 (7.11) 来源于线性方程组 Ax = b 的等价方程组 x =
Gx + g, 若 x∗ 是方程组 Ax = b 的精确解, 则有
x∗ = Gx∗ + g. (7.12)
(I − G)−1 = I + G + G2 + · · · .
(I − G)S m = I − Gm+1 .
从而 lim S m = (I − G)−1 .
m→∞ © ª
因此, 当 x(0) 不是方程的解时, x(k) 能否收敛于 x∗ 取决于 Gk 能否收敛于
零矩阵. 为此给出:
定理 7.2 (迭代法基本原理) 对任意初始向量 x(0) , 则由迭代公式
x(k+1) = Gx(k) + g, k = 0, 1, · · · ,
© ª
产生的向量序列 x(k) 收敛到 x = Gx + g 的唯一解的充要条件是 ρ(G) < 1.
证明:(必要性) 由迭代公式得
即 x = Gx + g 的唯一解.
© ª
(充分性) 反过来, 如果向量序列 x(k) 收敛到 x = Gx + g 的唯一解, 记为
x∗ = (I − G)−1 g, 那么由式 (7.13) 得
³ ´
lim (x(k) − x∗ ) = lim Gk x(0) − x∗ = 0,
k→∞ k→∞
故
det(λI − GJ ) = λ3 ,
有
det(λI − GS ) = λ(λ − 2)2 ,
对于收敛速度, 由式 (7.13) 知
³ ´
x(k) − x∗ = Gk x(0) − x∗ .
¡ ¢
因此, 若迭代格式 (7.11) 收敛, 其收敛速度取决于 Gk x(0) − x∗ → 0 的快慢程度.
设迭代矩阵 G 有 n 个线性无关的特征向量 u1 , u2 , · · · , un , 其相应的特征值满
足
|λ1 | > |λ2 | > · · · > |λn |.
对于 x(0) − x∗ , 存在 n 个常数满足
x(0) − x∗ = α1 u1 + α2 u2 + · · · + αn un .
故
n
X
(k) ∗ k (0) ∗
x − x = G (x −x )= αi λki ui .
i=1
¡ ¢
可以看出 x(k) − x∗ → 0(k → ∞) 的速度取决于谱半径 ρ(G) = |λ1 | < 1 小于 1 的
速度, 即当 ρ(G)(< 1) 越小时, 式 (7.11) 收敛越快, 而若 ρ(G) ≈ 1, 收敛就很慢, 因
此可以用量 ρ(G) 来刻画迭代法的收敛快慢.
定义 7.1 称 R(G) = − ln ρ(G) 为迭代法的收敛速度.
由此看出, ρ(G)(< 1) 越小, − ln ρ(G) 就越大, 式 (7.11) 收敛速度就越快. 就
Jacobi 迭代法和 Seidel 迭代法而言, 一般地, 由于这两种迭代的收敛性之间无任何
联系, 故它们的收敛速度也就不能明确地比较. 但大量数据实验表明. 在两种迭代
法都收敛的情况下, Seidel 迭代法通常有更好的数值效果. 例 7.1 的数值效果表明了
这一点. 基于这种现状, 从一定意义上我们也不可武断地说 Seidel 迭代法比 Jacobi
迭代法 “好”.
7.2.2 迭代法收敛的充分条件
当方程组阶数 n 比较大时, 矩阵特征值计算比较困难, 使基本定理 7.2 的条
件不易验证, 所以最好能建立与迭代矩阵元素直接有关的条件来判别迭代法的收
敛性.
定理 7.3 若矩阵 G ∈ Rn×n 的某种算子范数 kGk < 1, 则矩阵 I − G 是非
奇异阵.
证明:用反证法. 若 I − G 是奇异阵, 则有非零向量 x 6= 0 ∈ Rn , 使得
(I − G)x = 0,
即
x = Gx.
· 174 · 第7章 解线性方程组的迭代法
由范数的相容性条件
kxk = kGxk 6 kGk · kxk ,
而 x 6= 0, 故
kGk > 1,
与定理条件矛盾, 证毕.
定理 7.4 若迭代矩阵 G 的某种算子范数 kGk < 1, 则对任意的初值 x(0) , 由
迭代格式
x(k+1) = Gx(k) + g, k = 0, 1, · · · ,
© ª
产生的序列 x(k) 均收敛于方程组 x = Gx + g 的唯一解 x∗ .
证明:因为 kGk < 1, 由定理 7.3 知矩阵 I − G 可逆. 从而方程组 x = Gx + g
有唯一解 x∗ = (I − G)−1 g. 由定理 6.5 有
x(k+1) = Gx(k) + g, k = 0, 1, · · · ,
© ª
产生的序列 x(k) 收敛于 x∗ .
例 7.4 考察用 Jacobi 迭代法解方程组
8x1 − 3x2 + 2x3 = 20,
4x1 + 11x2 − x3 = 33,
6x + 3x + 12x = 36,
1 2 3
的收敛性.
解:由于方程组的系数矩阵为
8 −3 2
A=
4 11 −1
,
6 3 12
故 Jacobi 迭代法得迭代法矩阵为
3 1
0 −
8 4
4 1
GJ = − 0 .
11 11
1 1
− − 0
2 4
7.2 迭代法的收敛性 · 175 ·
而迭代矩阵 GJ 的 ∞-范数为
½ ¾
5 5 3 3
kGJ k∞ = max , , = < 1.
8 11 4 4
故 Jacobi 迭代法是收敛的.
值得提出的是:定理 7.4 是充分判别条件, 即当定理 7.4 的条件不满足时, 得
不出迭代不收敛的结论. 例如, 迭代矩阵为
à !
0.9 0
G= ,
0.3 0.8
√
则 kGk1 = 1.2, kGk2 = 1.043, kGk∞ = 1.1, kGkF = 1.54. 虽然 G 的这些范数均
大于 1, 但 G 的特征值为 λ1 = 0.9, λ2 = 0.8. 由定理 7.2 知, 迭代是收敛的.
7.2.3 系数矩阵是对角占优情形
从充分判别条件可以得到一定的启发, 即要建立收敛的迭代公式时应使迭代矩
阵所有元素的绝对值都尽量小些, 也就是说, 在建立迭代格式之前, 我们应先适当
调整方程组的次序, 把绝对值较大的元素调整到系数矩阵的对角元位置. 而对于系
数矩阵为对角占优的方程组是不需要进行调整的, 那么用于这类方程组的迭代方法
的收敛性如何呢?
定理 7.5 如果矩阵 A ∈ Rn×n 是严格对角占优矩阵, 则 A 非奇异.
证明:因为 A 为严格对角占优矩阵, 则其主对角元 aii (i = 1, 2, · · · , n) 全不为
零. 故对角线矩阵
D = diag (a11 , a22 , · · · , ann )
非奇异.
考察矩阵
a12 a13 a1n
0 − − ··· −
a11 a11 a11
a21 a23 a2n
− 0 − ··· −
I − D −1 A =
a. 22 a22 a22 ,
.. .. .. ..
. . .
an1 an2 an3
− − − ··· 0
ann ann ann
由于 A 严格对角占优, 则
Xn ¯ ¯ Xn
° ° ¯ aij ¯
°I − D −1 A° = max ¯ ¯ = max 1 |aij | < 1. (7.14)
∞ i ¯ aii ¯ i |aii | j=1
j=1
j6=i j6=i
· 176 · 第7章 解线性方程组的迭代法
故由定理 7.3 知
¡ ¢
I − I − D −1 A = D −1 A
故 Jacobi 迭代法收敛.
下面证明 Seidel 迭代法的收敛性. 由于其迭代矩阵为
−1
GS = (D − L) U.
设 λ 是 GS 的任意一个特征值, 则 λ 应满足
det (λI − GS ) = 0.
而
³ ´
−1
det (λI − GS ) = det λI − (D − L) U
³ ´
−1
= det (D − L) [λ (D − L) − U ]
³ ´
−1
= det (D − L) det (λ (D − L) − U ) .
³ ´
由于 A 的严格对角占优, 则 aii 6= 0 (i = 1, 2, · · · , n), 所以 det (D−L)−1 6= 0,
因此必有
det (λ (D − L) − U ) = 0.
因为
n
X
|aii | > |aij |, i = 1, 2, · · · , n,
j=1
j6=i
7.2 迭代法的收敛性 · 177 ·
从而
n
X i−1
X n
X
|λaii | > |λaij | > |λaii | + |aij |, i = 1, 2, · · · , n.
j=1 j=1 j=i+1
j6=i
det(C) = det (λ (D − L) − U ) 6= 0.
进而将其改写成
1
x1 = (4 + 2x2 − x3 ) ,
5
1
x2 = (2 − x1 + x3 ) ,
5
1
x3 = (11 + 2x1 + x2 ) .
5
据此建立 Seidel 迭代格式为
(k+1) 1³ (k) (k)
´
1x = 4 + 2x 2 − x3 ,
5
³ ´
(k+1) 1 (k+1) (k)
x2 = 2 − x1 + x3 , k = 0, 1, 2, · · · .
5
³ ´
x(k+1) = 1 11 + 2x(k+1) + x(k+1) ,
3 1 2
5
上述 Seidel 迭代公式对任意初值 x(0) 都是收敛的. 因为调整后的线性方程组的系
数矩阵
5 −2 1
A= 1 5 −1
2 1 −5
是严格对角占优的.
· 178 · 第7章 解线性方程组的迭代法
7.3 迭代法的误差估计
在前面导出 Jacobi 迭代法和 Seidel 迭代法时, 我们曾仿非线性方程求根迭代
处理, 以检验
¯ ¯
¯ (k+1) (k) ¯
max ¯xi − xi ¯ < ε
16i6n
x(k+1) = Gx(k) + g, k = 0, 1, 2, · · · ,
故
° ° ° ³ ´°
° (k+1) ° ° °
°x − x(k) ° = °G x(k) − x(k−1) °
° ° ° °
° ° ° °
6 kGk· °x(k) −x(k−1) ° = q °x(k) −x(k−1) ° , k = 1, 2, 3, · · · , (7.15)
且
° ° ° ³ ´° ° ° ° °
° (k+1) ° ° ° ° ° ° °
°x − x∗ ° = °G x(k) − x∗ ° 6 kGk · °x(k) − x∗ ° = q °x(k) − x∗ ° .
从而
° ° ° ° ° ° ° °
° (k) ° ° ° ° ° ° °
°x − x∗ ° = °x(k) − x(k+1) + x(k+1) − x∗ ° 6 °x(k+1) − x(k) ° + °x(k+1) − x∗ °
° ° ° °
° ° ° °
6 q °x(k) − x(k−1) ° + q °x(k) − x∗ ° ,
即
° ° ° °
° ° ° °
(1 − q) °x(k) − x∗ ° 6 q °x(k) − x(k−1) ° .
7.4 超松弛迭代 (SOR) 法 · 179 ·
由于 kGk = q < 1, 故
° ° q ° °
° (k) ° ° (k) °
°x − x∗ ° 6 °x − x(k−1) ° . (7.16)
1−q
(2) 反复利用式 (7.15) 可得
° ° ° °
° (k) ° ° °
°x − x(k−1) ° 6 q (k−1) °x(1) − x(0) ° .
将上式代入式 (7.16) 即得
° ° qk ° °
° (k) ° ° (1) °
°x − x∗ ° 6 °x − x(0) ° .
1−q
证毕.
1
显然, 若在式 (7.16) 中选取的是 k·k∞ , 且当迭代矩阵的 kGk∞ 6 时, 则有
2
° ° q ° ° ° ° ¯ ¯
° (k) ° ° ° ° ° ¯ (k) (k−1) ¯
°x −x∗ ° 6 °x(k) −x(k−1) ° 6 °x(k) −x(k−1) ° = max ¯xi − xi ¯.
∞ 1−q ∞ ∞ 16i6n
这就是终止准则的一些理论依据所在.
由于 x(k) (k+1)
i , x̃i 都是 x∗i (i = 1, 2, · · · , n) 的某种程度的近似, 我们把两近似结果进
行适当的线性组合为 x∗i 更新的近似, 则有
(k+1) (k) (k+1)
xi = (1 − ω)xi + ωx̃i , i = 1, 2, · · · , n,
i−1
X Xn
(k) ω bi − (k+1)
= xi + aij xj − aij xkj , i = 1, 2, · · · , n. (7.17)
aii j=1 j=i
故
Dx(k+1) = Dx(k) + ωb + ωLx(k+1) + ω(U − D)x(k) .
于是
ρ(Gω ) < 1.
ρ(Gω ) < 1.
设矩阵 Gω 的特征值为 λ1 , λ2 , · · · , λn , 有
n
det(Gω ) = |λ1 · λ2 · · · · λn | 6 [ρ(Gω )] .
习 题 7 · 181 ·
由式 (7.18) 得到
¡ ¢
det(Gω ) = det (D − ωL)−1 det ((1 − ω)D + ωU ) = (1 − ω)n .
从而
|1 − ω| 6 ρ(Gω ) < 1,
即
0 < ω < 2.
习 题 7
1.对于方程组
5x1 + 2x2 + x3 = −12,
−x1 + 4x2 + 2x3 = 20,
2x − 3x + 10x = 3,
1 2 3
kGS k∞ < 1.
8.1 幂法与反幂法
8.1.1 幂法
某些应用场合下通常不需要知道矩阵的全部特征值和特征向量, 而仅要求得到
矩阵的按模最大的特征值 (或称为矩阵的主特征值) 和相应的特征向量, 如线性方
程组迭代解法的收敛性问题. 这里我们将讨论的幂法正是适用此类问题的方法, 它
是用于求矩阵按模最大特征值及相应的特征向量的一种迭代方法, 尤其适用于稀疏
矩阵的情形. 其算法的思想基于如下结论.
定理 8.1 设矩阵 A ∈ Rn×n 有 n 个线性无关的特征向量 x(i) (i = 1, 2, · · · , n),
其对应的特征值 λi (i = 1, 2, · · · , n) 满足
则
(k)
vi
lim (k−1)
= λ1 , i = 1, 2, · · · , n, (8.3)
k→∞ vi
用 A 构造向量序列
v (1) = Av (0) ,
(2) (1) 2 (0)
v = Av = A v ,
······
v = Av (k−1) = Ak v (0) ,
(k)
······
由矩阵特征值的定义知
Ax(i) = λi x(i) , i = 1, 2, · · · , n.
同理可得 " #
n
X µ ¶k−1
λi
v (k−1)
= λk−1
1 α1 x (1)
+ αi x (i)
.
i=2
λ1
¯ ¯
¯ λi ¯
又由于 ¯¯ ¯¯ < 1(i = 2, 3, · · · , n), 故对足够大的 k, 有
λ1
v (k−1) = λk−1
1 (α1 x(1) + ε(k−1) ), (8.5)
的按模最大的特征值.
解:取初始向量 v (0) = (0.0003, −0.0119, −0.0003)T , 按式 (8.2) 迭代得数据, 如
表 8-1 所示.
选第 1, 2 分量构成方程组
(
78 − 2p − q = 0,
−242 − 80p + q = 0,
λ2 − 2λ + 82 = 0,
于是当 k → ∞ 时, 有
(k)
(1) 当 |λ1 | > 1 时, vi → ∞.
(k)
(2) 当 |λ1 | < 1 时, vi → 0.
分量的变化太大, 使得计算过程可能产生 “溢出”. 为了克服这一不足, 通常采用规
范化迭代方式. 具体做法为:
任取非零微量 v (0) = u(0) = α1 x(1) + α2 x(2) + · · · + αn x(n) , 同样应使 α1 6= 0,
习惯上, 我们一样可以取 v (0) = (1, 1, · · · , 1)T . 用记号 max(v) 表示向量 v 的绝对
值最大的分量, 构造序列
v (1) Av (0)
v (1) = Au(0) = Av (0) , u(1) = = ,
max(v (1) ) max(Av (0) )
8.1 幂法与反幂法 · 187 ·
则有
" n µ ¶k #
X λi (i)
λk1 α1 x(1) + αi x
Ak v (0) i=2
λ1
(k) ( " #)
u = = µ ¶k
max(Ak v (0) ) n
X λi (i)
max λk1 α1 x(1) + αi x
i=2
λ1
" n µ ¶k #
X λi
(1) (i)
α1 x + αi x
i=2
λ1
= " n µ ¶k #
X λi
max α1 x(1) + αi x(i)
i=2
λ1
x(1)
→ , k → ∞.
max(x(1) )
这说明规范化迭代向量序列收敛到按模最大特征值 λ1 对应的特征向量.
同理, 可得到
" n µ ¶k #
X λi (i)
λk1 α1 x(1) + αi x
λ1
max(v (k)
) = max
( " ¶k−1
i=2
n µ #)
λi X
max α1 λk−1
+
1 αi x(1)x (i)
i=2
λ1
" n µ ¶k #
X λi
(1) (i)
max α1 x + αi x
i=2
λ1
=λ1 " n µ ¶k−1 # → λ1 , k → ∞.
X λ i (i)
max α1 x(1) + αi x
i=2
λ1
综合上述分析, 于是有:
定理 8.2 设 A ∈ Rn×n 有 n 个线性无关的特征向量, 其按模最大的特征值
λ1 满足
则有
x(1)
lim max(v (k) ) = λ1 , lim u(k) = . (8.8)
k→∞ k→∞ max(x(1) )
例 8.2 用 (规范化) 幂法计算
2 4 6
A=
3 9 15
4 16 36
表 8-2 用幂法计算的结果
(k) (k) (k) (k) (k) (k)
k v1 v2 v3 u1 u2 u3 λ1
0 1 1 1 1 1 1
1 12.00 27.00 56.00 0.2143 0.4820 1.000 56.00
2 8.357 19.98 44.57 0.1875 0.4483 1.000 44.57
3 8.168 19.60 43.92 0.1860 0.4463 1.000 43.92
4 8.157 19.57 43.88 0.1859 0.4460 1.000 43.88
5 8.156 19.57 43.88 0.1859 0.4460 1.000 43.88
8.1.2 幂法的加速
1. 原点平移法
考察矩阵
B = A − pI,
其中, p 为待选参数.
设 A 的特征值为 λ1 , λ2 , · · · , λn , 则 B 的相应特征值为 λ1 −p, λ2 −p, · · · , λn −p,
且矩阵 A, B 有相同的特征向量.
如果需要计算 A 的按模最大特征值 λ1 , 就可选择适当的 p, 使得 λ1 − p 仍是
B 的按模最大的特征值, 且使
¯ ¯ ¯ ¯
¯ λ2 − p ¯ ¯ λ2 ¯
¯ ¯ ¯ ¯
¯ λ1 − p ¯ < ¯ λ1 ¯ .
λ1 = λ1 (B) + p.
例 8.3 求矩阵
17 9 5
A=
0 810
−5 −5 −3
而且可以看出当 p = 5 时, 对 C = A − 5I 应用幂法效果会更佳, 因为
2. Rayleigh 商加速
为对应于向量 x 的Rayleigh 商.
定理 8.3 设 A ∈ Rn×n 为对称矩阵, 其特征值满足
相应的特征向量 x(i) (i = 1, 2, · · · , n) 满足
(
1, i = j,
(x(i) , x(j) ) =
0, i 6= j.
证明:由式 (8.6) 得
那么有
(Au(k) , u(k) ) (Ak+1 u(0) , Ak u(0) )
=
(k)
(u , u )(k)
(Ak u(0) , Ak u(0) )
à n n
! n
X X X
k+1 (i)
αi λi x , k (i)
αi λi x αi2 λ2k+1
i
= Ãi=1n i=1
! = i=1
n
X n
X X
αi λki x(i) , αi λki x(i) αi2 λ2k
i
i=1 i=1 i=1
" n µ ¶2k+1 #
X λi
α12 + αi2 "µ ¶2k #
i=2
λ 1 λ2
=λ1 " n µ ¶2k # = λ1 + O .
X λ i
λ1
2
α12 + αi
i=2
λ1
8.1 幂法与反幂法 · 191 ·
8.1.3 反幂法
反幂法是用来计算矩阵的按模最小特征值及特征向量的方法.
设 A ∈ Rn×n 为非奇异阵, 若 A 的特征值 λi (i = 1, 2, · · · , n) 满足
为避免矩阵求逆, 迭代向量可通过解线性方程组
Av (k) = u(k−1)
反幂法不仅可用于求按模最小的特征值, 还可以结合原点平移思想用于求任意
指定值附近的特征值及其相应的特征向量.
因为如矩阵 (A − P I)−1 存在, 则其特征值为
1 1 1
, ,··· , ,
λ 1 − p λ2 − p λn − p
而对应的特征向量仍为 x(1) , x(2) , · · · , x(n) . 如要想求得最靠近 p 的特征值, 设其为
λj , 则有
|λj − p| < |λi − p| , i 6= j,
P AP T = D = diag(λ1 , λ2 , · · · , λn ),
i j
1
..
.
cos θ sin θ i
1
Rij (θ) =
..
.
1
− sin θ cos θ j
..
.
1
8.2.2 Jacobi 方法
先以二阶矩阵为例, 设有二阶对称矩阵
" #
a11 a12
A=
a21 a22
和平面旋转矩阵 " #
cos θ sin θ
Rθ = .
− sin θ cos θ
· 194 · 第8章 矩阵的特征值与特征向量计算
考察
" #" #" #
cos θ sin θ a11 a12 cos θ − sin θ
B= Rθ ART
θ =
− sin θ cos θ a21 a22 sin θ cos θ
" #
b11 b12
= ,
b21 b22
其中
相应的特征向量为
下面我们将这一思想推广到一般的 n 阶实对称矩阵.
设矩阵 A ∈ Rn×n 是对称矩阵, 记 A0 = A, 对 A 作一系列旋转相似变换, 即
A1 =P 1 A0 P T
1,
A2 =P 2 A1 P T
2,
······
Ak =P k Ak−1 P T
k,
······
8.2 雅可比 (Jacobi) 方法 · 195 ·
变换中的 Ak (k = 1, 2, · · · ) 显然仍是对称矩阵, 而
ik jk
1
..
.
cos θk sin θk i
k
1
P k = Rik jk (θk ) =
..
,
.
1
− sin θk cos θk jk
..
.
1
¯ ¯
¯ (k−1) ¯
其中, ik , jk 是由 Ak−1 中将 a(k−1)
ik jk 元素化为零元素的位置所确定的 , 且 ¯aik jk ¯ =
¯ ¯
¯ (k−1) ¯
max ¯apq ¯.
p6=q
对 Ak−1 进行旋转相似变换, 根据矩阵乘积的运算规则, 只有第 ik 行、第 jk 行
和第 ik 列、第 jk 列的元素发生变化, 其他元素不动, 且有
其余元素
a(k) (k) (k−1)
pq = aqp = apq , p, q 6= ik , jk .
当 θk 满足
(k−1)
2aik jk 1 π
tan 2θk = (k−1) (k−1)
= , |θk | 6 ,
aik ik − ajk jk dk 4
我们有
(k) (k)
aik jk = ajk ik = 0.
π
特别地, 当 a(k−1) (k−1)
ik ik = ajk jk 时, 取 θk = .
4
· 196 · 第8章 矩阵的特征值与特征向量计算
其中
(k−1) (k−1)
aik ik − ajk jk sign(dk )
dk = (k−1)
, tk = p .
2aik jk |dk | + d2k + 1
事实上, 由于
1
tan 2θk = ,
dk
则有
tan2 θk + 2dk tan θk − 1 = 0.
解得 θk , 并考虑到计算时数值稳定性, 故
1
p , dk > 0,
1 dk + d2k + 1
tk = p =
dk ± d2k + 1 1
p , dk < 0.
−dk − d2k + 1
于是
sign(dk ) 1
tan θk = p = .
2
|dk | + dk + 1 tk
同理可得
n
X
2
kAk kF = tr(AT
k Ak ) = λ2i (Ak ).
i=1
8.2 雅可比 (Jacobi) 方法 · 197 ·
2 2
kAk−1 kF = kAk kF .
所以
X X (k−1)
X
(a(k) 2
pq ) = (a(k−1)
pq )2 − 2(aik jk )2 < (a(k−1)
pq )2 .
p6=q p6=q p6=q
Ak = P k Ak−1 P T
k, k = 1, 2, 3, · · · ,
则有
lim Ak = D = diag(λ1 , λ2 , · · · , λn ).
k→∞
又根据平面旋转变换的实施规则, 有
¯ ¯ ¯ ¯
¯ (k−1) ¯ ¯ ¯
¯aik jk ¯ = max ¯a(k−1)
pq ¯.
p6=q
故
X (k−1)
S(Ak−1 ) = (a(k−1)
pq )2 6 n(n − 1)(aik jk )2 ,
p6=q
· 198 · 第8章 矩阵的特征值与特征向量计算
即
S(Ak−1 ) (k−1)
6 (aik jk )2 . (8.17)
n(n − 1)
由式 (8.16) 和 (8.17) 得
· ¸
2
S(Ak ) 6S(Ak−1 ) 1 −
n(n − 1)
· ¸2 · ¸k
2 2
6S(Ak−2 ) 1 − 6 · · · 6 S(A0 ) 1 − .
n(n − 1) n(n − 1)
对高于二阶的矩阵 A(n > 2), 有
lim S(Ak ) = 0.
k→∞
P k · · · P 2 P 1 AP T T T
1 P 2 · · · P k ≈ D = diag(λ1 , λ2 , · · · , λn ).
记 PT = PT T T
1 P 2 · · · P k . 那么矩阵 P
T
的每一列就是 A 的一个近似特征向量.
8.2.3 Jacobi 过关法
v0
设置第 1 道关 v1 = , 在 A 的非对角线元素中按行 (或按列) 扫描, 如非对
n
角元素
|aij | > v1 ,
这样经过一系列的关口 v2 , v3 , · · · , vr , 直到满足
ρ
vr 6 ,
n
其中, ρ 是精度要求.
8.3 QR 算法
对于实对称矩阵, 经过一系列的正交相似变换可求得实对称矩阵的全部特征值
和特征向量, 而对于一般的实矩阵 A ∈ Rn×n , 我们也可以利用正交相似变换去寻
找其特征值, 下面讨论的 QR 方法是求一般矩阵全部特征值的一种迭代算法, 是计
算一般阶数不太大的矩阵全部特征值最有效的方法之一.
8.3.1 QR 分解
H = I − 2uuT
Hx = kxk2 d,
则矩阵 A 可写为
A = (a1 , a2 , · · · , an ).
第 1 步, 取 x = a1 , d = −sign(a11 )e1 , 令
a1 − σ1 e1
u1 = , (8.19)
ka1 − σ1 e1 k2
其中
σ1 = −sign(a11 ) ka1 k2 .
令
Q1 = I − 2u1 uT
1,
则 Q1 a1 = σ1 e1 . 于是有
³ ´
(1)
Q1 A =Q1 (a1 , a2 , · · · , an ) = σ1 e1 , a2 , · · · , a(1)
n
(1) (1)
σ1 a12 · · · a1n
(1)
0 a(1) · · · a2n
22
= . .. .. .
.. . .
(1) (1)
0 an2 · · · ann
8.3 QR 算法 · 201 ·
(1)
e1 = (1, 0, · · · , 0)T ∈ Rn−1 ,
取
1 (1) (1)
u2 = (ā − σ2 e1 ) ∈ Rn−1 ,
ρ2 2
其中 ° ° q
(1) ° (1) ° (1)
σ2 = −sign(a22 ) °ā2 ° 2 , ρ2 = 2(σ22 − σ2 a22 ).
作
H 2 = I n−1 − 2u2 uT
2,
则有
(1) (1)
H 2 ā2 = σ2 e1 .
构造矩阵 " #
1 0T
Q2 = ,
0 H2
则 ³ ´
(1) (2)
Q2 Q1 A = σ1 e1 , a12 e1 + σ1 e2 , a3 , · · · , a(2)
n ,
即将第二列对角元下的元素全化为零.
若上述过程已经完成了 k − 1 步, 则有
à k−2
!
X (i) (k−1) (k−1)
Qk−1 Qk−2 · · · Q1 A = σ1 e1 , · · · , ai,k−1 ei + σk−1 ek−1 , ak , · · · , an
i=1
(1) (1) (1) (1)
σ1 a12 ··· a1,k−1 a1k ··· a1n
(2) (2) (2)
0 σ1 ··· a2k a2k ··· a2n
.. .. .. ..
0 . . . .
(k−1) (k−1)
=
σk−1 ak−1,k ··· ak−1,n .
.. ..
. . 0
(k−1)
akk ···
(k−1)
akn
.. .. ..
. . .
(k−1) (k−1)
0 0 ··· 0 ank ann
进行第 k 步, 记 ā(k−1)
k
(k−1) (k−1) (k−1) (k−1)
= (akk , ak+1,k , · · · , ank )T , e1 = (1, 0, · · · , 0)T ∈
Rn−k+1 . 令
1 (k−1) (k−1)
uk = (ā − σk e1 ),
ρk k
· 202 · 第8章 矩阵的特征值与特征向量计算
其中 ° ° q
(k−1) ° (k−1) ° (k−1)
σk = −sign(akk ) °āk ° , ρk = 2(σk2 − σk akk ).
2
作
H k = I n−k+1 − 2uk uT
k,
则有
(k−1) (k−1)
H k āk = σk e1 .
构造矩阵 " #
I k−1 0T
Qk = ,
0 Hk
则
à k−1
!
X (i) (k)
Qk Qk−1 Qk−2 · · · Q1 A = σ1 e1 , · · · , ai,k ei + σk ek , ak+1 , · · · , a(k)
n ,
i=1
A = QR.
这就是矩阵 A 的 QR分解.
8.3.2 QR 算法
作矩阵
A2 = R1 Q1 .
对新作的矩阵 A2 进行 QR 分解, 得
A2 = Q2 R2 .
再作矩阵
A3 = R2 Q2 ,
..
.
习 题 8 · 203 ·
求得 Ak 后将 Ak 进行 QR 分解, 有
Ak = Qk Rk .
这样作矩阵
Ak+1 = Rk Qk ,
..
.
Ak+1 =Rk Qk = QT
k Ak Qk
=QT T T T
k Qk−1 Ak−2 Qk−1 Qk = · · · = Qk · · · Q1 A1 Q1 · · · Qk .
或
(k) (k) (k)
lim aij = 0 (i > j), lim aii = λi , lim aij (i < j) 不确定, k → ∞.
k→∞ k→∞ k→∞
证明: 略.
若 A ∈ Rn×n 的等模特征值中只有实重特征值或多重的复共轭特征值, 则由
QR 算法产生的 {Ak } 本质上收敛于分块上三角型矩阵 (对角块为一阶或二阶子
块), 且每个 2×2 子块给出 A 的一对共轭复特征值.
习 题 8
1. 用 (规范化) 幂法计算下列矩阵按模最大的特征值及对应的特征向量:
· 204 · 第8章 矩阵的特征值与特征向量计算
1 2 3 −4 14 0
(1) A =
2 3 4
. (2) B =
−5 13 0
.
3 4 5 −1 0 2
精确到第 3 位小数稳定.
2. 如果定理 8.1 中的特征值 λi (i = 1, 2, · · · , n) 满足条件
Hx = y.
8. 用 Householder 变换将对称阵
1 4 3
A=
4 5 5
3 5 10
化为相似的三对角阵.
习 题 8 · 205 ·
9. 用 Householder 变换将矩阵
1 2 2
2
−1
A= 2 3
1
2 −1
3
化为一个上三角形矩阵, 从而作出 A = QR 的分解.
10. 用 QR 算法求矩阵
2 4 6
A=
3 9 15
4 16 36
的全部特征值 (迭代 2 次).
第9章 上机实习课题
9.1 插值问题的数值实验
1
1. 对于函数 f (x) = , x ∈ [−1, 1], 取 n + 1 个基点,
1 + (5x)2
xi = −1 + ih, i = 0, 1, 2, · · · , n,
2
其中, h = . 要求:
n
(1) 对 n = 2, 4, 6, 8, 10 分别作 n 次插值多项式 Pn (x), 并在同一坐标系分别画
出 f (x) 与 Pn (x).
(2) 在非节点处分别计算 f (x) 与 Pn (x) 的最大相对误差:
¯ ¯
¯ f (x) − Pn (x) ¯
max ¯ ¯ , n = 2, 4, 6, 8, 10.
16x61 ¯ f (x) ¯
x6=xi
9.2 曲线拟合问题的数值实验
1. 对实验数据 (xi , yi ), i = 1, 2, · · · , N , 要求:
(1) 利用最小二乘法原理, 编制确定拟合多项式
Pn (x) = a0 + a1 x + a2 x2 + · · · + an xn , n ¿ N,
的数值软件, 要求在软件中能任意令拟合多项式 Pn (x) 中第 p 项 (0 6 p 6 n) 的系
数 ap = 0, 并能自动调整相应的正规方程组.
(2) 已知实验数据如表 9-1 所示:
9.3 数值积分的数值实验 · 207 ·
表 9-1 实验数据表
x y x y
5 1.0029 30 0.9979
10 1.0023 35 0.9978
15 1.0000 40 0.9981
20 0.9990 45 0.9987
25 0.9983 50 0.9996
表 9-2 世界人口数据
年份 人口 (亿)
1000 3.40
1650 5.54
1800 9.07
1900 16.10
1950 25.09
1970 36.50
9.3 数值积分的数值实验
Z b
1. 写出一个如下的计算 f (x) dx 的子程序:先将区间 [a, b] 细分成 n 个相
a
等的子区间, 然后, 使用经过修改适用于 n 个不同子区间的三点 Gauss 公式, 并用
下面的题目测试你所编的程序.
Z b
(1) x5 dx, n = 1, 2, 10.
a
· 208 · 第9章 上机实习课题
Z b
(2) sin xdx, n = 1, 2, 3, 4.
a
2. 变上限有积分所确定的函数, 由方程
Z x
dt
l(x) =
2 ln t
x (t + h) = x (t) + ω1 F1 + ω2 F2 + ω3 F3 + ω4 F4
给出, 其中
F1 = hf (t, x) ,
µ ¶
2 2
F2 = hf t + 5 h, x + 5 F1 ,
à √ !
14 − 35 5
F3 = hf t + h, x + c3,1 F1 + c3,2 F2 ,
16
F4 = hf (t + h, x + c4,1 F1 + c4,2 F2 + c4,3 F3 ) .
这里, 合适的常数是
¡ √ ¢ ¡ √ ¢
3 −963 + 476 5 5 757 − 324 5
c3,1 = , c3,2 = ,
1024 1024
√ √
−3365 + 2094 5 −975 − 3046 5
c4,1 = , c4,2 = ,
6040 2552
¡ √ ¢
32 14 595 + 6374 5
c4,3 = ,
24 085
9.5 方程求根的数值实验 · 209 ·
√ ¡ √ ¢
263 + 24 5 125 1 − 8 5
ω1 = , ω2 = ,
1812 3828
¡ √ ¢ ¡ √ ¢
1024 3346 + 1623 5 2 15 − 2 5
ω3 = , ω4 = .
5 924 787 123
选择一个已知其解的微分方程, 比较两种四阶 Runge-Kutta(上面所述方法与标准
四阶 Runge-Kutta) 法, 打印每一步的误差. 在每一步, 这两个误差的比是否为常
数?每种方法各有什么优点和缺点?
事实上, 在任何的 Runge-Kutta 法都有许多种. 阶数越高, 公式就越复杂, 由于
一般四阶 Runge-Kutta 法给出的方程有误差 O(h5 ), 并且相当简单, 所以它是最通
用的四阶 Runge-Kutta 法, 本题中的误差项也是 O(h5 ), 并且在某种意义下它是最
佳的.
3. 给定两点边值问题
(
y 00 + y = −x,
x ∈ (0, 1),
y(0) = y(1) = 0,
的数值解.
(4) 试从理论上探讨上面的现象.
9.5 方程求根的数值实验
1. 当用 Newton 迭代法求方程 f (x) = 0 的根时, 我们从 x0 开始, 并用公式
f (xn )
xn+1 = xn − , n = 0, 1, 2, · · · ,
f 0 (xn )
下式给出:
f (x2n )
x2n+1 = x2n − f 0 (x ) ,
2n
f (x2n+1 )
x2n+2 = x2n+1 − .
f 0 (x2n )
对于以上建议的两种方法, 以几个已知根的简单方程为例, 与 Newton 法作
数值比较, 打印出每步迭代中每种方法的误差, 以检查收敛性, 这两种算法的效果
如何?
2. 在 Newton 法中, 每做一步就从一个给定的 x 上得到一个新的点 x − h, 这
f (x)
里h= 0 , 不难按下面要求将它设计得更精细些:如果 |f (x − h)| > |f (x)|, 则
f (x)
h
不用这个 h 值, 而用 来代替, 试验这个精细的方案是否可行?
2
3. 选取一个函数, 证明数值验证迭代公式
2f 0 (xn ) f (xn )
xn+1 = xn − 2 , n = 0, 1, 2, · · · ,
2f 0 (xn ) − f 00 (xn ) f (xn )
在单根处是立方收敛的, 但在多重根处则是线性收敛的.
9.6 线性方程组求解的数值实验
1. 对从 2 到 9 的每一个 n 值, 解 n 阶方程组 Ax = b. 在这里 A 和 b 如下
定义:
A = (aij )n×n , b = (b1 , b2 , · · · , bn )T ,
−1
aij = (i + j − 1) , i, j = 1, 2, · · · , n,
bi = p (n + i − 1) − p (i − 1) , i = 1, 2, · · · , n,
x ¡ 2 © ª¢
其中, p (x) = 2 + x2 −7 + n2 [14 + n (12 + 3n)] . 解释发生的现象.
24
2. 考虑一种特殊的对角线元素不为零的双对角线线性方程组 (以 n = 7 为例)
d1 x1 b1
a1 d2 x2 b2
a2 d3 x3 b3
a3 d4 a4 x4 = b4 ,
d5 a5 x5 b5
d6 a6
x6 b6
d7 x7 b7
9.8 矩阵条件数的估计 · 211 ·
的逆阵时所出现的计算上的困难, 并思考解决方案.
9.7 矩阵特征值计算的数值实验
1. 在下面矩阵 A 中, 除元素 a34 外, 所有元素都为常数
9.1 3.0 3.6 4.0
4.2 5.3 4.7 1.6
A=
3.2 1.7 9.4 x
,
6.1 4.9 3.5 6.2
的按模最小特征值时所遇到的困难, 并思考解决方案.
9.8 矩阵条件数的估计
进行误差估计的比较, 给定 3 个不同的线性方程组.
第 1 个方程组是 A1 x = b(1) , 这里 A1 = (aij )10×10 是 Hilbert 矩阵, 其中
右端 b(2) = (0.000 091 43, 0.876 271 56, 1.608 695 04, 2.130 571 23)T , 准确解为
° °
x(2) = (1, 1, 1, 1)T 且 kA2 k∞ = 2.13 和 °A−12
° = 1.15 × 1016 .
∞
(3)
第 3 个方程组 A3 x = b 是一个具有好的性质的 14 阶良态方程组, 系数矩
阵为 Ã !
C D
A3 = ,
E C
且
5 4 7 5 6 7 5
4 12 8 7 8 8 6
7 8 10 9 8 7 7
E=
5 7 9 11 9 7 5
,
6 8 8 9 10 8 9
7 8 7 7 8 10 10
5 6 7 5 9 10 10
1 1 1 1 1 1
5
8 9 10 11 12 13
1 1 1 1 1 1
6
9 10 11 12 13 15
1 1 1 1 1 1
7
C=D= 10 11 12 13 15 16 .
0 0 0 5 0 0 0
0 0 6 0 0 0 0
0 7 0 0 0 0 0
8 0 0 0 0 0 0
选取右端项 b(3) 使得方程的解为 x(3) = (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)T .
(1) 对上面提到的 3 个方程组, 可以用你掌握的各种解法, 求出计算解 x̄(1) , x̄(2) ,
x̄(3) , 并且计算
° ° ° ° ° ° ° °
°x(i) − x̄(i) °
° (i) ° ° (i) (i) ° ° (i) (i) ° ° °
°r ° = °b − Ai x̄ ° , °x − x̄ ° , °x(i) ° , i = 1, 2, 3.
9.8 矩阵条件数的估计 · 213 ·