1.数值算法、误差及误差传播规律

1.数值算法

数值计算是指借助计算机用数值方法来近似求解数学问题。
在数学的长期发展过程中,数学家们解决了一个又一个的问题。这中间有些问题是可以求出确切解的,但是有些问题是不容易或者根本无法求出确切的解的。数值计算可以用来解决这些数学问题。
我们通常使用下列四个标准来衡量数值算法的优劣:

  • 简单易实现:算法容易在计算机上面实现
  • 收敛与稳定:算法具有很好的收敛性和稳定性
  • 计算效率高:算法的效率高,而且节省存储
  • 算法有效:算法确实可以解决对应的问题

2.误差

误差的含义和分类

前面说了,数值计算的目的不是求一个确切解,而是近似的求解。误差就是衡量数值计算结果和确切解近似程度的工具。

误差描述数值计算中近似值的精确程度
在一般的数值计算教材的定义中,误差按来源可分为模型误差观测误差截断误差舍入误差四种。下面我来谈一下我对四种误差的理解。

  • 模型误差:在针对实际问题的分析中,我们建立了一个数学模型,这个数学模型带有自己的误差。例如对于人口问题,如果我们建立线性模型来研究人口问题,显然这和实际情况就存在一些误差
  • 观测误差:这个比较好理解,我们在获取数据时,难免会有测量的误差,例如对于同一本书籍,用20cm的直尺和精度更高的游标卡尺测量,其厚度的测量值是不一样的,并且这两个测量的值和原始数据本身会有一定的误差
  • 截断误差:在数学计算中,近似方法通常都要舍去某些项,这些舍去的东西就形成了截断误差,这是人为的截断,又称为方法误差
  • 舍入误差:计算机只可以计算有限的数字,而且对于 2 \sqrt{2} 2 这样的数字,计算机是无法表示的,那么我们必须进行保留有限位,这就是舍入

绝对误差,相对误差和误差限

  • 假设精确值为 x ∗ x^* x x x x 是精确值 x ∗ x^* x 的一个近似值,将误差 e r r o r error error简单表示为 e e e e = x ∗ − x e =x^*-x e=xx为近似值 x x x绝对误差,简称误差
  • 如果绝对误差满足 ∣ e ∣ ≤ ϵ |e|\leq \epsilon eϵ 则称 ϵ \epsilon ϵ 为近似值 x x x绝对误差限,简称误差限
  • 有时绝对误差不能很好的描述近似的程度,所以定义 e r = e x ∗ e_r=\frac{e}{x^*} er=xe相对误差,在实际情况中, x ∗ x^* x不容易获得,所以实际中有时取 e r = e x e_r=\frac{e}{x} er=xe,相对的,可以定义满足 ∣ e r ∣ ≤ ϵ r |e_r|\leq\epsilon_r erϵr ϵ r \epsilon_r ϵr相对误差限
  • 有效数字:在诸多实验学科中都会定义一个有效数字的概念。这里用误差来给有效数字下一个数值计算的定义。设数 x x x是数 x ∗ x^* x的近似值,如果 x x x的绝对误差限是它的某一数位的半个单位,并且从 x x x左起第一个非零数字到该数位共有 n n n 位,则称这 n n n个数字为 x x x的有效数字,也称用 x x x近似 x ∗ x^* x时具有 n n n位有效数字。例如对于 x = 0.578 x = 0.578 x=0.578,若其绝对误差限为 0.0005 0.0005 0.0005,那么它就有3位有效数字

3.误差传播规律

在实际的数值计算中,已知局部的误差,如何通过分析求出整体的误差?

如果我们不考虑模型误差,截断误差和舍入误差,只分析初始的数据误差对结算结果误差的影响,即分析算法的稳定性,那么我们就需要分析误差传播规律。
这个问题可以描述成以下的数学问题
已 知 算 法 为 y = f ( x 1 , x 2 , . . . , x n ) x 1 , x 2 , . . . x n 的 精 确 值 分 别 为 x 1 ∗ , x 2 ∗ , . . . x n ∗ 每 个 数 据 的 误 差 为 e i = x i ∗ − x i 求 e y = y ∗ − y 的 值 已知算法为y=f(x_1,x_2,...,x_n) \\ x_1,x_2,...x_n的精确值分别为x_1^*,x_2^*,...x_n^* \\ 每个数据的误差为 e_i = x_i^*-x_i \\ 求 e_y=y^*-y的值 y=f(x1,x2,...,xn)x1,x2,...xnx1,x2,...xnei=xixiey=yy

我们不妨先来分析加法的绝对误差传播
y = f ( x 1 , x 2 ) = x 1 + x 2 , e 1 = x 1 ∗ − x 1 , e 2 = x 2 ∗ − x 2 则 e y = y ∗ − y = ( x 1 ∗ + x 2 ∗ ) − ( x 1 + x 2 ) = x 1 ∗ − x 1 + x 2 ∗ − x 2 = e 1 + e 2 y=f(x_1,x_2)=x_1+x_2, e_1 = x_1^*-x_1,e_2=x_2^*-x_2 \\ 则e_y=y^*-y=(x_1^*+x_2^*)-(x_1+x_2)=x_1^*-x_1+x_2^*-x_2=e_1+e_2 y=f(x1,x2)=x1+x2,e1=x1x1,e2=x2x2ey=yy=(x1+x2)(x1+x2)=x1x1+x2x2=e1+e2
也就是说加法的误差传播是线性的,下面我们来分析减法的相对误差传播
y = f ( x 1 , x 2 ) = x 1 − x 2 , e 1 r = x 1 ∗ − x 1 x 1 , e 2 r = x 2 ∗ − x 2 x 2 则 e y r = y ∗ − y y = ( x 1 ∗ − x 2 ∗ ) − ( x 1 − x 2 ) x 1 − x 2 = ( x 1 ∗ − x 1 ) − ( x 2 ∗ − x 2 ) x 1 − x 2 = x 1 e 1 r − x 2 e 2 r x 1 − x 2 y=f(x_1,x_2)=x_1-x_2, e_{1r} = \frac{x_1^*-x_1}{x_1},e_{2r}=\frac{x_2^*-x_2}{x_2} \\ 则e_{yr}=\frac{y^*-y}{y}=\frac{(x_1^*-x_2^*)-(x_1-x_2)}{x_1-x_2}=\frac{(x_1^*-x_1)-(x_2^*-x_2)}{x_1-x_2}=\frac{x_1e_{1r}-x_2e_{2r}}{x_1-x_2} y=f(x1,x2)=x1x2,e1r=x1x1x1,e2r=x2x2x2eyr=yyy=x1x2(x1x2)(x1x2)=x1x2(x1x1)(x2x2)=x1x2x1e1rx2e2r
这里的规律就不那么显然了,让我们进行简单的放缩
∣ e y r ∣ = ∣ x 1 e 1 r − x 2 e 2 r x 1 − x 2 ∣ ≤ ∣ x 1 x 1 − x 2 ∣ ∣ e 1 r ∣ + ∣ x 2 x 1 − x 2 ∣ ∣ e 2 r ∣ |e_{yr}|=\left|\frac{x_1e_{1r}-x_2e_{2r}}{x_1-x_2}\right|\leq\left|\frac{x_1}{x_1-x_2}\right||e_{1r}|+\left|\frac{x_2}{x_1-x_2}\right||e_{2r}| eyr=x1x2x1e1rx2e2rx1x2x1e1r+x1x2x2e2r
如果减法的两个数字 x 1 , x 2 x_1,x_2 x1,x2很接近,那么相对误差就可能会很大,所以从这一点总结出一条规律:避免相近的数相减

如果算法是一个复杂的过程,我们可以考虑用泰勒公式来研究误差的传播
将 多 元 函 数 f ( x 1 ∗ , x 2 ∗ ) 在 ( x 1 , x 2 ) 处 进 行 泰 勒 展 开 f ( x 1 ∗ , x 2 ∗ ) = f ( x 1 , x 2 ) + ∂ f ∂ x 1 ( x 1 ∗ − x 1 ) + ∂ f ∂ x 2 ( x 2 ∗ − x 2 ) + R , R 是 余 项 余 项 是 更 高 阶 的 导 数 和 更 高 阶 的 误 差 , 我 们 不 妨 舍 去 它 们 e y = f ( x 1 ∗ , x 2 ∗ ) − f ( x 1 , x 2 ) ≈ ∂ f ∂ x 1 ( x 1 ∗ − x 1 ) + ∂ f ∂ x 2 ( x 2 ∗ − x 2 ) = ∂ f ∂ x 1 e x 1 + ∂ f ∂ x 2 e x 2 将多元函数f(x_1^*,x_2^*)在(x_1,x_2)处进行泰勒展开 \\ f(x_1^*,x_2^*)=f(x_1,x_2)+\frac{\partial f}{\partial x_1}(x_1^*-x_1)+ \frac{\partial f}{\partial x_2}(x_2^*-x_2)+R,R是余项 \\ 余项是更高阶的导数和更高阶的误差,我们不妨舍去它们\\ e_y = f(x_1^*,x_2^*)-f(x_1,x_2)\approx \frac{\partial f}{\partial x_1}(x_1^*-x_1)+ \frac{\partial f}{\partial x_2}(x_2^*-x_2)=\frac{\partial f}{\partial x_1}e_{x_1}+ \frac{\partial f}{\partial x_2}e_{x_2} f(x1,x2)(x1,x2)f(x1,x2)=f(x1,x2)+x1f(x1x1)+x2f(x2x2)+R,Rey=f(x1,x2)f(x1,x2)x1f(x1x1)+x2f(x2x2)=x1fex1+x2fex2
这就是误差的传播规律,有时也称这两个导数为误差的增长因子传播系数,它们描述了误差增大还是缩小的规律

数值计算的一些经验

通过对误差的讨论,总结出一系列关于数值计算的一些经验

  • 避免相近的数相减
  • 避免除以绝对值很小的数字
  • 合理安排数字的运算顺序,防止大数吃掉小数
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值