跳至主要內容

数值计算的误差

大约 2 分钟

数值计算的误差

误差来源

截断误差

近似解与精确解之间的误差
eg. 泰勒展开仅取前几项

舍入误差

  1. 计算机字长有限导致的误差
  2. 原始数据由十进制转为二进制

误差定义

字母定义

  1. xx 准确值
  2. xx^* 近似值

绝对误差

e=xx e^*=x^*-x

ee^* 为绝对误差, 也简称误差

绝对误差限

xxε |x^*-x|\le\varepsilon^*

通常误差难以计算, 采用误差限表示, 也表示为

x=x±ε x=x^*\pm\varepsilon^*

相对误差

er=ex e_r^*=\frac{e^*}{x}

由于 xxx\approx x^*, 因此也采用

erex e_r^*\approx\frac{e^*}{x^*}

相对误差限

εr=εx \varepsilon_r^*=\frac{\varepsilon^*}{|x^*|}

有效数字

当近似值 xx^*误差限为某一位的半个单位, 该位到 xx^* 的第一位非零数字共 nn 位, 则称 xx^*nn 位有效数字 eg.

  1. 对于 x=π,x=3.1415x=\pi,x^*=3.1415 认为有 x=3.1415±0.00009x=3.1415\pm 0.00009, 误差限满足 0.00005<0.00009<0.00050.00005<0.00009<0.0005, 因此误差限为 0.0010.001 的半单位, 到个位 (从误差限的第一个非零值到近似值的最后一个非零值) 共有四位, 因此具有四位有效数字
  2. 对于 x=π,x=3.1416x=\pi,x^*=3.1416 认为有 x=3.1416±0.00001x=3.1416\pm 0.00001, 误差限满足 0.000005<0.00001<0.000050.000005<0.00001<0.00005, 因此误差限为 0.00010.0001 的半单位, 到个位共有五位, 因此具有五位有效数字

误差计算

假设估计值 xix^*_i 的误差限为 ε(xi)\varepsilon(x^*_i)

一般情况

对于 A=f(x1,x2,...,xn)A=f(x_1, x_2, ..., x_n), ε(A)\varepsilon(A^*) 满足公式

ε(A)(fxi)ε(xi) \varepsilon(A^*)\approx\sum|(\frac{\partial f}{\partial x_i})^*|\varepsilon(x^*_i)

简单运算

  1. 加减法

ε(x1±x2)ε(x1)+ε(x2) \varepsilon(x^*_1\pm x^*_2)\le\varepsilon(x^*_1)+\varepsilon(x^*_2)

  1. 乘法

ε(x1x2)x2ε(x1)+x1ε(x2) \varepsilon(x^*_1 x^*_2)\le|x^*_2|\varepsilon(x^*_1)+|x^*_1|\varepsilon(x^*_2)

误差分析

算法的稳定性

  1. 计算过程中舍入误差不增长的算法称此算法是数值稳定
  2. 否则称算法为不稳定
    eg. 迭代中, 如果算法每次迭代乘以一个大于 1 的系数, 使误差扩大, 通常为不稳定的

病态问题

如果问题本身的输入数据有扰动, 引起问题的解相对误差很大, 称为病态问题

条件数

可通过条件数判断函数 f(x)f(x) 值计算问题是否病态

Cp=xf(x)f(x) C_p=|\frac{xf'(x)}{f(x)}|

Cp>10%C_p>10\% 认为问题病态

避免误差危害

  1. 避免相近的两数相减 可转变为 分数与加法 的形式(平方和公式)
  2. 避免使用绝对值小的数做除数 可转变为 对数相减 的形式
  3. 减少运算次数与步骤(每次运算都会产生误差)
  4. 避免大数与小数相加减