张瑞
中国科学技术大学数学科学学院
rui@ustc.edu.cn |
误差
定义 1.
为的近似值,则称
为误差,或绝对误差
为相对误差
有效位数
定义 2.
近似数的误差不超过某位的半个单位,则从这一位开始到第一个非0位的位数,称为有效位数
例 1. 的近似值, , 分别具有几位有效数字?
例 2. 若有数,经过四舍五入后得到其近似值,
其中,分别为中的一个数字,为整数。则的有效位数就是从最后一位到第一个非0位的位数,即位有效数字。
例1:
-
先看3.14
中的最后一位。如果这是有效位,则真实值应该落它的前后半个单位,即
可以看到,这个条件是成立的。因此,3.14
的有效位是从最后一位开始往前数到第一个非0位,即3位有效数字。
-
对数3.141
,如果最后一位是有效位,则应该有
但,因此最后一位数1
不是有效位。前面已经知道百分位是有效位,
因此,3.141
同样只有3位有效数字。
例 3. 若具有位有效数字,估计其相对误差
解. 设
(1)
则,因而
简单点,可以用
来估计相对误差
误差的来源
从实际问题到最后的计算结果产生的误差,主要有如下3类:
- 原始误差,或称为模型误差,是在建模的过程中产生的误差
- 截断误差,或称为方法误差,是数值方法产生的误差
- 舍入误差,或称为计算误差,是由于计算机表达数据产生的误差
二进制表示
计算机中,用有限位数的二进制数来表达浮点数。
IEEE中,关于浮点数的标准
- 由于机器字长的限制,计算机表达浮点数时,总会有偏差。
- float类型的浮点数的精度范围是6~7位有效数字
- double类型的精度范围是15~16位有效数字
例 4. 将十进制分数,小数表达为二进制数。将二进制数表达为十进制数
解. 计算小数,首先将小数部分一直乘2,积的整数部分顺序取出:
0.4*2=0.8 取0 |
0.8*2=1.6 取1 | 顺
0.6*2=1.2 取1 | 序
0.2*2=0.4 取0 | 排
0.4*2=0.8 取0 | 列
0.8*2=1.6 取1 |
0.6*2=1.2 取1 |
0.2*2=0.4 取0 |
可以看出0110是循环,因此的二进制是
0.01100110……(循环0110)
十进制整数变为二进制数:
11/2=5 余 1
5/2=2 余 1
2/2=1 余 0
1/2=0 余 1
则有 。类似有 。利用除法有
0.011 001
————————
11100 ) 1011.00
111 00
—————————
100 000
11 100
—————————
100 000
11 100
—————————
100
则有
对于二进制数表达为十进制数为
例 5. 在单精度表达中,计算。最后的结果,会被表达成
但单精度只有小数点后6~7位的有效数字,也就是说,计算机只能表达成浮点数
也就是说,
这种现象称为“大数吞小数”
误差的运算
若, 为, 的近似值。
用两个有误差的数(, )做加减法后的值()
与真实值(, )做加减法得到的值()之间的误差为(也就是误差的加减法)
有
可以看到,加减后的绝对误差就是绝对误差的加减
相对误差
- 可以看到,当与同号时, 在与之间。
- 当与异号时,相对误差可能会变大。
特别当接近0,或者说两个接近的数相减时,相对误差会变大,表现出来有效数字会减小。
如
由5位有效数字,变为1位有效数字
乘法
有
相对误差
除法
当接近0时,绝对误差会被放大。
相对误差
总结:
- 尽量避免除一个绝对值很小的数。如,则编程时,优先使用,而不是。
- 尽量避免两个近似的数相减。
若与很接近时,应该换成其它的等价表达式,或者用近似公式
例 6. 求在处的近似值,用4位有效数字计算
解. 方法1: ,则
(此时,数字有几位有效数字?)
方法2: ,且,则
(此时,数字有几位有效数字?)
真解:
例 7. 求的根,其中,
解. 根据公式
在双精度条件下,时
此时,数据的有效位数很少。(后面的3807246685是随机的)
若用,则有
代入方程,可得
当时
作业
给出计算如下式子的方法,以达到相当的精度
- ,接近
- ,接近
- ,
算法的稳定性
例 8. (舍入误差的作用) 求
解. 由
可以构造2种算法:
可以用单精度,双精度,long double(C语言)来测试结果
运行结果表明:
- 算法I的计算会出现负值这种明显不合理的数值,而且随后数值开始振荡,而且振幅越来越大
- 算法I的振荡会随着表达精度(浮点数提高到双精度,再提高到long double)越高,出现的时间越晚
- 算法II不会出现算法I的不正常情况
两种算法均不存在方法上的误差,因此,不正常的现象只能是舍入误差引起的。
事实上,算法I中的数值的不正常现象的出现时间会随着表达精度的提高而变晚,就是一种典型的舍入误差导致的现象。
在算法I中,
- 若带有误差,则会放大5倍后,加入变量,
- 然后又被放大5倍加入.
- 随着越来越大,也被放大的越来越大,最后起主导作用
而在算法II中,前一步的误差,缩小5倍后加入下一个值,因而最初的舍入误差的影响越来越小。
定义 3.
对舍入误差没有抑制作用的算法,称为不稳定的算法。
算法的稳定性与误差一样,是计算方法中非常重要的话题。
有时候,模型本身就是病态的
例 9. 解线性方程组
解. 可以看到,
- 当时,真解为。
- 当时,真解为。
的变化只有大概,但解的变化达到了。解本身对输入参数很敏感。
如果一个模型的参数发生的很小的变化,会导致它的解产生很大的扰动,这样的模型称为病态的。
对于一个病态问题,
- 需要更高精度浮点数的计算机程序来计算
- 或者,想办法转换为等价、非病态的问题
程序作业
问题. 记级数(Hamming,1962)
编程计算为,,时的值,
并要求误差小于。
输出格式为
x=0, v=xxxxxxxxxxxx
x=0.5, v=xxxxxxxxxxxx
x=0.7, v=xxxxxxxxxxxx
x=sqrt(2), v=xxxxxxxxxxxx
x=10, v=xxxxxxxxxxxx
x=100, v=xxxxxxxxxxxx
x=300, v=xxxxxxxxxxxx
计算量
例 10. 如何以最少的计算量来计算
例 11. 如何以最少的计算量来计算
注意到
只要次乘法,次加法