主要内容:

  • 误差来源
  • 有效数字
    • 有没有小数点
  • 误差
  • 舍入误差

零、误差的来源

数值方法No.2-数值计算的准确性和稳定性 - 图1

一、有效数字

  • 定义1没有小数点的数:从左边的第一个非零数字到右边最后的非零数字之间的所有数字,例如12000有两个有效数字“1”“2”。
  • 定义2:有小数点的数:从左边第一个非零数字到右边最后的数字(不管是否为0),例如2000.5有5个有效数字,2000.5000有8个有效数字,0.0001有一个有效数字,0.000100有三个有效数字。
    • 有效数字:只有最后一位是不准确的。例如,如果某个重量为10.5g,那么有效数字为3个,那么大概介于10.45~10.55之间;如果重量是10.500g,那么有效数字是5个,那么重量介于10.495~10.505之间。

二、迭代(Iterative refinement)VS 直接(Direct)

  • 迭代:从一个处置开始,然后越来越接近真值;
  • 直接:一步到位真值。

三、误差定义

  • 误差:真值和近似值之间的差
    • 绝对误差数值方法No.2-数值计算的准确性和稳定性 - 图2真值true value - 近似值approx,相对误差数值方法No.2-数值计算的准确性和稳定性 - 图3误差/真值。相对误差更有效地测量准确程度,因为和单位无关。
    • 百分比真实相对误差(true percent relative error)数值方法No.2-数值计算的准确性和稳定性 - 图4——we don’t know.
    • Percent approximation error = 数值方法No.2-数值计算的准确性和稳定性 - 图5——we know it.
    • 在迭代计算过程中,每一步的误差数值方法No.2-数值计算的准确性和稳定性 - 图6,一般而言,只要定义一个百分比公差eps,当误差下降到eps内,那么停止计算。
  • Newton-Raphson求方程的解

数值方法No.2-数值计算的准确性和稳定性 - 图7

四、舍入误差Roundoff error

1. Quantization error

  • 数字在计算机中如何表示:
    • 整数(Integer)
    • 固定点(Fixed-point)
    • 浮点(Floating-point)


  • 整数表达:16位二正数进制的表达的范围-32768~32767。

image.png
左边第一位是符号位置,1=负数,0=正数;
剩下的15个位置表示数字,右边第一个位置是数值方法No.2-数值计算的准确性和稳定性 - 图9,右边第二个位置是数值方法No.2-数值计算的准确性和稳定性 - 图10,左边第二个位置是数值方法No.2-数值计算的准确性和稳定性 - 图11对应位置的01表示01和对应的2的指数幂相乘。

  • 0的表达:数值方法No.2-数值计算的准确性和稳定性 - 图12
  • 最大正数:数值方法No.2-数值计算的准确性和稳定性 - 图13
  • 第二个最大负数:数值方法No.2-数值计算的准确性和稳定性 - 图14
  • 最大的负数:数值方法No.2-数值计算的准确性和稳定性 - 图15,这是因为0的表达已经是16个0,因此这里特指1+15个0是最大的负数(虽然计算方式和上面的相悖)。
  • 因此,范围是-32768~32767。
  • 浮点数的表示;那么整数部分称为exponent(characteristic),分数部分称为mantissa(significand)。
    • 数值方法No.2-数值计算的准确性和稳定性 - 图16,m=mantissa,b=base,e=exponent,中间的点是乘号;例如10进制base=10,二进制中base=2;
    • Normalization:丢掉多余的0,例如0.05=数值方法No.2-数值计算的准确性和稳定性 - 图17
      • 标准,数值方法No.2-数值计算的准确性和稳定性 - 图18
      • 例如,10进制中,存在数值方法No.2-数值计算的准确性和稳定性 - 图19;二进制中,存在数值方法No.2-数值计算的准确性和稳定性 - 图20

image.png

  • 例子,使用7位二进制的浮点数表达,左边第一位是整体的正负符号,第二位是幂的正负符号,三四两位是幂的大小,5~7位是整数位置的大小。找到最小的正数。

image.png
那么第一位=0,表示正数;第二位幂的符号取负数;三四两位得到最大的幂=12^1+12^0=3;5~7位是整数m的位置(需要处在0.5<=m<1之间),最小=0.5+0+0=0.5,因此最小的正数=0.5*2^{-3}=0.0625
第二小的正数=2^{-3}(12^{-1}+02^{-2}+12^{-3})
最大的正数=2^{3}(2^-1+2^-2+2^-3)=7。
在这个数值系统中,不仅仅存在overflow的问题(不能超出-7~7的范围),也存在underflow的问题,不能够小于0.0625的误差;随着数字增大,*数字之间的空隙
(无法表达的数字)也越来越大。

  • 关于四舍五入到第几位?
    • float具有7位数字的精度,double具有15位数字的精度,但是速度变慢。
  • 例子 ```cpp

    include

    using namespace std;

const float a = 1.234; const float b = 0.0000005678; const double c = 1.234; const double d = 0.0000005678;

class p1 { private: float x; double y; public: void floating() { x = a + b; y = c + d; cout.setf(ios::fixed, ios::floatfield); //固定格式 cout.precision(10); //高精度 cout << x << endl; cout << y << endl;
} };

int main() { p1 p; p.floating(); return 0; } ``` 结果:x=1.2340005636,y=1.2340005678。
如果设定精度为15位,那么结果为x=1.234000563621521,y=1.234000567800000。
因此,double更加准确。

2. Numerical manipulations

  • 各种运算
  • Stability and condition
    • Stability:算法的问题。
    • Condition:问题本身的条件不好。

五、Truncation error

  • 截断了无限的序列,例如泰勒展开。

    1. Taylor Series

    数值方法No.2-数值计算的准确性和稳定性 - 图23

  • 未必总是收敛;

  • 但是总能够近似各种函数;
  • MacLaurin Series (泰勒展开的特例:a=0)

数值方法No.2-数值计算的准确性和稳定性 - 图24

  • 例子

数值方法No.2-数值计算的准确性和稳定性 - 图25
image.png
这里a表示开始拟合的位置。

2. 误差的表示

数值方法No.2-数值计算的准确性和稳定性 - 图27

  • 推导
    • 积分均值的第一定理

数值方法No.2-数值计算的准确性和稳定性 - 图28

  • 积分均值的第二定理

数值方法No.2-数值计算的准确性和稳定性 - 图29
积分均值的第一定理即为第二定理的特殊情况,h(t)=1。

  • 那么令

数值方法No.2-数值计算的准确性和稳定性 - 图30