01 计算方法引论 | 数值分析
1. 误差
1. 误差的分类
- 模型误差
- 观测误差
- 截断误差(方法误差)
- 舍入误差
2. 误差的度量
-
绝对误差\(e^*\)
- \(e^* = x^* - x\),其中\(x^*\)为近似值,\(x\)为准确值
- \(e^*\le\varepsilon^*\),\(\varepsilon^*\)为 误差限
- 绝对误差 有量纲,可以有正负
-
相对误差\(e_r^*\)
- \(e_r^* = \frac{e^*}{x^*}\)
- 相对误差 无量纲,可正负
-
相对误差限\(\varepsilon_r^* = \frac{\varepsilon^*}{|x^*|}\)
-
有效数字:假定准确值\(𝑥\)与近似值\(𝑥^*\)写成小数形式, 近似值\(x^*\)的误差限是某一位的半个单位, 该位到\(x^*\)的第一位 非零 字共有\(𝑛\)位, 就说\(x^*\)有\(n\)位有效数字
- 绝对误差不超过末位有效数字的半个单位
- 当近似数\(x^*\)表示为\(x^* = \pm 10^m\times(a_1+a_2\times 10^{-1}+\cdots+a_L\times 10^{-(L-1)})\)具有\(n\)位有效数字\((L\ge n)\),则\(|x^* - x|\le\frac{1}{2}\times 10^{m - n + 1}\)
-
有效数与相对误差限之间关系:设近似数\(x^*\)表示为\(x^* = \pm 10^m\times(a_1+a_2\times 10^{-1}+\cdots+a_L\times 10^{-(L-1)})\),其中\(a_i(i = 1, 2, \cdots, L)\)是\(0\)到\(9\)的一个数字。\(a_1\ne 0,m\)位整数
- 如果\(x^*\)具有\(n\)位有效数字,那么其相对误差限为\(\varepsilon_r^*\le \frac{1}{2a_1}\times 10^{-(n-1)}\)
- 反之,若\(x^*\)相对误差限\(\varepsilon_r^*\le \frac{1}{2a_1 + 1}\times 10^{-(n-1)}\),则\(x^*\)至少有\(n\)位有效数字
3. 误差的传播
- 四则运算:给定两近似数\(x_1^*,x_2^*\),及其误差限\(\varepsilon(x_1^*), \varepsilon(x_2^*)\),那么
- 加法:\(\varepsilon(x_1^* + x_2^*)\le\varepsilon(x_1^*) + \varepsilon(x_2^*)\)
- 减法:\(\varepsilon(x_1^* - x_2^*)\le\varepsilon(x_1^*) + \varepsilon(x_2^*)\)
- 乘法:\(\varepsilon(x_1^*x_2^*)\approx|x_1^*|\varepsilon(x_2^*) + |x_2^*|\varepsilon(x_1^*)\)
- 除法:\(\varepsilon(\frac{x_1^*}{x_2^*})\approx\frac{|x_1^*|\varepsilon(x_2^*) + |x_2^*|\varepsilon(x_1^*)}{|x_2^*|^2}\)
- 函数误差
- 单变量:当\(f^{\prime\prime}(x^*)\)与\(f^{\prime}(x^*)\)比值不大的时候,\(\varepsilon(f(x^*))\approx|f^{\prime}(x^*)|\varepsilon(x^*)\)
- 多变量:当\(f(x_1, x_2, \dots, x_n)\)是多元函数,\(x_1, \dots, x_n\)的近似值为\(x_1^*, \dots, x_n^*\),则误差限\(\varepsilon(f(x_1^*, \dots, x_n^*))\approx\sum_{k=1}^n|(\frac{\partial f}{\partial x_k})^*|\varepsilon(x_k^*)\)
2. 算法
1. 数值稳定性
- 数值稳定性:一个算法如果输入数据有误差,而在计算过程中舍入误差不增长,则称此算法时数值稳定的;否则称此算法为不稳定的
- 条件数:相对误差比值\(|\frac{f(x) - f(x^*)}{f(x)}|/|\frac{\Delta x}{x}|\approx|\frac{xf^{\prime}(x)}{f(x)}| = C_p\),其中\(C_p\)为计算函数值问题的 条件数
- 病态问题:如果条件数很大,即便变量(输入)相对误差不太大,但也会引起函数值(输出)相对误差很大,出现这种情况的问题就是 病态问题
2. 算法设计注意要点
- 避免除数绝对值远远小于被除数绝对值的除法
- 避免两个相近的数相减
- 防止“大数”吃掉“小数”
- 简化计算步骤、减少运算次数(秦九韶算法)