数值计算的误差
误差来源
截断误差
近似解与精确解之间的误差
eg. 泰勒展开仅取前几项
舍入误差
- 计算机字长有限导致的误差
- 原始数据由十进制转为二进制
误差定义
字母定义
- x 准确值
- x∗ 近似值
绝对误差
e∗=x∗−x
称 e∗ 为绝对误差, 也简称误差
绝对误差限
∣x∗−x∣≤ε∗
通常误差难以计算, 采用误差限表示, 也表示为
x=x∗±ε∗
相对误差
er∗=xe∗
由于 x≈x∗, 因此也采用
er∗≈x∗e∗
相对误差限
εr∗=∣x∗∣ε∗
有效数字
当近似值 x∗ 的误差限为某一位的半个单位, 该位到 x∗ 的第一位非零数字共 n 位, 则称 x∗ 由 n 位有效数字 eg.
- 对于 x=π,x∗=3.1415 认为有 x=3.1415±0.00009, 误差限满足 0.00005<0.00009<0.0005, 因此误差限为 0.001 的半单位, 到个位 (从误差限的第一个非零值到近似值的最后一个非零值) 共有四位, 因此具有四位有效数字
- 对于 x=π,x∗=3.1416 认为有 x=3.1416±0.00001, 误差限满足 0.000005<0.00001<0.00005, 因此误差限为 0.0001 的半单位, 到个位共有五位, 因此具有五位有效数字
误差计算
假设估计值 xi∗ 的误差限为 ε(xi∗)
一般情况
对于 A=f(x1,x2,...,xn), ε(A∗) 满足公式
ε(A∗)≈∑∣(∂xi∂f)∗∣ε(xi∗)
简单运算
- 加减法
ε(x1∗±x2∗)≤ε(x1∗)+ε(x2∗)
- 乘法
ε(x1∗x2∗)≤∣x2∗∣ε(x1∗)+∣x1∗∣ε(x2∗)
误差分析
算法的稳定性
- 计算过程中舍入误差不增长的算法称此算法是数值稳定的
- 否则称算法为不稳定的
eg. 迭代中, 如果算法每次迭代乘以一个大于 1 的系数, 使误差扩大, 通常为不稳定的
病态问题
如果问题本身的输入数据有扰动, 引起问题的解相对误差很大, 称为病态问题
条件数
可通过条件数判断函数 f(x) 值计算问题是否病态
Cp=∣f(x)xf′(x)∣
当 Cp>10% 认为问题病态
避免误差危害
- 避免相近的两数相减 可转变为 分数与加法 的形式(平方和公式)
- 避免使用绝对值小的数做除数 可转变为 对数相减 的形式
- 减少运算次数与步骤(每次运算都会产生误差)
- 避免大数与小数相加减