误差的来源和分类
按误差来源分类
-
模型误差
数学模型通常是由实际问题抽象得到的,一般带有误差,这种误差称为模型误差,一般来说是不可避免的。
-
观测误差
数学模型中包含的一些物理参数通常是通过观测和实验得到的,难免带有误差,这种误差称为观测误差。也是不可避免的。
-
截断误差
求解数学模型所用的数值方法通常是一种近似方法,这种因方法产生的误差称为截断误差或方法误差。
例如:利用ln(x+1)的Taylor公式:
ln(x+1)=x−21x2+31x3−41x4+...+(−1)n+1n1xn+...
这是一个级数的形式,我们在计算机中无法计算无穷多项
实际计算时只能截取有限项代数和计算,如取前5项有:
ln(2)≈1−21+31−41+51
这里产生的误差为截断误差,记作R5
R5=−61+71−81+91−...
-
舍入误差
由于计算机只能对有限位数进行运算,在运算中像e、2、31等都要按舍入原则保留有限位,这时产生的误差称为舍入误差或计算误差。
截断误差或者说方法误差是由我们主观采用近似方法而产生的误差。舍入误差是由于计算机只能对有限位数进行运算而产生的误差,是不可避免的。
在数值分析中,我们总假定数学模型是准确的,因为不考虑模型误差和观测误差,主要研究截断误差和舍入误差对计算结果的影响。
绝对误差和相对误差
- 绝对误差
-
设x是精确值x∗的一个近似值,记
e=x∗−x
称e为近似值x的绝对误差,简称误差。
在本课程中,x为近似值,x∗为精确值。一般来说,x∗仅用于理论分析。
-
如果ϵ满足:
∣e∣⩽ϵ
则称ϵ为近似值x的绝对误差限,简称为误差限。
-
精确值x∗、近似值x和误差限ϵ之间满足:
x−ϵ⩽x∗⩽x+ϵ
简写为
x∗=x±ϵ
注意,这里的=不是精确的
-
绝对误差有时并不能很好地反应近似程度的好坏,如:
x∗=10,ϵx=1,y∗=10000,ϵy=5
虽然ϵy是ϵx的5倍,但在10000内差5显然比10内差1好。
- 相对误差
记:
er=x∗e=x∗x∗−x
称er为近似值x的相对误差。
同样地,由于x∗未知,实际使用时总是将x的相对误差取为:
er=xe=xx∗−x
ϵr=∣x∣ϵ称为近似值x的相对误差限。∣er∣⩽ϵr
例题
例1:设x=1.24是由精确值x∗经过四舍五入得到的近似值,求x的绝对误差限和相对误差限。
解:由已知可得1.235⩽x∗<1.245,我们说这个误差是截断误差,是由四舍五入这个方法得到的近似值。
所以ϵ=0.005,ϵr=0.005÷1.24≈0.4%
一般地,凡是由精确值经过四舍五入得到的近似值,其绝对误差限等于该近似值末尾的半个单位。
有效数字
有效数字的定义
问题:下列数作为π的近似值,它们的近似效果都一样吗?每个近似值当中的数字都起作用吗?
3.14,3.141,3.15
定义1:设数x是数x∗的近似值,如果x的绝对误差限是它的某一数位的半个单位,并且从x左起第一个非零数字到该数为共有n位,则称这n个数字为x的有效数字,也称用x近似x∗时具有n位有效数字。
数x总可以写成如下形式:
x=±0.a1a2...ak×10m
其中m为整数,ai是0到9中的一个数字,a1=0。
我们称这种形式为标准浮点数,任何一个数都可以转化为标准浮点数。
有效数字和绝对误差限之间的关系
x作为x∗的近似值,具有n位(n⩽k)有效数字当且仅当:
∣x∗−x∣⩽21×10m−n
由此可见,近似值的有效数字越多,其绝对误差越小。
例1:为了使x∗=2的近似值的绝对误差小于10−5,问应取几位有效数字?
根据∣x∗−x∣⩽21×10m−n
解:由于2=1.4...,则近似值x可以写为:
x=±0.a1a2...ak×10,a1=1=0,式中的m=1。
令∣2−x∣⩽21×101−n⩽10−5
故取n=6,即取6位有效数字。此时x=1.41421。
注意:精确值的有效数字可认为有无穷多位。
3.14,3.141,3.15
求它们的近似程度实际上就是求它们的绝对误差限是多少,每个近似值当中的数字都起作用吗?实际上就是求有效数字的位数。
有效数字和相对误差限的关系
若x有n位有效数字,则其相对误差限为:
ϵr⩽2a11×10−n+1
反之,若x的相对误差限:
ϵr⩽2(a1+1)1×10−n+1,则x至少有n位有效数字。
因此,知道有效数字可以求出相对误差限,知道相对误差限也可以求出有效数字。
数值计算的若干原则
为了减少舍入误差的影响,设计算法时应遵循如下原则。
1. 避免两个相近的数相减
如果两个相近的数相减,它得到的差会很小。从数值分析的角度上来说,它的有效数字的位数会大大减少。对于近似值,我们要尽可能多地保留有效数字的位数,因此要避免两个相近的数相减。
在数值计算中,如果遇到两个相近的数相减运算,可以考虑改变一下算法以避免两数相减。例如
当x1≈x2时,要求计算logx1−logx2,此时可以用对数的运算法则, 用logx2x1来替换。
当x≈0时,要求计算1−cosx,此时可以用三角函数的和差化积公式来计算,用2sin22x。
当x>>1时,要求计算x+1−x,此时可以用x+1+x1。
例1:求方程x2−64x+1=0的两个根,使他们至少具有四位有效数字。(1023≈31.984)
解:由求根公式有x1=32+1023≈63.984,具有5位有效数字,满足要求
若由x2=32−1023≈0.016,仅有两位有效数字。
这里我们需要改变算法,根据两个根之间的关系得x2=x11≈0.01563,则具有四位有效数字。
对两个相近的数相减,若找不到适当的方法代替,只能在计算机上采用双倍字长计算,以提高精度。
2. 防止大数“吃掉”小数
因为在计算机上只能采用有限位数计算,若参加运算的数量级差很大,在它们的加、减运算中,绝对值很小的数往往被绝对值较大的数“吃掉”,造成的计算结果失真。
例如,用八位十进制的浮点计算A=26358713+0.8+0.2
按照加法浮点运算的对阶规则,应有:
A=0.26358713×108+0.000000008×108+0.000000002×108
由于采用八位数运算,于是A=26358713
若改变计算顺序,计算0.2+0.8+26358713,则有
A=0.00000001×108+0.26358713×108=26358714
可见,在求和或差的过程中应采用由小到大的运算过程。
3. 绝对值太小的数不宜作除数
由于除数很小,将导致商的绝对误差很大,有可能出现“溢出”的现象。
4. 注意简化计算程序,减少计算次数
首先,若算法计算量太大,实际计算无法完成。
例如用线性代数中的Cramer法则求n元线性方程组Ax=b的解,
需要计算n+1个n阶行列式,而每个n阶行列式按定义D=∑P1P2...Pn(−1)ta1P1a2P2...anPn需要计算(n−1)n!次乘法,则Cramer法则至少需要(n2−1)n!次乘法,当n=20时,有(202−1)20!≈9.7×1020次乘法运算。
其次,即使是可行算法,则计算量越大积累的误差也越大,因此计算量越小越好。
因为舍入误差是不可避免地,它会随着计算量传播和积累。
例如计算n次多项式:
Pn(x)=anxn+an−1xn−1+...+a1x+a0
若直接逐项计算,大约需要乘法运算次数为2n(n+1)次。
若将多项式改写为:
Pn(x)=(...((anx+an−1)x+an−2)x+...)x+a0
则只需n次乘法和n次加法运算。
5. 选用数值稳定性好的算法
一种数值算法,如果其计算舍入误差积累是可控制的,则称其为数值稳定的,反之称之为不稳定的。
例如积分:
In=∫01xnex−1dx
利用分部积分法可得计算In的递推公式:
In=1−nIn−1,n=1,2,...
我们还需要一个初始迭代值I0,由于n=0时:
I0=∫01ex−1dx=1−e−1=0.632120558...
也就是说,在取I0时会有一个舍入误差,若取四位有效数字则递推可得:
对任何n都应有In>0,但计算结果显示I8<0,可见,虽然I0的近似误差不超过0.5×10−4,但随着计算步骤的增加,误差明显增大。这说明这里的递推公式是数值不稳定的。
这个算法本身是没有截断误差的,而在取I0时产生舍入误差。
根据原因,我们可以修改算法为
In−1=n1(1−In),n=k,k−1,...,2,1
类似地,可得:
Ik−Ik∗=(−1)n−kn!k!(In−In∗),k=n,n−1,...,1,0
可见,近似误差Ik−Ik∗是可控的,因此算法是数值稳定的。