§1.2 数值计算的误差
用数值方法解决科学研究或工程技术中的实际问题,一般来说,产生误差是不可避免的,根本不存在绝对的严格和精确。但是我们可以认识误差,从而控制误差,使之局限于最小(或尽量小)的范围内。
算法的实现必须在计算机上进行,计算机并不是像一般人想象的哪样可以解决一切问题而不出差错。半个世纪以来计算机带给我们这个世界的诸多烦恼中,误差问题最为突出。小到银行利率的错算,大到导弹的错误发射,除了操作人员的疏忽、机器的故障引起过失误差外,计算机在处理数据过程中还存在计算误差。这主要是计算机机器数所引起的,机器数的特点是有限、离散;这和数学上常用的实数系无限、稠密、连续的特点完全不同。
在2400多年前,古希腊人提出了被称为几何三大问题的古典难题。这说明在历史上,人类就常被误差所困扰。下面问题就是三大难题之一。
立方倍积问题做一个立方体,使其体积为已知立方体的二倍。
解 不妨设已知立方体体积为1,要做的立方体体积为2,则所做立方体高度应该为。用计算机计算出≈1.259 921 049 894 87(15位数),尽管精确度相当高,但仍然是近似值。下面表中列出了对h取前有限位数时,计算所得体积的误差。
位数
高度
体积
误差
2
1.2
1.728
2.7200×10--1
3
1.25
1.953125
4.6875×10--2
4
1.259
1.995616979
4.3830×10--3
5
1.2599
1.999899757799
1.0024×10--4
6
1.25992
1.99999500019149
4.9998×10--6
7
1.259921
1.99999976239049
2.3761×10--7
8
1.2599210
1.99999976239049
2.3761×10--7
9
1.25992104
1.99999976239049
4.7121×10--8
10
由上表可知,计算机机器数的有限位特点使这一问题只能在满足一定的精度条件下解决。误差是无法消除的。
1.2.1计算机的数系与运算特点
1.计算机数系
我们所研究的算法都是在计算机上求解的方法,因此应该了解计算机是如何进行数字计算的,这有助于构造和分析各种数值方法。数字运算主要是实数运算,而任一实数都可以表示为
=±
其中 为整数,x称为十进制浮点数。一般地,可定义进制浮点数为
=±
其中
在计算机中,由于机器本身的限制,一般实数只能被表示为
=±
其中 这里的t是正整数,是计算机的字长,c为整数,满足和为固定整数,对不同的计算机,是不同的。这样的是x称为t位进制浮点数,其中c称为阶码,称为尾数,数集
±
}
称为机器数系,它是计算机进行实数运算所用的数系,一般取2,8,10和16.机器数系F是一个离散的有限集合,分布也不均匀。在F中有一个最大正数M和一个最小正数m,如数系中,,若一个实数的绝对值大于M,则计算机产生上溢错误,若绝对值小于m,则计算机产生下溢错误,上溢时计算机中断程序处理;下溢时,计算机将此树以零表示,继续执行程序。上溢、下溢统称为溢出错误。通常,计算机把尾数为0且阶数最小的数表示为数零。
2.计算机对数的接收
设实数x是计算机接收的数,则计算机对其的处理方法是:
1)若,则计算机按原样接收x;
2)若,但,则计算机用数系F中最接近x的数表示并记录x。
3.计算机对数的处理
计算机对接收到数主要做加减乘除四则运算,其运算方式是:
1)加减法——先向上对阶,再运算,后舍入。
例1设计算机数系为,
是计算机接收到的二数。则此二数做加法的处理过程是:
2)乘除法——先运算,后舍入。
例2同例1条件,则此二数做乘法的处理过程是:
计算机接收和处理实数的上述特点,往往使得数学上完美的公式在计算机上编程计算时却得不到正确的结果,所以在数值计算的研究中应注意计算机的此种特点。
在计算机数系中,把尾数第一位的数称为规格化浮点数,用规格化浮点数表示一个实数,具有形式唯一和精度高的特点,但并不是中所有数都能用规格化浮点数表示,如就不能用规格化浮点数表示。
1.2.2误差的来源与分类
在数值计算过程中,估计计算结果的精确度是十分重要的工作,而影响精确度的因素是各种各样的误差,它们可分为两大类:一类称为“过失误差”,即因为疏忽导致误写数字和误用公式等,它一般是由人为造成的,这是可以避免的,故在“数值计算”中我们不讨论它;而另一类称为“非过失误差”,这在“数值计算”中往往是无法避免的,也是我们要研究的,大体有四种类型:模型误差、测量误差、截断误差和舍入误差。例如,计算地球的表面积可以用近似公式:。这其中就包含了各种误差。
1模型误差
用数值计算方法解决实际问题时,首先必须建立数学模型。由于实际问题的复杂性,在对实际问题进行抽象与简化时,往往为了抓住主要因素而忽略了一些次要因素,这样就会使得建立起来的数学模型只是复杂客观现象的一种近似描述,它与实际问题之间总会存在一定的误差。我们把数学模型与实际问题之间出现的这种误差称为模型误差。在上面的近似公式中,把地球表面近似地看成一个球,这就是地球的简单模型,它与地球的实际情况有很大的差别。
2测量误差
在数学模型中往往包含一些由观测或实验得来的物理量,如电阻、电压、温度、长度等,由于测量工具精度和测量手段的限制,它们与实际量大小之间必然存在误差,这种误差称为测量误差。上面近似公式中地球半径是要经过测量得到,然而无论使用什么工具,其误差是无法避免的。
3截断误差
由实际问题建立起来的数学模型,在很多情况下要得到准确解是困难的,通常要用数值方法求出它的近似解。例如常用有限过程逼近无限过程,用能计算的问题代替不能计算的问题。这种数学模型的精确解与由数值方法求出的近似解之间的误差称为截断误差,由于截断误差是数值计算方法固有的,故又称为方法误差。例如用函数的泰勒(Taylor)展开式的部分和去近似代替