第一章绪论

Download Report

Transcript 第一章绪论

数 值 分 析
(第 4 版)
李庆扬 王能超 易大义 编
清华大学出版社
施普林格出版社
1
• 数值分析课程
• 教师:罗蕴玲
• 学时:50+10
• 电话:81720522
• 讲课时间:3~16周
• E-mail:
• 上机时间:16~18周
• 平时成绩:上机
测验
[email protected]
• 办公室:1-812
作业
答疑时间:
出勤
周一下午2:30-4:30
• 期末考试:半开卷
周三下午3:30-5:00
具体考核方案
2
第1章 绪 论
1.1 数值分析研究对象与特点
3
先看两个例子。
例1 求方程 x2=2sinx,在区间(1,2)内的根。
理论上可知显然找不出根的解析式,即无法求出
精确解。
例2 用Cramer法则求解n元线性方程组。
显然理论上可行,且有精确表达式。实际计算时
会出现什么问题呢?
4
看用数学和计算机解决实际问题的过程:
实际问题
应用数学研究的任务
数学模型
数值计算方法
数值分析研究的对象
上机计算求出结果
最终提供的是针对各类数学问题的数值算法
(即计算公式、计算方案、计算过程)
5
数值分析提供的算法具有下面四个特点:
1、面向计算机
2、有可靠的理论分析
3、具有好的计算复杂性
4、通过数值实验验证有效性
6
本门课程学习的主要内容:
误差分析,插值法与拟合,数值积分,数值微分,
解线性方程组的直接方法和迭代方法,非线性方程求根,
矩阵特征值问题计算.
7
1. 认识建立算法和对每个算法进行理论分析是基本
任务,主动适应“公式多”的特点;
2. 注重各章建立算法的问题的提法,搞清问题的基
本提法,逐步深入;
3. 理解每个算法建立的数学背景,数学原理和基本
线索,对最基本的算法要非常熟悉;
4. 认真进行数值计算的训练,学习各章算法完全是
为用于实际计算,必须真会算。
8
• 本课程的基本要求
– 掌握数值方法的基本原理
– 掌握常用的科学与工程计算的基本方法
– 能用所学方法在计算机上算出正确结果
9
课程学习结束后你具备的能力
1. 对具体的数值计算问题,你会选择合适
的算法,并通过计算机计算出正确结果;
2. 对给定的算法会从理论上分析其优劣性;
3. 会根据原理构造解决较简单数值计算问
题的算法。
10
1.2 数值计算的误差
1.2.1 误差来源与分类
引言——为什么要进行误差分析?
例1 用具有舍入功能的八位计算器直接计算下式:
y  arctan5430 arctan5429
结果为
y  arctan5430 arctan5429
 1.5706122 1.5706121 0.000000
1
6个 零
事实上 y  arctan5430 arctan5429
 0.0000000


 3392191
7个 零
结果
不可靠
11
例2 用求根公式在尾数为八位的浮点计算机上,求下面方程的根:
x 2  (109  1) x  109  0
解
 b  b 2  4ac
 b  b 2  4ac
x1 
, x2 
2a
2a
计算机上
10
10
 b  109  1  0.1  1010  0.000000000
1

10
=
0
.
1

10

9个 零
b 2  4ac  (0.1  1010 )2  4  1  109  (0.1  1010 )2  4  0.1  1010
19
19
 0.1  1019  0.00000000
4

10

0
.
1

10


8个 零
求得
计算机上
x1  0, x2  0.1 1010  109
9
x

1
,
x

10
事实上 1
2
12
用计算机解决实际问题的一般过
程
应用数学解决的问题
实际问题
建立数
学模型
模型误差、观测误差
数值分析解决的问题
确定数
值解法
截断误差
上机求解
舍入误差
在此主要研究这两种误差
13
1.2.2 误差与有效数字
一、绝对误差
定义1
设 为准确值,
x
x * 为 x的一个近似值,称
e*  x *  x
为近似值的绝对误差, 简称误差.
误差 可正可负,当绝对误差为正时近似值偏大,叫
e*
强近似值;当绝对误差为负时近似值偏小,叫弱近似值.
通常准确值 是未知的,
x
因此误差 e也未知.
*
若能根据测量工具或计算情况估计出误差绝对值的一个上
界,即
e *  x *  x   *,
则  叫做近似值的误差限,
*
它总是正数.
14
对于一般情形
也可以表示为
x * ,
x   * 即 x *   *  x  x *   *,
x  x *  * .
1
1 1
2 1
例3 求 3的近似值,使其绝对误差限精确到  10 ,  10 ,  10 3.
2
2
2
解 因为 3  1.73205 ,而
1
 101
2
1
*
 (1.73)  3  1.73  0.00205  0.005   10 2
2
1
 * (1.732)  3  1.732  0.00005  0.0005  10 3
2
 * (1.7) 
所以
3  1.7  0.03205  0.05 
x1*  1.7, x2*  1.73, x3*  1.732.
注意:(1)绝对误差限不是唯一的,但越小越好;
(2)绝对误差限的大小并不能完全表示近似值的好坏。
15
二、相对误差
的比值
定义2 把近似值的误差 与准确值
x
e*
e*
x*x

x
x
称为近似值 x的相对误差,
*
实际计算中,
er*
记作 er*.
由于真值 x总是未知的,通常取
e*
x*x


x*
x*
e*
作为 x的相对误差,
*
条件是 | er* ||较小,
|
x*
e*  x *  x , 知
此时利用
16
e* e*
e * ( x *  x)


x
x*
x* x
( e*) 2

x * ( x *  e*)
( e * / x*) 2

1  ( e * / x*)
*
是 e的平方项级,
故可忽略不计.
r
相对误差也可正可负,它的绝对值上界叫做相对误差限,
记作 , 即  
*
r
*
r
*
x*
.
17
三、有效数字
当准确值 位数比较多时,常常按四舍五入的原则得
x
到 x的前几位近似值 ,
x * 例如
x  π  3.14159265
 3 *  0.002,
取3位
x3 *  3.14,
取5位
x5 *  3.1416,  5 *  0.000008,
它们的误差都不超过末位数字的半个单位, 即
1
 10  2 ,
2
1
π  3.1416   10  4.
2
π  3.14 
18
若近似值 的误差限是某一位的半个单位,
x*
定义3
该位到 x的第一位非零数字共有
位,就说
有
n
*
x *位有效数字.
n
表示为
x*  10 m  (a1  a2 10 1    an 10  ( n 1) ), (2.1)
其中 ai (i  1,是0到9中的一个数字,
, n)
为整数,
a1  0, m
且
x  x* 
1
 10 m  n 1.
2
(2.2)
例如 3.142,3.141,3.1416分别作为π的近似值时分别有几位
有效数字?
19
重力常数g,
例4
如果以 m/s2 为单位,g  9.80m/s 2 ,
若以km/s2为单位,
g  0.00980,它们具有几位有效数字?
km/s 2
绝对误差和相对误差有区别吗?与量纲有关吗?
因为按第一种写法
g  9.80 
1
 10  2 ,
2
按(2.1)的表示方法, m  0, n  3, 按第二种写法
g  0.00980 
1
 10 5 ,
2
这里 m  3, n  3.
它们虽然写法不同,但都具有3位有效数字.
20
x*  10 m  (a1  a2 10 1    an 10  ( n 1) ), (2.1)
至于绝对误差限,由于单位不同所以结果也不同,
 1* 
1
1
 10  2 m/s 2 ,  2*   10 5 km/s 2 ,
2
2
但相对误差都是
 r*  0.005 / 9.80  0.00005 / 0.00980.
注意相对误差与相对误差限是无量纲的,而绝对误差
与误差限是有量纲的.
例4说明有效位数与小数点后有多少位数无关.
21
从(2.2)可得到具有 位有效数字的近似数
,其绝对
x*
n
误差限为
1
 *   10 m  n 1 ,
2
m n 1
在m
相同的情况下, 越大则
n
10越小,故有效位数越
多,绝对误差限越小.
1
x  x *   10 m  n 1.
2
(2.2)
22
关于有效数字说明
① 用四舍五入取准确值的前n位x*作为近似值,则x*必有n位
有效数字。如3.142作为 的近似值有4位有效数字,而
3.141为3位有效数字;
② 有效数字相同的两个近似数,绝对误差不一定相同。例
如,设x1*=12345,设x2*=12.345,两者均有5位有效数字
但
绝对误差不一样
 x - x1* = x - 12345 ≤ 0.5= 1/2  100
 x - x2* = x - 12.345≤0.0005=1/210-3
③ 把任何数乘以10 p(p=0,1,…)不影响有效位数;
④ 准确值具有无穷多位有效数字,如1/2=0.5 因0.5是真值,
没有误差,*=0,因此n,准确值具有无穷位有效数字。 23
四、有效数字与相对误差限的关系
*
定理1 设近似数 x表示为
x*  10 m  (a1  a2 10 1    al 10  (l 1) ),
其中 ai (i  1,
是0到9中的一个数字,
, l)
若 具有
x * 位有效数字,
n
(2.1)
a1  0, m为整数.
则其相对误差限为
1
 
 10 ( n 1) ;
2a1
*
r
反之, 若 x 的相对误差限
*
1
, 10 ( n 1)
 
2( a1  1)
*
r
则 x至少具有
位有效数字.
*
n
24
例5要使
的近似值的相对误差限小于0.1%,需取
20
几位有效数字?
设取 位有效数字,
n
由定理1
1
 
 10 ( n 1).
2a1
*
r
由于
20  4.4 , 知 a1 ,4
故只要取 n ,4 就有
 r*  0.125 103  103  0.1%,
即只要对
的近似值取4位有效数字,其相对误差限就
20
小于0.1%. 此时由开方表得 20  4
. .472
25
1.2.3 数值运算的误差估计
一般情况下,当自变量有误差时函数值也产生误差,
其误差限可利用函数的微分进行估计.
设
的近似值为
,以x * 近 f (x*)
f是一元函数,
(x)
x
似 f (x
,其误差界记作
)
 ( f,
( x*))
利用微分
f ( x )  f ( x*)  f ( x*)( x  x*)  o( x  x*)
由此可得:
 df ( x ) | x  x*  o( x  x*)
e( f ( x*))  f ( x*) e( x*).
 ( f ( x*))  f ( x*)  ( x*).
f ( x*)
x * f ( x*)
er ( f ( x*)) 
e( x*) 
er ( x*).
f ( x*)
f ( x*)
f ( x*)
x * f ( x*)
 r ( f ( x*)) 
 ( x*) 
 r ( x*).
f ( x*)
f ( x*)
26
当 为多元函数,如计算
f
x1 ,的近似值为
, xn
A  f (时,
x1 , xn )
*
*
x,
,

,
x
1
n
如果
则 A的近似值为
*
A*  f ( x1* , xn
),
于是由全微分,
函数值 A的误差
*
e(为
A*)
*
e( A*)  A *  A  f ( x1* ,, xn
)  f ( x1 ,, xn )
* 
 f ( x1* ,  , xn
) *

 
( xk  xk )


xk
k 1

n
 f
  x
k
k 1
n
*
 *
 ek ,

于是误差限
 f
 ( A*)   
k 1  x k
n
*

  ( xk* );

27
而 A 的相对误差及相对误差限限分别为
*
er*
 er ( A*) e( A*) 
A*
*
 f
  x
k
k 1
 e( x k* )

A*

n
 f
  
k 1 x k
n
 r*
  r ( A*)
 ( A*)
 f
  
A*
k 1  x k
n
 f
  
k 1  x k
n
*
 x k*

er ( x k* )
 A*
*
  ( x k* )

A*

*
 xk*

 r ( xk* )
 A*
28
练习:
1.
y  f ( x), y*  f ( x* ),求er ( y* );
2.
y  x n , y*  ( x* )n , 求er ( y* );
3.
D1  10  0.05(cm), D2  5  0.1(cm),
S

4
( D  D ),求 ( S )和 r ( S );
2
1
2
2
*
*
x
4. (1)u  x  y ( 2)u  xy ( 3)u 
y
求e( u* )和er ( u* ) .
5. 测量一木板长为954cm,问测量的相对误差
是多大?
29
1.3 误差定性分析与避免误差危害
1.3.1 病态问题与条件数
对一个数值问题本身, 如果输入数据有微小扰动(即误
差),引起输出数据(即问题解)相对误差很大,这就是病
态问题.
例如计算函数值
f时,
(x)
若 x有扰动 x  x
,其
 x*
相对误差为 x, 函数值 f (x的相对误差为
*)
x
f ( x)  f ( x*)
.
f ( x)
30
相对误差比值
f ( x)  f ( x*) x
x f ( x)
/

 Cp ,
f ( x)
x
f ( x)
(3.1)
C称为计算函数值问题的条件数.
p
自变量相对误差一般不会太大,如果条件数 很大,
Cp
将引起函数值相对误差很大,出现这种情况的问题就是病态
问题.
31
例如,
f ( x), x n
则有
x  nx n 1
x f ( x)

 n,
Cp 
n
x
f ( x)
它表示相对误差可能放大 n倍.
如 n,
,)  1.24
 10 有 f (1)  1, f (1.02
若取 x  1,
, 函数值相对误差为 24,
%
x*  1.02, 自变量相对误差为 2%
这时问题可以认为是病态的.
一般情况下,条件数
越大C p
C 就认为是病态,
p  10
病态越严重.
32
1.3.2 算法的数值稳定性
用一个算法进行计算,如果初始数据误差在计算中传播
使计算结果的误差增长很快,这个算法就是数值不稳定的.
例6计算
In 
1
0
x ne x 1并估计误差.
dx ( n  0,1, )
由分部积分可得计算 的递推公式
In
I n  1  nI n1
I0  e
1
1

0
(n  1,2,),
(3.2)
e x dx  1  e 1.
问题:由递推公式(3.2)可以构造几种计算积分序列{In}(n=1,2,
…,N)的算法?假设计算中只有初始值带有误差,计算过程中不
产生新的误差,请判断哪种方法能给出更精确的结果。
33
算法A:计算公式为 I n  1  nI n1 ( n  1,2,, N )
~
若初值 I~有误差
则由此引起以后各步计算的误差
E0  I 0  I 0
0
~
En  nEn 1 (n  1,2,).
满足关系
En  I n  I n
n!
则 En  (1) n n! E0 , 这说明 I~的误差被放大了
倍.
n
1  In
算法B:计算公式为 I n1 
n
1 *
*
*
记 En*  I,
则
,En
E


I
0
n
n
n!
n! 倍。
( n  N ,2, ,1)
*
E0* 比 E缩小了
n
看数值计算结果,见书p13.
显然算法B的计算结果更精确、更可靠,当用算法A计算时,
由于误差传播是逐步扩大的,因而计算结果不可靠.
此例说明,数值不稳定的算法是不能使用的.
34
一个算法如果输入数据有误差,而在计算过
定义4
程中舍入误差不增长,则称此算法是数值稳定的,否则称
此算法为不稳定的.
在例6中算法(B)是数值稳定的,而算法(A)是不
稳定的.
35
1.3.3 避免误差危害的若干原则
数值计算中首先要分清问题是否病态和算法是否数
值稳定,计算时还应尽量避免误差危害,防止有效数字
的损失,有下面若干原则.
1. 要避免除数绝对值远远小于被除数绝对值的除法
x
用绝对值小的数作除数舍入误差会增大,如计算 若
,
y
0  y,
 x ,
*
*
*
*
 x* 
e
(
x
)
x
e
(
y
)
1
|
x
|
*
*
e *  


|
e
(
x
)
|

|
e
(
y
)|
则可能对计算结果带来
*
* 2
*
* 2
y 
y
(y )
|y |
(y )
 
严重影响,应尽量避免.
36
2. 要避免两相近数相减
在数值计算中两相近数相减有效数字会严重损失.
分析前述例1
y  arctan5430 arctan5429
 1.5706122 1.5706121 0.000000
1
8位有效数字
8位有效数字
0位有效数字
6个 零
y  arctan 5430  arctan 5429  0.0000000


 3392191 
7个 零
这说明必须尽量避免出现这类运算. 最好是改变计算方法,
防止这种现象产生.
37

由
arctan


arctan


arctan
,可得
改变计算公式:
1  
1
arctan5430 arctan5429 arctan
 3.3921911 10 8
29479471
精度提高了很多。此例说明,可通过改变计算公式避免或
减少有效数字的损失。
类似地,如果 和
x1 很接近时,由
x2
x1
lg x1  lg x2  lg
,
x2
用右边算式有效数字就不损失.
当 很大时,
x
x 1 
x
也应该用右端算式代替左端.
1
x 1 
x
,
38
3. 要防止大数“吃掉”小数
在数值运算中参加运算的数有时数量级相差很大,
而计算机位数有限,如不注意运算次序就可能出现大数
“吃掉”小数的现象,影响计算结果的可靠性.
前面用求根公式求根的例2中, 109 吃掉了1,
现改变计算公式如下:
 b 


x1  
 b 


b 2  4ac
,b  0
2a
,
b 2  4ac
,b  0
2a
c/a
x2 
x1
39
4. 注意简化计算步骤,减少运算次数
同样一个计算问题,如果能减少运算次数,不但可节省
计算机的计算时间,还能减少舍入误差.
这是数值计算必须遵从的原则,也是“数值分析”要研
究的重要内容.
40
例7
计算多项式
Pn ( x)  an x n  an 1 x n 1    a1 x  a0
k
的值, 若直接计算 ak x再逐项相加,一共需做
n(n  1)
n  (n  1)    2  1 
2
次乘法和 n次加法.
若采用秦九韶算法
Pn ( x )  x (an x n1  an1 x n 2    a1 )  a0
 x ( x ( x (an x  an1 )  an 2 )    a1 )  a0
 S n  an ,

 S k  xS k 1  a k ( k  n  1,  ,2,1,0),
 P ( x)  S ,
0
 n
只要 n次乘法和 次加法就可算出
n
Pn的值.
(x)
在“数值分析”中,这种节省计算次数的算法还有不少.
41