数值计算方法
数值计算中的误差分析
张晓平
2019 年 9 月 2 日
武汉大学数学与统计学院
图 1: 教材: 1. 计算方法,李大美、李素贞、朱方生,武汉大学出版社;2. 现 代数值计算方法,肖筱南,北京大学出版社
课件及作业见网址:www.xpzhang.me
1
目录
1. 数值计算简介
2. 误差
3. 数值计算的误差估计
4. 选用和设计算法应遵循的原则
2
数值计算简介
数值计算简介
现代科学的三种研究方式
现代科学的三种研究方式
当今世界科学活动的三种主要方式:
• 理论
• 实验
• 科学计算
3
数值计算简介
解决科学工程问题的几个步骤
解决科学工程问题的几个步骤
实 际 问 题
数 学 模 型
计 算 方 法
程 序 设 计
上 机 求 解
应用数学 计算数学
图 2: 解决科学工程问题的步骤
4
数值计算简介
研究数值方法的必要性
研究数值方法的必要性
例
解线性方程组
Ax = b, A∈ Rn×n, b∈ Rn 定理 : Crammer 法则
A非奇异 =⇒ 此方程组有唯一解,且xi= |Ai|
|A|, i = 1, 2,· · · , n.
该结论从理论上讲非常漂亮,它把线性方程组的求解问题归结为计算 n + 1 个 n 阶行列式的计算问题。
5
研究数值方法的必要性
而对于行列式,可以采用 Laplace 展开定理进行计算:
定理 : Laplace 展开定理
|A| = ai1|Ai1| + ai2|Ai2| + · · · + ain|Ain|, Aij为aij的代数余子式
6
研究数值方法的必要性
实际操作中,该方法的运算量大的惊人,以至于完全不能用于实际计 算。事实上,设 k 阶行列式所需乘法运算的次数为 mk,则
mk= k + kmk−1, 于是有
mn = n + nmn−1
= n + n[(n − 1) + (n − 1)mn−2]
=· · ·
= n + n(n − 1) + n(n − 1)(n − 2) +· · · + n(n − 1) · · · 3 · 2
> n!
故用 Crammer 法则和 Laplace 展开定理求解一个 n 阶线性方程组,所 需乘法运算的次数就大于
(n + 1)n! = (n + 1)!.
7
研究数值方法的必要性
在一台百亿次的计算机上求解一个 25 阶线性方程组,则至少需要 26!
1010× 3600 × 24 × 365 ≈ 4.0329× 1028
3.1526× 1017 ≈ 13亿年 而用下章介绍的消去法求解,则需要不到一秒钟。
8
数值计算简介
数值计算方法的研究对象
数值计算方法的研究对象
数值分析的研究对象为:
• 线性代数
• 曲线拟合
• 数值逼近
• 微积分
• 微分方程
• 积分方程
• · · ·
9
数值计算简介
数值计算方法的研究任务
数值计算方法的研究任务
数值分析的研究任务为:
• 算法设计
• 理论分析
• 算法的收敛性
• 稳定性
• 误差分析
• 复杂度分析
• 时间复杂度
• 空间复杂度
•
10
数值计算简介
数值计算方法的特点
数值计算方法的特点
数值分析的特点为:
• 既有数学的抽象性与严格性,又有广泛的应用性
• 有自身的研究方法和理论系统
• 与计算机紧密结合,实用性很强
11
误差
误差
误差来源与分类
误差来源与分类
误差按照其来源可分为四类,即 模型误差
数学模型只是复杂客观现象的一种近似,它与实际问题总会存在 一定误差。
观测误差
由于测量精度和手段的限制,观测或实验得来的物理量总会与实 际量之间存在误差。
截断误差
数学模型的精确解与由数值方法求出的近似解之间的误差。如 ex≈ 1 + x +x2!2 +· · · +x10!10
R10(x) = ξ11!11
12
误差来源与分类
误差按照其来源可分为四类,即 模型误差
数学模型只是复杂客观现象的一种近似,它与实际问题总会存在 一定误差。
观测误差
由于测量精度和手段的限制,观测或实验得来的物理量总会与实 际量之间存在误差。
截断误差
数学模型的精确解与由数值方法求出的近似解之间的误差。如 ex≈ 1 + x +x2!2 +· · · +x10!10
R10(x) = ξ11!11
12
误差来源与分类
误差按照其来源可分为四类,即 模型误差
数学模型只是复杂客观现象的一种近似,它与实际问题总会存在 一定误差。
观测误差
由于测量精度和手段的限制,观测或实验得来的物理量总会与实 际量之间存在误差。
截断误差
数学模型的精确解与由数值方法求出的近似解之间的误差。如 ex≈ 1 + x +x2!2 +· · · +x10!10
R10(x) = ξ11!11
12
误差来源与分类
舍入误差
由于计算机的字长有限,进行数值计算的过程中,对计算得到的 中间结果数据要使用“四舍五入”或其他规则取近似值,因而使 计算过程有误差。
典故
1990 年 2 月 25 日,海湾战争期间,在沙特阿拉伯宰赫兰的爱国 者导弹防御系统因浮点数舍入错误而失效,该系统的计算机精度 仅有 24 位,存在 0.0001% 的计时误差,所以有效时间阈值是 20 个小时。当系统运行 100 个小时以后,已经积累了 0.3422 秒的误 差。这个错误导致导弹系统不断地自我循环,而不能正确地瞄准 目标。结果未能拦截一枚伊拉克飞毛腿导弹,飞毛腿导弹在军营 中爆炸,造成 28 名美国陆军死亡。
13
误差来源与分类
舍入误差
由于计算机的字长有限,进行数值计算的过程中,对计算得到的 中间结果数据要使用“四舍五入”或其他规则取近似值,因而使 计算过程有误差。
典故
1990 年 2 月 25 日,海湾战争期间,在沙特阿拉伯宰赫兰的爱国 者导弹防御系统因浮点数舍入错误而失效,该系统的计算机精度 仅有 24 位,存在 0.0001% 的计时误差,所以有效时间阈值是 20 个小时。当系统运行 100 个小时以后,已经积累了 0.3422 秒的误 差。这个错误导致导弹系统不断地自我循环,而不能正确地瞄准 目标。结果未能拦截一枚伊拉克飞毛腿导弹,飞毛腿导弹在军营 中爆炸,造成 28 名美国陆军死亡。
13
误差
误差与有效数字
误差与有效数字
定义 : 绝对误差与绝对误差限
设某个量的精确值为 x,其近似值为 x⋆,则称 E(x) = x − x⋆
为近似值 x⋆ 的绝对误差,简称误差。若存在 η > 0,使得
|E(x)| = |x − x⋆| ⩽ η
则称 η 为近似值 x⋆ 的绝对误差限,简称误差限或精度。
η 越小,表示近似值 x⋆ 的精度越高。
x⋆− η⩽ x ⩽ x⋆+ η or x = x⋆± η
14
误差与有效数字
定义 : 绝对误差与绝对误差限
设某个量的精确值为 x,其近似值为 x⋆,则称 E(x) = x − x⋆
为近似值 x⋆ 的绝对误差,简称误差。若存在 η > 0,使得
|E(x)| = |x − x⋆| ⩽ η
则称 η 为近似值 x⋆ 的绝对误差限,简称误差限或精度。
η 越小,表示近似值 x⋆ 的精度越高。
x⋆− η⩽ x ⩽ x⋆+ η or x = x⋆± η
14
误差与有效数字
例
用毫米刻度的直尺量一长度为 x 的物体,测得其近似值为 x⋆ = 84mm。
因直尺以 mm 为刻度,其误差不超过 0.5mm,即有
|x − 84| ⩽ 0.5 mm or x = 84 ± 0.5 mm.
15
误差与有效数字
例
测量 100m 和 10m 的两个长度,若它们的绝对误差均为 1cm,显 然前者的测量更为精确。
由此可见,决定一个量的近似值的精确度,除了绝对误差外,还必须 考虑该量本身的大小,为此引入相对误差的概念。
16
误差与有效数字
例
测量 100m 和 10m 的两个长度,若它们的绝对误差均为 1cm,显 然前者的测量更为精确。
由此可见,决定一个量的近似值的精确度,除了绝对误差外,还必须 考虑该量本身的大小,为此引入相对误差的概念。
16
误差与有效数字
定义 : 相对误差与相对误差限
近似值 x⋆ 的相对误差是绝对误差与精确值之比,即 Er(x) = E(x)
x = x − x⋆ x . 实际中精确值 x 一般无法知道,通常取
Er(x) = E(x)
x⋆ = x − x⋆ x⋆ . 若存在 δ > 0,使得
|Er(x)| = x − x⋆
x⋆
⩽ δ, 则称 δ 为近似值 x⋆ 的相对误差限。
17
误差与有效数字
例
|x − x⋆| ⩽ 1cm 时,测量 100m 物体时的相对误差为
|Er(x)| = 1
10000 = 0.01%, 测量 10m 物体时的相对误差为
|Er(x)| = 1
1000 = 0.1%.
18
误差与有效数字
定义 : 有效数字
若近似值 x⋆ 的绝对误差限是某一位的半个单位,就称x⋆ 精确到 这一位。更进一步,若从该位直到 x⋆ 的第一位非零数字共有 n 位,则称x⋆ 有 n 位有效数字。
给定数 具有 5 位有效数字的近似值 358.467 358.47
0.00427511 0.0042751 8.000034 8.0000 8.000034× 103 8000.0
19
误差与有效数字
任何一个实数 x 经四舍五入后得到的近似值 x⋆ 都可写成 x⋆=±(α1× 10−1+ α2× 10−2+· · · + αn× 10−n)× 10m, 其中 m∈ Z,α1∈ {1, · · · , 9},α2,· · · , αn∈ {0, 1, · · · , 9}。当其绝对误 差限满足
|x − x⋆| ⩽ 1
2× 10m−n 时,则称近似值 x⋆ 具有 n 位有效数字。
20
误差与有效数字
例
验证 e = 2.718281828459046· · · 的近似值 2.71828 具有 6 位有效 数字
解
2.71828 =(
2× 10−1+ 7× 10−2+ 1× 10−3 +8× 10−4+ 2× 10−5+ 8× 10−6)
× 10
=⇒ m = 1, n = 6.
∵ |e − 2.71828| = 0.000001828 · · · < 12× 10−5,
∴ 它具有 6 位有效数字
21
误差与有效数字
定理
设某数 x 的近似值为 x⋆,则
x⋆有n位有效数字 =⇒ |x − x⋆| ⩽ 1
2× 10m−n. 注
当 m 一定时,有效数字位数 n 越多,其绝对误差限越小。
22
误差与有效数字
定理
设某数 x 的近似值为 x⋆ 有如下形式
x⋆=±(α1× 10−1+ α2× 10−2+· · · + αn× 10−n)× 10m, 则
• 若 x⋆ 有 n 位有效数字,则
|Er(x)| ⩽ 1
2α1 × 10−(n−1).
• 若
|Er(x)| ⩽ 1
2(α1+ 1)× 10−(n−1) 则 x⋆ 至少有 n 位有效数字。
23
误差
证明
由x⋆=±(α1× 10−1+ α2× 10−2+· · · + αn× 10−n)× 10m可知 α1× 10m−1⩽ |x⋆| ⩽ (α1+ 1)× 10m−1
所以,
|E⋆r(x)| = |x − x⋆|
|x⋆| ⩽
1
2× 10m−n α1× 10m−1 = 1
2α1 × 10−(n−1) 反之,由
|x − x⋆| = |x⋆| · |E⋆r(x)| ⩽ (α1+ 1)× 10m−1· 1
2(α1+ 1)× 10−(n−1)
= 1
2× 10m−n 知,x∗ 至少具有 n 位有效数字。
24
误差
例 为使 √
20 的近似值的相对误差小于 1%,问至少应取几位有效数 字?
√解
20 的近似值的首位非零数字是 α1= 4,故
|E⋆r(x)| = 1
2× 4× 10−(n−1)< 1% 可解得 n > 2,故取 n = 3 即可满足要求。
25
误差
例 为使 √
20 的近似值的相对误差小于 1%,问至少应取几位有效数 字?
√解
20 的近似值的首位非零数字是 α1= 4,故
|E⋆r(x)| = 1
2× 4× 10−(n−1)< 1%
可解得 n > 2,故取 n = 3 即可满足要求。
25
数值计算的误差估计
数值计算的误差估计
设有可微函数 y = f(x1, x2,· · · , xn),其中 x1∗, x∗2,· · · , x∗n 分别是 x1, x2,· · · , xn 的近似值,记 y 的近似值为 y∗= f(x∗1, x∗2,· · · , x∗n). 由
E(y∗) = y − y∗= f(x1, x2,· · · , xn) − f(x∗1, x∗2,· · · , x∗n)
≈
∑n i=1
∂f(x∗1, x,2· · · , x∗n)
∂x∗i · (xi− x∗i),
Er(y∗) = E(y∗) y∗ ≈
∑n i=1
∂f(x∗1, x,2· · · , x∗n)
∂x∗i ·x∗i
y∗ ·xi− x∗i x∗i 可知,
|E(y∗)| ⩽
∑n i=1
∂f(x∗1, x∗2,· · · , x∗n)
∂x∗i
· E(x∗i),
|Er(y∗)| ⩽
∑n i=1
x∗i y∗
·
∂f(x∗1, x∗2,· · · , x∗n)
∂x∗i
· Er(x∗i).
26
数值计算的误差估计
定义 称
∂f(x∗1, x∗2,· · · , x∗n)
∂x∗i
, x∗i
y∗ ·
∂f(x∗1, x∗2,· · · , x∗n)
∂x∗i
为各个 x∗i 对 y∗ 的绝对误差和相对误差的增长因子。
27
数值计算的误差估计
例
试估计 y = f(x1, x2,· · · , xn) = x1+ x2+· · · + xn 的绝对误差与相 对误差。
解 因 ∂f
∂xi = 1,故
• 和的绝对误差不会超过各项的绝对误差之和,因
E(y∗) =
∑n i=1
E(x∗i) =⇒ |E(y∗)| ⩽
∑n i=1
|E(x∗i)|,
• 和的相对误差不会超过各项中最大的相对误差,因
|Er(y∗)| ⩽
∑n i=1
x∗i y∗
|Er(x∗i)| ⩽ max
1⩽i⩽n|Er(x∗i)|
∑n i=1
|x∗i|
|y∗| = max
1⩽i⩽n|Er(x∗i)|.
28
数值计算的误差估计
例
试估计 y = f(x1, x2,· · · , xn) = x1+ x2+· · · + xn 的绝对误差与相 对误差。
解 因 ∂f
∂xi = 1,故
• 和的绝对误差不会超过各项的绝对误差之和,因
E(y∗) =
∑n i=1
E(x∗i) =⇒ |E(y∗)| ⩽
∑n i=1
|E(x∗i)|,
• 和的相对误差不会超过各项中最大的相对误差,因
|Er(y∗)| ⩽
∑n i=1
x∗i y∗
|Er(x∗i)| ⩽ max
1⩽i⩽n|Er(x∗i)|
∑n i=1
|x∗i|
|y∗| = max
1⩽i⩽n|Er(x∗i)|.
28
数值计算的误差估计
例
试估计 y = f(x1, x2,· · · , xn) = x1+ x2+· · · + xn 的绝对误差与相 对误差。
解 因 ∂f
∂xi = 1,故
• 和的绝对误差不会超过各项的绝对误差之和,因
E(y∗) =
∑n i=1
E(x∗i) =⇒ |E(y∗)| ⩽
∑n i=1
|E(x∗i)|,
• 和的相对误差不会超过各项中最大的相对误差,因
|Er(y∗)| ⩽
∑n i=1
x∗i y∗
|Er(x∗i)| ⩽ max
1⩽i⩽n|Er(x∗i)|
∑n i=1
|x∗i|
|y∗| = max
1⩽i⩽n|Er(x∗i)|.
28
数值计算的误差估计
例
测得某桌面的长 a 的近似值为 a∗ = 120cm,宽 b 的近似值为 b∗= 60cm,若已知|a − a∗| ⩽ 0.2cm,|b − b∗| ⩽ 0.2cm,试求近似 面积 S∗= a∗b∗的绝对误差限和相对误差限。
解
因 S∗= a∗b∗, ∂a∂S∗∗ = b∗, ∂S∂b∗∗ = a∗,故
|E(S∗)| ⩽ |b∗||E(a∗)| + |a∗||E(b∗)| ⩽ 60 × 0.2 + 120 × 0.1 = 24 cm2. 且
|Er(S∗)| = E(S∗)
S∗
= |E(S∗)| a∗b∗ ⩽ 24
7200≈ 0.33%.
29
选用和设计算法应遵循的原则
选用和设计算法应遵循的原则
一、选用数值稳定的计算公式,控制舍入误差的传播
若算法不稳定,则数值计算的结果就会严重背离数学模型的真实结果。
因此在选择数值计算公式来进行近似计算时,应特别注意选用那些在 计算过程中不会导致误差迅速增长的计算公式。
30
选用和设计算法应遵循的原则
例 计算积分
In= e−1
∫1 0
xnexdx, n = 0, 1, 2,· · ·
31
选用和设计算法应遵循的原则
算法 1
In= 1 − nIn−1, I0= 1 − e−1≈ 0.6321.
matlab code t0 = 0.6321;
for i = 1:9
fprintf('%10.5 f\n', t0);
t1 = 1 - i * t0;
t0 = t1;
end
running result 0.63210 0.36790 0.26420 0.20740 0.17040 0.14800 0.11200 0.21600 -0.72800
32
选用和设计算法应遵循的原则
误差分析
0 < In< e−1 max
0⩽x⩽1(ex)
∫1 0
xndx = 1 n + 1 知
I7< 1
8 = 0.1250, I8< 1
9 ≈ 0.1111.
由此可知以上算法得到的 I7, I8的结果时错误的。设 In 的近似解 为 I∗n,由
In= 1 − nIn−1
I∗n= 1 − nI∗n−1 ⇒ |en| = (n − 1)|en−1|
可知,由于 I0 本身有不超过 0.5× 10−4 的舍入误差,即|e0| ⩽ 0.5× 10−4 此误差在运算中传播、积累很快,传播到 I7 和 I8时,
该误差已放大了 7 与 8 倍,从而使得 I7 和 I8的结果面目全非。
33
选用和设计算法应遵循的原则
算法 2:
In−1= 1
n(1 − In)
matlab code t0 = 0.1124;
for i = 7: -1:0
fprintf('%10.5 f\n', t0);
t1 = (1 - t0) / i;
t0 = t1;
end
running result 0.11240 0.12680 0.14553 0.17089 0.20728 0.26424 0.36788 0.63212
34
选用和设计算法应遵循的原则
误差分析 由
In> e−1 min
0⩽x⩽1(ex)
∫1 0
xndx = e−1 n + 1 知
e−1
n + 1 < In< 1 n + 1.
I7≈ 0.1124.
设 In 的近似解为 I∗n,由 In−1= 1n(1 − In)
I∗n−1= 1n(1 − I∗n) ⇒ |en−1| = 1 n|en|
可知,由 I7引起的初始误差在以后的计算过程中逐渐减小,最后 便得到了与 I0= 1 − e−1≈ 0.6321 相差无几的结果。
35
选用和设计算法应遵循的原则
定义 : 数值稳定
在数值计算中,误差不会增长的计算格式称为是数值稳定的,否 则就是不稳定的。
为了不影响数值计算结果的精确度与真实性,在实际应用中,应选用 数值稳定的计算公式,尽量避免使用数值不稳定的公式。
36
选用和设计算法应遵循的原则
定义 : 数值稳定
在数值计算中,误差不会增长的计算格式称为是数值稳定的,否 则就是不稳定的。
为了不影响数值计算结果的精确度与真实性,在实际应用中,应选用 数值稳定的计算公式,尽量避免使用数值不稳定的公式。
36
选用和设计算法应遵循的原则
二、尽量简化计算步骤以便减少运算次数
节省计算量,提高计算速度,简化逻辑结构,减少误差积累。
例
计算多项式
Pn(x) = anxn+ an−1xn−1+· · · + a1x + a0
37
选用和设计算法应遵循的原则
• 逐项计算
共需1 + 2 +· · · + (n − 1) + n = 12n(n + 1)次乘法和n次加法
• 秦九韶算法
{ u0= an,
uk= uk−1x + an−k, k = 1, 2,· · · , n.
共需n 次乘法和n 次加法。
38
选用和设计算法应遵循的原则
秦九韶(1208 年- 1261 年),南宋官 员、数学家,与李冶、杨辉、朱世杰并 称宋元数学四大家。
数学成就
• 数学九章
• 大衍求一术: 比高斯的同余理论早 554 年
• 任意次方程的数值解法: 比英国人霍纳早提出 572 年
• 三斜求积术: 海伦公式 (公元 50 年左右)
• 秦九韶公式
• · · ·
39
选用和设计算法应遵循的原则
三、避免两个相近的数相减
数值计算中,两个相近的数相减会造成有效数字的严重丢失。常用的 处理办法有:
• 因式分解
• 分子分母有理化
• 三角函数恒等式
• Taylor 展开式
• · · ·
40
选用和设计算法应遵循的原则
例
计算(取 4 位有效数字)
√x + 1 −√
x (x = 1000)
• 直接计算
√1001 −√
1000≈ 31.64 − 31.62 = 0.02 只有一个有效数字,损失了三位有效数字
• 分子有理化
√x + 1 −√
x = 1
√x + 1 +√
x ≈ 0.01581 没有损失有效数字
41
选用和设计算法应遵循的原则
例
计算(取 4 位有效数字)
√x + 1 −√
x (x = 1000)
• 直接计算
√1001 −√
1000≈ 31.64 − 31.62 = 0.02 只有一个有效数字,损失了三位有效数字
• 分子有理化
√x + 1 −√
x = 1
√x + 1 +√
x ≈ 0.01581 没有损失有效数字
41
选用和设计算法应遵循的原则
例
计算(取 4 位有效数字)
√x + 1 −√
x (x = 1000)
• 直接计算
√1001 −√
1000≈ 31.64 − 31.62 = 0.02 只有一个有效数字,损失了三位有效数字
• 分子有理化
√x + 1 −√
x = 1
√x + 1 +√
x≈ 0.01581 没有损失有效数字
41
选用和设计算法应遵循的原则
例
计算(取 4 位有效数字)
A = 107(1 − cos 2◦) (cos 2◦= 0.9994)
• 直接计算
A≈ 107(1 − 0.9994) = 6× 103 只有一个有效数字
• 三角恒等式
1 − cos x = 2 sin2x 2
A = 2× (sin 1◦)2× 107≈ 2 × 0.017452× 107≈ 6.09 × 103 有三位有效数字
42
选用和设计算法应遵循的原则
例
计算(取 4 位有效数字)
A = 107(1 − cos 2◦) (cos 2◦= 0.9994)
• 直接计算
A≈ 107(1 − 0.9994) = 6× 103 只有一个有效数字
• 三角恒等式
1 − cos x = 2 sin2x 2
A = 2× (sin 1◦)2× 107≈ 2 × 0.017452× 107≈ 6.09 × 103 有三位有效数字
42
选用和设计算法应遵循的原则
例
计算(取 4 位有效数字)
A = 107(1 − cos 2◦) (cos 2◦= 0.9994)
• 直接计算
A≈ 107(1 − 0.9994) = 6× 103 只有一个有效数字
• 三角恒等式
1 − cos x = 2 sin2x 2
A = 2× (sin 1◦)2× 107≈ 2 × 0.017452× 107≈ 6.09 × 103 有三位有效数字
42
选用和设计算法应遵循的原则
四、绝对值太小的数不宜做除数
数值计算中,用绝对值很小的数作除数,会使商的数量级增加,甚至 在计算机中造成“溢出”停机,而且当很小的除数稍有一点误差,会对 计算结果影响很大。
例
3.1416
0.001 = 3141.6 3.1416
0.001 + 0.0001 = 2856
43
选用和设计算法应遵循的原则
五、合理安排运算次序,防止“大数吃小数”
例
计算 a, b, c 的和,其中 a = 1012, b = 10, c≈ −a.
• (a + b) + c 结果接近于 0
• (a + c) + b 结果接近于 10
44