误差
误差:一个物理量的真实值与计算值之间的误差
误差来源与分类
- 模型误差:对问题所抽象出来的数学/物理模型是误差的,比如要有一些假设条件才进行理论的推导
- 观测误差:测量得到的模型的参数的值的误差
- 方法误差(截断误差):求近似解的方法的误差
- 舍入误差:计算机字长有限,例如计算机所存储的PI值和实际的PI值之间是有误差的、浮点数误差
在使用数值方法解决问题的时候,要重点考虑方法误差和舍入误差
案例:近似计算
【值范围估计】
【数值方法计算】
从上面可知,数值计算所得到定积分的值是0.743,且该值与原定积分值(0.747… …)的误差不超过0.006
误差的传播与积累
有一个天气预报程序,有下面两种计算方式
- 直接演算完两周的变化过程,得到最终的结果
- 先计算一周的变化过程,然后将数据存储下来,接着计算第二周的变化过程
上面两种方式得到的结果可能天差地别,因为中途将数据输出为文件时需要对数字取有限的位数,这就出现了舍入误差,这个误差随着积累越来越大,最终造成两种方式所求得的结果差异较大
对于一些病态问题,可能一开始只是有一点小误差,但是随着计算过程的积累,最后所得到的结果会有巨大的失真
案例
方法一
【算法稳定性分析】
方法二
总结
误差是不可回避的,在使用一个算法之前,需要先分析算法的稳定性
绝对误差与相对误差
绝对误差
相对误差
使用绝对误差不太容易衡量误差的大小,用相对误差
转化为百分比的数更容易看出来
有效数字
有效数字位数:从小数点的最后一位开始数,数到最前面不为零的数字,如0.1的有效数字位数是1,1.1的有效数字位数是2
上面内容的数学描述如下:
案例
12300应该写成,0.12300x10^5,这样有效数字的位数才是不变的
有效数字与相对误差限
有效数字推导相对误差限
相对误差限推导有效数字
案例
函数的误差估计
案例(1)
案例(2)
算法设计的注意事项
在算法设计的时候需要考虑误差的传播和累积,在使用计算机进行实现的时候需要注意如下方面:
避免相近的两个数相减
避免分母太小(会造成浮点溢出)
尽量不要用大数除以小数,不然数字很大,计算机字长有限,舍入误差较大
避免大数吃小数
避免 大数和小数 之间 相加或者相减
求和时 从小到大 相加,可以使得 和的误差 减小
如果想用大数 加 小数,可能会出现大数吃小数的情况
先化简再计算,避免误差累积
一般来说,计算机处理下列运算的速度为 加减>乘除>exp(),可以先尽量将运算化简为 加减、乘除,再进行计算
选用稳定的算法
说明
文章为本人学习网上课程的学习笔记,课程的链接为 《数值分析》2020年春季华中科技大学研究生课程 46讲合辑,文章中大部分图片来源于课程截图,部分图片中加上了本人的理解标注,如有侵权,麻烦联系删除,最后对老师的课程表示衷心的感谢。