工程中常用
X=X4±£表示近似值”的精度或真值X所在的范围.
误差是有量纲的,所以仅误差数值的大小不足以刻划近似的准确程度.如量
S=123±0.5c〃=1.23±0.005税=1230000±5000/劝(1.2)
为此,我们需要引入相对误差
♦
定义1・2用ThO作为量x的近似,称为近似值F的相对误
X
差.当”是X的较好近似时,也可以用如下公式计算相对误差
er(x)=^^-(1.3)
X
显然,相对误差是一个无量纲量,它不随使用单位变化.如式(1.2)中的量$的近似,无论使用何种单位,它的相对误差都是同一个值.
同样地,因为量x的真值未知,我们需要引入近似值F的相对误差限
片X),它是相对误差绝对值的较小上界.结合式(1.1)和(1.3),F相对误差限可通过绝对误差限除以近似值的绝对值得到,即
为给出近似数的一种表示法,使之既能表示其大小,乂能体现其精确程度,需引入有效数字以及有效数的概念.
定义1・3设量x的近似值F有如下标准形式X=±10"xO.a{a^…aj・・a卩
=±仏X1O"T+&2X1O"L2+…+勺X1O"L"+…+竹X1O"LP)(1.5)
其中{%}红u{O,l,…,9}且绚HO,加为近似值的量级.如果使不等式
/-X<-xlOw_/,(1.6)
2
成立的最大整数为“,则称近似值T具有"位有效数字,它们分别是①、①、…和心.特别地,如果有n=p,即最后一位数字也是有效数字,则称/是有效数.
从定义可以看出,近似数是有效数的充分必要条件是末位数字所在位置的单位一半是绝对误差限.利用该定义也可以证明,对真值进行“四舍五入”得到的是有效数.对于有效数,有效数字的位数等于从第一位非零数字开始算起,该近似数具有的位数.注意,不能给有效数的末位之后随意添加零,否则就改变了它的精度.
例1・1设量兀十其近似值<=3.141,X;=3.142,坨=丰.试回答这三个近似值分别有儿位有效数字,它们是有效数吗?
解这三个近似值的量级m=\,因为有
x;-x=0.00059---<0.005=1x10-2=lxl0*-3
'22
x;—x=0.0004--<0.0005=-x10-3=-xl01-4
-22
x;=3.142857142857
成一x=0.001-■<0.005=1x10-2=-x101-3
22
所以彳和x;都有3位有效数字,但不是有效数.%;具有4位有效数字,是有效数.
二、误差的传播
这里仅介绍初值误差传播,即假设自变量带有误差,函数值的计算不引入新的误差.对于函数$=/(羽,®…/”)有近似值:
/利用在点
(兀;,%;,…,%;)处的泰勒公式(TaylorFormula),可以得到
fl
)=y*-ya…工)(x;-兀)
r-i
n
=工乞(斤*;,・・工上(€)(1・7)
r-l
其中fi:
=尘,£是兀的近似值,e(x;)是x;的绝对误差(/=1,2,式(1.7)oxi
表明函数值的绝对误差近似等于自变量绝对误差的线性组合,组合系数为相应的偏导数值.
从式(1・7)也可以推得如下函数值的相对误差传播近似计算公式
/r£
工犬(昭迟,…工)十耳(£)(1.8)
/=iy
对于一元函数y=从式(1.7)和(1.8)可得到如下初值误差传播近似计算
公式
e(QyX)eX)(1.9)
-()「)2广(1.10)
y
式(1・9)表明,当导数值的绝对值很大时,即使自变量的绝对误差比较小,函数值的绝对误差也可能很大.
例1・2试建立函数y=/(州宀,…,兀)=州+厂+…+X”的绝对误差(限)、相对误差的近似传播公式,以及*:
>0};;时的相对误差限传播公式.
解山公式(1・7)秋1.8河分别推得和的绝对误差、相对误差传播公式如下
(1・11)
(M2)
e()「)Q£力(x;,x;,…,£"(X;)=£e(X/)
r-1j-1
e,(yX)〜(x;,€,…,兀:
)二e,.(x;)=£=J(x;)
/=iyf=iy
进而有
例1・3使用足够长且最小刻度为1mm的尺子,量得某桌面长的近似值
6/*=1304.3mm,宽的近似值//=704.8mm(数据的最后一位均为估计值).试求桌子面积近似值的绝对误差限和相对误差限.
解长和宽的近似值的最后一位都是估计位,尺子的最小刻度是毫米,故有误差限
£(/)=0.5mm,£•(/?
*)=0.5mm
面积S=ab.山式(1・7)得到近似值匚=ab4的绝对误差近似为
e(S*)ab*e(a*)+a*e(b')
进而有绝对误差限
£(S\a”*")+”*(//)=704.8x0.5+1304.3x0.5=1004.55mnr相对误差限
心、£(Sj1004.55nnniln
巧(S)q—;—=20.0011=0.11%
S1304.3x704.8
§13数值实验与算法性能比较
本节通过儿个简单算例说明解决同一个问题可以有不同的算法,但算法的性能并不完全相同,他们各自有自己的适用范围,并进而指出算法设计时应该注意的事项.
算例1・1表达式丄-一=—*—,在计算过程中保留7位有效数字,研究Xx+\x(x+l)
对不同的X,两种计算公式的计算精度的差异.
说明1:
Matlab软件采用IEEE规定的双精度浮点系统,即64位浮点系统,其中尾数占52位,阶码占10位,尾数以及阶码的符号各占1位.机器数的相对误差限(机器精度)eps=2一52^2.220446X10一”,能够表示的数的绝对值在区间(2.2250739X1O-308,1.797693X1O308)内,该区间内的数能够近似表达,但有舍入误差,能够保留至少15位有效数字.其原理可参阅参考文献[2,4].
分析算法1:
y.W=--一和算法2:
y?
(A)=—1—的误差时,精确解用
XX+1~x(x+1)
双精度的计算结果代替.我们选取点集{*}二中的点作为X,比较两种方法误差的差异.
从图1」可以看出,当X不是很大时,两种算法的精度相当,但当X很大时算法2的精度明显高于算法1.这是因为,当x很大时,丄和丄是相近数,用
Xx+\
算法1进行讣算时出现相近数相减,相同的有效数字相减后变成零,于是有效数字位数急剧减少,自然相对误差增大.这一事实也可以从误差传播公式(1.12)分析出.鉴于此,算法设计时,应该避免相近数相减.
在图1.2中我们给出了当x接近-1时,两种算法的精度比较,其中变量x依次取为{龙7-1}=.从图中可以看出两种方法的相对误差基本上都为10-7,因而二者的精度相当.
2D
图1.1算例1」中两种算法的相对误差图(XTRD)
丈,5^1015XK
i.x=prM
图1.2算例1.1中两种算法的精度比较(JVT-1)
算例1・2试用不同位数的浮点数系统求解如下线性方程组
0.0000LVj+2x2=1
<
2x,+3x2=2
说明2:
浮点数系统中的加减法在运算时,首先按较大的阶对齐,其次对尾数实施相应的加减法运算,最后规范化存入计算机.
算法1首先用第一个方程乘以适当的系数加至第二个方程,使得第二个方程的州的系数为零,这时可解出心;其次将兀带入第一个方程,进而求得“(在第三章中称该方法为高斯消元法).当用4位和7位尾数的浮点运算实现该算法,分别记之为算法la和算法lb.
算法2首先交换两个方程的位置,其次按算法1计算未知数(第三章中称其为选主元的高斯消元法).当用4位和7位尾数的浮点运算实现该算法,分别记之为算法2a和算法2b.
方程组的精确解为=0.25000187...»x2=0.49999874...,用不同的算法计算出的结果见表1.1.
表1.1对算例1.2用不同算法的讣算结果比较
算例
1.2
X;
g;)
X;
■
巧(x;)
算法la
0.0000
0.10X101
0.5000
0.25XIO-7
算法2a
0.2500
0.75X10-7
0.5000
0.25XIO-7
算法lb
0.2600000
0.40X10-1
0.4999987
0.10X10-6
0.2500020
O.5OX1O-8
0.5000000
0.25X10-7
对于算例1.2,表中的数据表明,当用4位尾数计算时,算法1给出错误的结果,算法2则给出解很好的近似.这是因为在实现算法1时,需要给第一个方程乘以-2/0.00001加至第二个方程,从而削去第二个方程中比的系数,但在计算孔的系数时需做如下运算
•_2-x2+3=-0.4xlO6+0.3x10*=-0.4x106+0.000003x106(1.13)0.00001
对上式用4位尾数进行计算,其结果为一0.4X106.因为舍入误差,给相对较大的数加以相对较小的数时,出现大数“吃掉”小数的现象.计算右端项时,需做如下运算
-~2-x1+2=-0.2x106+0.2xl0*=-0.2xl06-F0.000002xl06(1.14)0.00001
同样出现了大数吃小数现象,其结果为-0.2X106.这样,得到的变形方程组‘0」xioj+0.2x10'x2=0.1x10"
-0.4x106x2=-0.2x10&
中没有原方程组中笫二个方程的信息,因而其解远偏离于原方程组的解.该算法中之所以出现较大数的原因是因为运算-2/0.00001,因而算法设计•中尽可能避免用绝对值较大的数除以绝对值较小的数.其实半分子的量级远远大于分母的量级时,除法运算还会导致溢出,计算机终止运行.
虽从单纯的一步计算来看,大数吃掉小数,只是精度有所损失,但多次的大数吃小数,累汁起来可能带来巨大的误差,棋至导致错误.例如在算法la中出现了两次大数吃小数现象,带来严重的后果.因而尽可能避免大数吃小数的出现在算法设计中也是非常必要的.
当用较多的尾数位数进行计算,舍入误差减小,算法1和2的结果都有所改善,算法1的改进幅度更大些.
算例13计算积分/”=「丄心有递推公式/,严丄-5/心(〃=1,2,…),已知
Jux+5n
釆用IEEE双精度浮点数,分别用如下两种算法计算人。
的近似值・
6
算法1
取人的近似值为/(;=0.18232155679395,按递推公式/:
=丄一5/二计
n
算心
W1
/39".00458333333333,按递推公式/二“丄一计算
55)
算法1和算法2的计算结果见表1.2.误差绝对值的对数图见图1.3.
表1・2算例1.3的计算结果
n
算法1
n
算法2
I:
I:
-In
i;
I:
-In
1
8.8392e-OO2
1.9429e-016
39
4.5833e-003
3.9959e-004
2
5.8O39e-OO2
9.8532e-016
38
4.2115e-003
7.9919e-005
3
4.3139e-002
4.9197e-015
37
4.4209e-003
1.5984.005
4
3.4306e-002
2.4605e-014
36
4.5212e-003
3.1967e-006
5
2.8468e-002
1.2304e-013
35
4.6513e-003
6.3935e-007
6
2.4325e-002
6.1520e-013
34
4.7840e-003
1.2787e-007
•••
•••
••
33
4.9255e-003
2.5574e-008
25
1.1740e+001
1.1734e+001
32
5.0755e-003
5.1148e-009
26
-5.8664e+001
5.8670e+001
31
5.2349e-003
.0230e-009
27
2.9336e+002
2.9335e+002
30
5.4046e-003
2.0459e-010
28
-1.4667e+003
.4668e+003
29
7・3338e+003
7.3338e+OO3
30
-3.6669e+004
3.6669e+004
图1.3算例1・3用不同算法计算结果的误差绝对值的对数图
从表1.2中的计算结果可以看出,算法1随着计算过程的推进,绝对误差儿乎不断地以5的倍数增长,即有
成立.对于逐步向前推进的算法,若随着过程的进行,相对误差在不断增长,导致产生不可靠的结果,这种算法称之为数值不稳定的算法.对于算法1绝对误差按5的幕次增长,但真值的绝对值却在不断变小且小于1,相对误差增长的速度快于5的幕次,导致产生错误的结果,因而算法1数值不稳定,不能使用.而算法2随着计算过程的推进,绝对误差儿乎不断地缩小为上一步的1/5,即有
I:
—人«Ci-^1/5-C一人+2/52aI:
z一仏/5W
成立.绝对误差不断变小,真值的绝对值随着过程向前推进却在变大,这样相对误差也越来越小,这样的方法称之为数值稳定的算法.算法1和算法2的误差对数示意图见图1.3.这个算例告诉我们应该选用数值稳定的算法.
知识结构图
[绝对误差(限)
误差与算法^
误差度量相对误差(限)有效数字
•数值方法的收敛性算法数值方法的稳定性算法设计要点
■
习题一
1已知有效数x;=-3.105,X;=0.125X104,x;=0.010.试给出各个近似值的绝对误差限和相对误差限,并指出它们各有儿位有效数字.
2证明当近似值T是x的较好近似时,计算相对误差的计算公式丄二和丄二XX
(•、2
相差一个和1同阶的无穷小量.
3设x的近似值F具有如式(1.5)的表示形式,试证明
1)若T具有n位有效数字,则相对误差|^r(/)|
1--xlOl-n;
2)若相对误差er(x)<—1—xlOl-n,则F至少具有n位有效数字.
2(5+1)
4试建立二元算术运算的绝对误差限传播近似计算公式.
5试建立如下表达式的相对误差限近似传播公式,并针对第1题中数据,求下列各近似值的相对误差限.
1))T=x;+x;x;;2)y;=辰;3)y;=”;/x;
6若例题1.3中使用的尺子长度是80mm,最小刻度为1mm,量得某桌面长的近似值/=1304.3mm,宽的近似值Z?
4=704.8mm.试估计桌子长度、宽度的绝对误差限,并求用该近似数据讣算出的桌子面积的绝对误差限和相对误差限.
7改变如下计算公式,使其计算结果更为精确.
八1-COSXc口II
1)・x^0H|x|«l
“+1
2)JvIn皿=(7V+l)ln(/V+l)-7VlnN-l,N»1
3)y/x+1-y[x,X»1
8(数值试验)试通过分析和数值试验两种手段,比较如下三种汁算戶近似值算法的可壽性.
算法1
算法2
算法3
ea〉;
Zon\-1(v1V
l幺川丿
佝(〃?
-〃)!
丿
9(数值试验)设某应用问题归结为如下递推汁算公式
y°=28.72,yn=yn_{—5>/2»n=1,2,
在计算时41取为具有5位有效数字的有效数/.试分析近似计算公式
〉':
=元“-5/的绝对误差传播以及相对误差传播悄况,并通过数值实验验证(准确值可以用IEEE双精度浮点运算结果代替),该算法可靠可用吗?
(注:
可编辑下载,若有不当之处,请指正,谢谢!
)