误差的基本理论与预备知识.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章误差的基本理论与预备知识
一、内容分析与教学建议
本章内容包括三个部分:课程介绍、误差的基本概念、避免误差危害的若干原则。
(一)课程介绍
“数值分析”是信息与计算科学专业的专业基础课,是学习后续专业课的基础。
因此在绪论的讲解过程中,注意阐明学习数值计算方法这门课程的目的、意义和重要性,本课程的主要内容以及它在计算数学和科研过程中的地位,激发学生学习“数值分析”的积极性和兴趣。
(二)误差的基本概念
1、首先阐明误差的来源和误差的分类。
明确计算数学研究的误差主要是:截断误差和舍入误差。
2、讲解绝对误差和绝对误差限,相对误差和相对误差限的定义,并通过具体的实例介绍为什么要引入相对误差的概念。
3、可结合中学介绍过的有效数字的概念,介绍有效数字的严格定义及有效数字的位数,有效数字与相对误差限的关系,并通过具体的例子介绍如何求有效数字的位数。
(三)避免误差危害的若干原则
按照教材中的例子可直观地阐明避免误差危害的主要原则:
●避免两个相近的数相减;
●防止重要的小数被大数“吃掉”;
●在除法的运算中避免出现除数的绝对值远远小于被除数的绝对值的情形;
●简化计算步骤;
●注意算法的稳定性。
当今科技领域中所提出的三大环节是:实验、科学计算和理论分析和研究。
由于计算机的出现和发展,使科学计算在科研与工程实际中越来越显示出它的卓越作用。
例如,在计算机上修改一个设计方案比在实地作修改要容易得多。
为此,人们往往就用科学计算来取代部分实验;更何况有些课题是无法进行实验的,而只能通过科学计算去解决;(例如,计算机模拟核爆炸)。
这种由实验向计算的巨大转变,也促使一些边缘学科的相继出现,例如,计算物理、计算力学、计算化学、计算生物学以及计算经济学等等都应运而生。
有些理论证明往往也是通过计算去解决,例如,四色问题,吴文俊院士开创的机器证明等。
也就是说,科学计算可以全部或部分地代替理论证明。
科学计算既然如此重要,那么数值分析在其中又处于一种什么地位呢?由下图可知:数值分析是处于一种承上启下的地位,它在科学计算中是重要的不可或缺的一环。
由实际问题建立数学模型一般要涉及多门学科的知识,本课程不做讨论。
由数学模型提出数值计算方法,直到编程上机计算求出结果,这一过程是计算数学的任务,也是本课程研究的对象。
计算数学是数学的一个重要分支,它主要研究用计算机求解各种数学问题的数值方法及其理论,以及软件实现。
数值计算方法(也称数值分析或计算方法)是计算数学的一个主要部分,它不同于纯数学那样研究数学本身的理论,而是一门把数学理论与计算机紧密结合起来进行研究的实用性很强的基础学科,它主要研究用计算机解决数学模型的理论与方法。
§1 计算方法的基本要求
一个可行、有效的算法必须满足下列基本要求:
(1) 符合计算机的要求
我们知道计算机只能对有限位数进行加、减、乘、除与逻辑运算,因此对给定的数学模型提出的数值计算方法也只能包含上述五种运算。
对于具体算法还要考虑计算机的内存大小、数字字长、运算速度等。
有的算法从纯数学的观点看不够严格和完善,但通过实际计算、对比分析等手段证明是行之有效的也常被采用。
特别地,随着计算机的飞速发展,一些算法在老的计算机上无法实现,而在新型计算机上却可以实现。
总之,对于给定的数学模型,在构造算法时要面向计算机,符合计算机的要求。
(2) 在理论上收敛、稳定,在实际计算中精确度高
由于计算机只能近似地表示实数,不论计算机中的数是定点表示,还是浮点表示,它所表示的数的位数都是有限的,且任一算法只能在有限的时间内通过有限次运算来完成。
这说明用计算机运算得到的结果都是近似的,因此需要考虑算法的精确度问题。
在理论上我们还要研究用计算机运算得到的结果是否收敛到实际问题的解。
此外,我们还要考虑算法的数值稳定性问题。
(3) 计算复杂性尽可能小
从实际需要出发,我们还需要考虑计算量的大小,即所谓计算复杂性问题。
它是由以下两个因素决定的:使用中央处理器(CPU)的时间,这主要由四则运算的次数决定;占用内存储器的空间,这主要由使用的数据量来决定。
有时也称之为时间与空间的复杂性,简称计算复杂性。
例如,解线性方程组A x = b,若det A≠0,则可用Cramer法则来解。
设A 为20阶矩阵,计算一个20阶行列式需要的乘法运算量为19×20!,需计算21个20阶的行列式,总的乘法运算量为
21×19×20!≈9.71×1020.
若用10亿次/ 秒的计算机来运算,则一年可完成的乘法运算量为
109×365×24×3600 ≈3.15×1016.
解20阶的方程组所需乘法运算的时间为
9.71×1020÷(3.15×1016) ≈3.08×104(年),
即三万零八百年,显然这个运算时间在实际中是不可接受的。
而在实际问题中,例如大型水利工程、天气预报等,需要解的大型方程组的阶数一般都远远大于20,若用上述方法显然无法解决。
这个例子说明解线性方程组的Cramer法则在理论上虽然可行,但在实际应用中却不可行。
有人可能说,随着计算机的发展,运算速度提高、内存增大以及新结构计算机的涌现,以前认为过于复杂而不能求解的问题将会得到解决。
但是,不论计算机如何发展,使用计算机的代价,即计算复杂性,都是要考虑的。
对于给定的数学模型,可能有多种算法,应通过计算机进行数值试验,进行分析、比较来选定算法。
对新提出的算法,有的在理论上虽然还未证明其收敛性,但可以从具体试验中发现其规律,为理论证明提供线索。
总之,对于给定的数学模型所提出的可行、有效的算法应该是符合计算机的要求,在理论上收敛、稳定,在实际计算中精确度高,计算复杂性小,能通过试验验证的数值方法。
§2 误差及有效数字
一、误差的来源
1. 模型误差:数学模型与实际问题之间的误差称为模型误差。
一般来说,生产和科研中遇到的实际问题是比较复杂的,要用数学模型来描述,需要进行必要的简化,忽略一些次要的因素,这样建立起来的数学模型与实际问题之间一定有误差。
它们之间的误差就是模型误差。
2. 观测误差:实验或观测得到的数据与实际数据之间的误差称为观测误差或数据误差。
数学模型中通常包含一些由观测(实验)得到的数据,例如用21()2
s t gt =来描述初始速度为0的自由落体下落时距离和时间的关系,其中重力加速度9.8g ≈2米秒是由实验得到的,它和实际重力加速度之间是有出入的。
其间的误差就是观测误差。
3. 截断误差:数学模型的精确解与数值方法得到的数值解之间的误差称为方法误差或截断误差。
例如,由Taylor 公式得
2
1()2!!n
x n x x e x R x n =+++++ 用2
()12!!
n n x x p x x n =++++近似代替x e ,这时的截断误差为 1(),(1)!
n n e R x x n ξ
ξ+=+介于0与x 之间。
4. 舍入误差:对数据进行四舍五入后产生的误差成为舍入误差。
在本课程中所涉及到的误差,一般是指截断误差和舍入误差。
二、误差的基本概念
1. 绝对误差和绝对误差限、相对误差和相对误差限
定义1 设*x 为准确值,x 是*x 的近似值,称
x x e -=* (2.1)
为近似值x 的绝对误差,简称误差。
显然误差e 既可为正,也可为负。
一般来说,准确值*
x 是不知道的,因此误差e 的准确值无法求出。
不过在实际工作中,可根据相关领域的知识、经验及测量工具的精度,事先估计出误差绝对值不超过某个正数ε,即
ε≤-=x x e * (2.2) 则称ε为近似值x 的绝对误差限,简称误差限或精度。
由(2.2)得
εε+≤≤-x x x *.
这表示准确值*x 在区间],[εε+-x x 内,有时将准确值*x 写成
ε±=x x *.
例如用卡尺测量一个圆杆的直径为350=x 毫米,它是圆杆直径的近似值,由卡尺的精度知道这个近似值的误差不会超过半个毫米,则有
5.0350*≤-=-x x x (毫米).
于是该圆杆的直径为
5.0350*±=x (毫米).
用ε±=x x *
表示准确值可以反映它的准确程度,但不能说明近似值的好坏。
例如,测量一根10厘米长的圆钢时发生了0.5厘米的误差,和测量一根10米长的圆钢时发生了0.5厘米的误差,其绝对误差都是0.5厘米,但是,后者的测量结果显然比前者要准确得多。
这说明决定一个量的近似值的好坏,除了要考虑绝对误差的大小,还要考虑准确值本身的大小,这就需要引入相对误差的概念。
定义2 设*x 为准确值,x 是*x 的近似值,称 *
**x x x x e e r -== (2.3) 为近似值x 的相对误差。
在实际计算中,由于准确值*
x 总是未知的,因此也把
x
x x x e e r -==* (2.4) 称为近似值x 的相对误差。
在上面的例子中,前者的相对误差是05.0105.0=,而后者的相对误差是0005.000105.0=. 一般来说,相对误差越小,表明近似程度越好。
与绝对误差一样,近似值x 的相对误差的准确值也无法求出。
仿绝对误差限,称相对误差绝对值的上界r ε为近似值x 的相对误差限,即
r r x
x x e ε≤-=* (2.5) 注 绝对误差和绝对误差限有量纲,而相对误差和相对误差限没有量纲,通常用百分数来表示。
2. 有效数字、有效数字与相对误差限的联系
用ε±x 表示一个近似值,这在实际计算中很不方便。
当在实际运算中遇到的数的位数很多时,如π,e 等,常常采用四舍五入的原则得到近似值,为此引进有效数字的概念。
定义3 设x 是*x 的近似值,如果x 的误差限是它的某一位的半个单位,那么称x 准确到这一位,并且从这一位起直到左边第一个非零数字为止的所有数字称为x 的有效数字。
具体来说,就是先将x 写成规范化形式
m n a a a x 10.021⨯±= , (2.6)
其中n a a a ,,,21 是0到9之间的自然数,01≠a ,m 为整数。
如果x 的误差限
l m x x -⨯≤
-102
1*, n l ≤≤1 (2.7) 那么称近似值x 具有l 位有效数字。
例1 设200169.3*=x ,确定它的近似值2001.31=x ,2002.32=x ,200.33=x ,2.34=x 分别具有几位有效数字?
解 因为111032001.0⨯=x ,1=m ,
331*105.010069.0--⨯<⨯=-x x ,
(即1x 的误差限0.000069不超过2001.31=x 的小数点后第3位的半个单位,即0.0005),所以3-=-l m ,得4=l . 故2001.31=x 具有4位有效数字(即从2001.31=x 的小数点后第3位数0起直到左边第一个非零数字3为止的4个数字都是有效数字),而最后一位数字1不是有效数字。
因为121032002.0⨯=x ,1=m ,
442*105.01031.0--⨯<⨯=-x x ,
(即2x 的误差限0.000031不超过2002.32=x 的小数点后第4位的半个单位,即0.00005),所以4-=-l m ,得5=l . 故2002.32=x 具有5位有效数字(即从2002.32=x 的小数点后第4位数2起直到左边第一个非零数字3为止的5个数字都是有效数字)。
因为13103200.0⨯=x ,1=m ,
333*105.010169.0--⨯<⨯=-x x ,
(即3x 的误差限0.000169不超过200.33=x 的小数点后第3位的半个单位,即0.0005),所以3-=-l m ,得4=l . 故200.33=x 具有4位有效数字(即从200.33=x 的小数点后第3位数0起直到左边第一个非零数字3为止的4个数字都是有效数字)。
因为141032.0⨯=x ,1=m ,
114*105.01000169.0--⨯<⨯=-x x ,
(即4x 的误差限0.000169不超过2.34=x 最后一位数字2的半个单位,即0.05),所以1-=-l m ,得2=l . 故2.34=x 具有2位有效数字(即2.34=x 的所有数字都是有效数字)。
特别要指出的是,在例1中,200.33=x 有4位有效数字,而2.34=x 只有2位有效数字。
从上面的讨论可以看出,有效数字位数越多,绝对误差限就越小。
同样的,有效数字位数越多,相对误差限也就越小。
下面阐述有效数字与相对误差限的联系。
定理 设x 是*
x 的近似值,且 m n a a a x 10.021⨯±=
其中n a a a ,,,21 是0到9之间的自然数,01≠a ,m 为整数。
(1) 如果x 具有l (n l ≤≤1)位有效数字,那么x 的相对误差限为11
1021+-⨯l a . (2) 如果x 的相对误差限为1110)
1(21+-⨯+l a ,那么x 至少具有l 位有效数字。
证明 (1) 因为x 具有l 位有效数字,所以由定义3知 l m x x -⨯≤
-1021*. 又因为1110-⨯≥m a x , 所以
1111*
1021101021+---⨯=⨯⨯≤-l m l m a a x x x . (2) 因为1110)1(-⨯+≤m a x ,所以
x x x x x x ⋅-=
-**111110)1(10)1(21-+-⨯+⨯⨯+≤m l a a l m -⨯=102
1. 故由定义3知x 至少具有l 位有效数字。
证毕!
例2 设5的近似值x 的相对误差不超过0.1%,问x 至少具有几位有效数字?
解 设x 至少具有l 位有效数字,因为5的第一个非零数字是2,即x 的第一位有效数字21=a ,根据题意及定理知,
113111*********
l l a -+-+-≤⨯=⨯≤⨯ 得 3.398l ≥,故取4=l ,即x 至少具有4位有效数字,即x =2.236,其相对误差不超过0.1%.
§3 避免误差危害的若干原则
在用计算机实现算法时,我们输入计算机的数据一般是有误差的(如观测误差等),计算机运算过程的每一步又会产生舍入误差,由十进制转化为机器数也会产生舍入误差,这些误差在迭代过程中还会逐步传播和积累,因此我们必须研究这些误差对计算结果的影响。
但一个实际问题往往需要亿万次以上的计算,且每一步都可能产生误差,因此我们不可能对每一步误差进行分析和研究,只能根据具体问题的特点进行研究,提出相应的误差估计。
特别地,如果我们在构造算法的过程中注意了以下一些原则,那么将有效地减少和避免误差的危害、控制误差的传播和积累。
一、要避免两个相近的数相减
在数值计算中两个相近的数相减会造成有效数字的严重损失,从而导致误差增大,影响计算结果的精度。
例1 当x =10003时,计算x x -+1的近似值。
解 若使用6位十进制浮点运算,运算时取6位有效数字,结果
005.0015.100020.1001=-=-+x x
只有一位有效数字,损失了5位有效数字,使得绝对误差和相对误差都变得很大,影响计算结果的精度。
若改用
00499913.0015
.100020.100111
1=+=++=-+x x x x . 则其结果有6位有效数字,与精确值0.00499912523117984…非常接近。
再如,99999.11=x ,99998.12=x ,求 21lg lg x x -.若使用6位十进制浮点运算,运算时取6位有效数字,则 000002.0301026.0301028.0lg lg 21=-≈-x x 只有一位有效数字,损失了5位有效数字。
若改用 621211017149.2lg
lg lg -⨯≈=-x x x x ,则其结果有6位有效数字,与精确值610341714886956
.2-⨯ 非常接近。
二、要防止重要的小数被大数“吃掉”
在数值计算中,参加运算的数的数量级有时相差很大,而计算机的字长又是有限的,因此,如果不注意运算次序,那么就可能出现小数被大数“吃掉”的现象。
这种现象在有些情况下是允许的,但在有些情况下,这些小数很重要,若它们被“吃掉”,就会造成计算结果的失真,影响计算结果的可靠性。
例2 求二次方程010)110(992=++-x x 的根。
解 用因式分解易得方程的二个根为91210,1x x ==. 但用求根公式
1,2x =编制程序,如果在只能将数表示到小数后8位的计算机上运算,那么首先要对阶
910101010.1000000100.000000000110b -=+=⨯+⨯
而计算机上只能达到8位,故计算机上10
0.000000000110⨯不起作用,即视为0,于是 1090.10000001010b -=⨯=
9
10b =,故所得两个根为91210,0x x ==. 2x 严重失真的原因是大数吃掉小数的结果。
如果把
2x 的计算公式写成2x ==,则 9
299
21011010x ⨯==+. [注] 需要说明的是:大数吃小数在有些情况下是允许的,但在有些情况下却会造成失
真。
再如,已知12103⨯=x ,7=y ,12
103⨯-=z ,求z y x ++.如果按z y x ++的次
序来编程序,x “吃掉”y ,而x 与z 互相抵消,其结果为零。
若按y z x ++)(的次序来编程序,其结果为7. 由此可见,如果事先大致估计一下计算方案中各数的数量级,编制程序时加以合理的安排,那么重要的小数就可以避免被“吃掉”。
此例还说明,用计算机作加减运算时,交换律和结合律往往不成立,不同的运算次序会得到不同的运算结果。
※
三、在要避免出现除数的绝对值远远小于被除数绝对值的情形
在用计算机实现算法的过程中,如果用绝对值很小的数作除数,往往会使舍入误差增大。
即在计算
x
y
时,若y x <<<0,则可能产生较大的舍入误差,对计算结果带来严重影响,应尽量避免。
例3 在4位浮点十进制数下,用消去法解线性方程组
⎩
⎨
⎧=+=-126
.0300003.02121x x x x . 解 仿计算机实际计算,将上述方程组写成
⎪⎩⎪⎨⎧⨯=⨯+⨯⨯=⨯-⨯-)
2(10
0001.0100002.0100001.0)1(106000.0103000.0103000.0121110
2114x x x x
(1)4(0.300010)(2)-÷⨯-(注意:在第一步运算中出现了用很小的数作除数的情形,相应
地在第二步运算中出现了大数“吃掉”小数的情形),得
⎪⎩
⎪⎨⎧⨯=⨯-⨯=⨯-⨯-5
2602114100002.0101000.010
6000.0103000.0103000.0x x x 解得
01=x ,2.02-=x .
而原方程组的准确解为 399972
.11=x , 199986.02-=x . 显然上述结果严重失真。
如果反过来用第二个方程消去第一个方程中含1x 的项,那么就可以避免很小的数作除数的情形。
即
(2))1()100003.0(4-⨯⨯-,得
⎪⎩⎪⎨⎧⨯=⨯+⨯⨯=⨯-1211102110
0001.0100002.0100001.0106000.0103000.0x x x
解得
4.11=x ,2.02-=x .
这是一组相当好的近似解。
四、简化计算步骤
同样一个问题,如果能减少运算次数,那么不但可以节省计算机的计算复杂性,而且还能减少舍入误差。
因此在构造算法时,合理地简化计算公式是一个非常重要的原则。
例4 已知x ,计算多项式n n n n n x a x a x a a x p ++++=--1110)( 的值。
解 若直接计算,即先计算k k x a ,n k ,,2,1 =,然后逐项相加,则一共需要做
2
)
1()1(21+=
+-+++n n n n 次乘法和n 次加法。
若对)(x p n 采用秦九韶算法
⎪
⎩⎪
⎨⎧=--=⋅+==+.
)(,0,1,2,,2,1,,01s x p n n k s x a s a s n k k k n n (3.1)
则只要n 次乘法和n 次加法,就可得到)(x p n 的值。
而且秦九韶算法计算过程简单、规律性强、适于编程,所占内存也比前一种方法要小。
此外,由于减少了计算步骤,相应地也减少了舍入误差及其积累传播。
此例说明合理地简化计算公式在数值计算中是非常重要的。
五、注意算法的数值稳定性
为了避免误差在运算过程中的累积增大,我们在构造算法时,还要考虑算法的稳定性。
首先介绍数值稳定性的概念。
定义4 一个算法如果输入数据有误差,而在计算过程中舍入误差不增长,那么称此算法是数值稳定的,否则称此算法为数值不稳定的。
下面的例子说明了算法稳定性的重要性。
例5 当11,,2,1,0 =n 时,计算积分⎰
+=10
9
dx x x I n
n 的近似值。
解 由
n
dx x dx x x x I I n n n n n 19991011
11==++=+⎰⎰
---
得递推关系
191
-⨯-=n n I n
I . (3.2) 因为 ⎰
=≈-=+=
10
00105361.09ln 10ln 9
1
I dx x I ,利用递推关系(3.2)得, ⎪⎩
⎪⎨⎧=⨯-==-.
11,,2,1,91
,105361.010 n n I I n n (3.3) 由(3.3)得,051751.01=I ,034241.02=I ,025164.03=I ,023521.04=I ,
011689.05-=I ,…. 由n I 的表达式知,对所有正整数n ,0>n I ,而上面得出的0011689.05<-=I 显然是错误的。
下面分析产生错误的原因。
设初始误差为0ε,则
70001084342.4-⨯-=-=I I ε. 这时
60001111035908.49)921()921(-⨯=⨯-=⨯--⨯-=-=εεI I I I ,
52
0221112221092317.39)1(9)921()921(-⨯-⨯-=⨯-=⨯--⨯-=-=εεεI I I I ,
43
033222333
1053085.39)1(9)921()921(-⨯=⨯-=⨯-=⨯--⨯-=-=εεεI I I I ,
34
0443334441017777.39)1(9)921()921(-⨯-=⨯-=⨯-=⨯--⨯-=-=εεεI I I I ,
028600.09)1(9)92
1()921(5
055444555
=⨯-=⨯-=⨯--⨯-=-=εεεI I I I ,
而5I 的准确值是0.01691092101…,显然误差的传播和积累淹没了问题的真解。
我们看到,虽然初始误差0ε很小,但是上述算法误差的传播是逐步扩大的,也就是说它是不稳定的,因此计算结果不可靠。
我们换一种算法,由(3.2)得,
)1
(911n n I n
I -⨯=
-. (3.4) 首先估计初值12I 的近似值。
因为
)
1(91
91101)1(1011010+=≤≤=+⎰⎰n dx x I dx x n n n n ,
所以
1171130112≤≤I . 因为 008120.0)117
11301(21≈+⨯,所以可取008120.012=I . 建立递推关系
1210.008120,
11,12,11,
,2,1.
9n n I I I n n -⎧=⎪
⎨⎛⎫
=⨯-= ⎪⎪⎝⎭⎩
(3.5)
计算结果见表1.1.
从表中的数据可以看出,用第二种算法得出的结果精度很高。
这是因为,虽然初始数据
008120.012=I 有误差,但是这种误差在计算过程的每一步都是逐步缩小的,即此算法是
稳定的。
这个例子告诉我们,用数值方法在解决实际问题时一定要选择数值稳定的算法。
表1.1。