点击上方「蓝字」关注我们
误差及其分类
数值计算方法中的计算公式及参与运算的数都与数学中的一般情况有所不同,即计算公式中的运算必须是在计算机上可执行的运算,参与运算的数必须是有限小数或整数,因此,数值方法中的取数和运算往往会出现误差,计算的结果一般也为近似值。准确地讲,误差是表示某个量值的精确数与近似数之间差异的度量。在实际研究当中误差主要来源于以下 4 个方面:
(1)模型误差:由实际问题抽象、简化为数学问题(建立数学模型时)所引起的误差。
(2)观测误差:测量工具的限制或在数据的获取时随机因素所引起的物理量的误差。
(3)截断误差:是用数值法求解数学模型时得到的正确解和模型准确解间的误差,通常是有限过程代替无限过程所引起的。
例如,若用级数 的前三项计算 的近似值,即取 ,其截断误差为 。
一般来说,数值计算的各种方法都有不同程度的近似,如计算定积分和计算常微分方程初值问题数值解时,事实上都是在泰勒级数中取有限项近似的,这些计算方法均会产生截断误差,选择近似程度高的计算方法,可以减小截断误差。
(4)舍人误差:由于计算机所表示的位数有限,通常用四舍五入的办法取值而引起的误差。
例如,用 来代替圆周率 ,其舍人误差为 。
通常又将误差分为两类:一类是固有误差,包括模型误差和观测误差;另一类是在计算过程中引起的计算误差,包括截断误差和舍入误差。数值计算方法所考虑的主要是计算误差。
绝对误差和相对误差
若 为准确值 的一个近似值,则称 为近似值 的绝对误差,并用 来表小,即
实际上,我们只能知道近似值 ,而不知道准确值 ,但可对绝对误差的大小范围作出估计,即可以指定一个正数 ,使
称 为近似值 的一个绝对误差限。在工程技术中常表示为 。
绝对误差还不足以刻画近似数的精确程度。例如,甲测量一物体长度为 ,,则 ;而乙测量一物体长度为 ,, 。从表面上看,后者的绝对误差是前者的 50 倍。但是,前者每厘米长度产生了 的误差,而后者每厘米长度只产生 的误差。因此,要决定一个量的近似值的精确程度,除看绝对误差的大小外,往往还需考虑该量本身的大小。
我们定义
为近似值 的相对误差。同样地,若能求出一个正数 ,使得 ,则称 为近似值 的一个相对误差限。相对误差是一个无量纲的数,通常又用百分数来表示,称为百分误差。例如上例中甲测量的相对误差为 ,而乙测量的相对误差为 。
有效数字
当准确值 有很多位数时,常按"四舍五入"原则得到 的近似值 。例如 ,按四舍五入取三位数字得 的近似值为 ,取六位数字的近似值为 。无论取几位数字所得的近似值,其绝对误差都不会超过其末位数的半个单位。对于四舍五人取得的近似值,通常用有效数字来描述。
若近似值 的绝对误差限是某一位上的半个单位,该位到 的非零数字共有 位,则称近似值 具有 位有效数字。
上例中, 具有 3 位有效数字, 有 6 位有效数字。对于同一个数的近似值而言,有效数字位数越多,其绝对误差与相对误差都越小;反之,绝对误差或相对误差越小,有效数字的位数有可能越多。
几个减小误差的原则
数值计算中,每一步都可能产生误差,不可能要求步步进行分析,以下仅从误差的某些传播规律出发,给出在数值计算中需注意的几个原则,以提高计算的可靠性。
选用数值稳定性好的算法
在研究算法稳定性时,要考虑每一步舍入误差的影响及其相互作用是非常繁琐的。简便的方法是假定初始值有误差 ,中间过程不再产生新的误差,考察 引起的误差是否累计增长。如不增长就认为是稳定的,如严重增长就认为不稳定。以下举例予以说明。
【例1】考虑循环公式
设 的误差为 ,求 时的误差值。
解:
显然,随着 的增加,误差 迅速增加。
【例2】 计算积分 。
解:采用分部积分,取 ,则有
其中 。由 知,,利用上例的结果可得 ,而 的实际值为 。由于
可知当 时, 。
若将循环公式改写为
从 出发,设 ,则
显然, 已接近于真解,且误差很小。因此,在循环计算过程中,应注意累积误差增大或减小的方向。若计算过程使累积误差加大,需将计算过程反过来,这样才能得到较为准确的数值解。
避免两个相近数相减
在计算中若两个相近数相减,则这两个数的前几位相同的有效数字会在相减中消失,从而减少有效数字。在这种情况下,应多保留这两个数的有效数字,或者对公式进行处理,避免减法,特别不要再用两数的差作为除数。
例如,计算 。当 时取 4 位有效数字进行计算,有
该结果只有 1 位有效数字,而若将公式改为
则它有 4 位有效数字。可见,改变计算公式可以避免两个相近数相减而引起的有效数字损失,从而得到比较精确的结果。
又例如,当 很小时,可以用以下等价的计算公式来替换减法运算:
避免大数和很小的数直接相加
一个绝对值很大的数和一个绝对值很小的数直接相加时,很可能发生所谓"大数吃小数"的现象,从而影响计算结果的可靠性。
例如,考察物体在阻尼介质中的运动时,阻尼系数 是一个重要的物理参数,若在动力学方程离散化过程中将 置于一个很大的数 的加法中,则 就容易被 所 "吃掉",计算结果就会严重失真。
又如,若对 ,, 三个数进行加法运算, ,, ,如果按照 编程计算,在八位计算机上进行计算时, "吃掉" ,且 与 相互抵消,其结果接近于零。但若按 顺序编程,其结果为 。
因此,在考虑绝对值悬殊的一系列数相加时,应按绝对值由大到小的顺序排列,再确定累加先后次序。
减少运算次数
减少运算次数,既可减少运算时间,又可能使得计算中的误差减小。例如,若要计算
的值,如直接进行计算,需要作 次乘法和 次加法。若将公式变为如下递推公式
则 。以上计算只需作 次乘法和 次加法。理论和实践证明,进行算法设计时,充分利用递推公式,有利于提高算法的效率。
结语
数值计算是一项复杂而又精细的工作,合理地控制和管理误差对于确保计算结果的质量具有重要意义。希望本文的介绍能够帮助读者加深对数值计算中误差的理解,并掌握一些实用的减小误差的方法。在未来的研究和实践中,不断探索和完善相关的误差控制技术,将是推动数值计算领域发展的重要方向。
往期推荐
推荐阅读
FEtch 系统是笔者团队开发的新一代有限元软件开发平台。只需按照有限元语言格式填写脚本文件,即可在线自动生成基于现代 Fortran 的有限元计算程序,从而大幅提高 CAE 软件的开发效率。欢迎私信交流。
有任何疑问或建议,欢迎加Q群 "FEtch有限元开发系统(519166061)" 留言讨论。我们长期开展 FEtch 系统的试用活动,感兴趣的朋友入群后可直接联系管理员,免费获取许可证文件。