欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

数值计算复习笔记之(一)误差定义

程序员文章站 2022-07-09 13:30:58
误差准确值与近似值的差距就是误差。误差通常来自于截断误差:由简化问题引起的误差,如求收敛级数之和的近似值cos(x)=1−x22!+x44!−x66!+⋯+(−1)nx2n(2n)!+⋯≈1−x22!cos(x)=1-\frac{x^2}{2!}+\frac{x^4}{4!}-\frac{x^6}{6!}+\cdots+\frac{(-1)^nx^{2n}}{(2n)!}+\cdots\approx1-\frac{x^2}{2!}cos(x)=1−2!x2​+4!x4​−6!x6​+⋯+(2n)!...

误差

准确值与近似值的差距就是误差。

误差通常来自于

  1. 截断误差:由简化问题引起的误差,如求收敛级数之和的近似值 c o s ( x ) = 1 − x 2 2 ! + x 4 4 ! − x 6 6 ! + ⋯ + ( − 1 ) n x 2 n ( 2 n ) ! + ⋯ ≈ 1 − x 2 2 ! cos(x)=1-\frac{x^2}{2!}+\frac{x^4}{4!}-\frac{x^6}{6!}+\cdots+\frac{(-1)^nx^{2n}}{(2n)!}+\cdots\approx1-\frac{x^2}{2!} cos(x)=12!x2+4!x46!x6++(2n)!(1)nx2n+12!x2
  2. 舍入误差:由采取舍入操作引起的误差,通常因为计算机等精度限制。
  3. 模型误差及观测误差:由数学模型、观测引起的误差。
    基本上只研究舍入误差和截断误差。

绝对误差与相对误差

设近似值 x ∗ x^* x近似于准确值 x x x,那么 x ∗ x^* x绝对误差(即误差)表示为:
e ( x ∗ ) = x − x ∗ e(x^*)=x-x^* e(x)=xx
由于难以求出准确值,只能估算出误差绝对值的某个上界 ϵ \epsilon ϵ,这些上界称为绝对误差限(即误差限):
∣ e ( x ∗ ) ∣ ≤ ϵ |e(x^*)|\le\epsilon e(x)ϵ

  • 注意误差有正负之分,而误差限总是正值
  • 误差限不唯一

近似值 x ∗ x^* x的误差与准确值 x x x之比称为相对误差 e r ( x ∗ ) e_r(x^*) er(x),由于难以求出准确值,一般取相对误差为:
e r ( x ∗ ) = e ( x ∗ ) x ∗ e_r(x^*)=\frac{e(x^*)}{x^*} er(x)=xe(x)
相似的,估算相对误差的某个上界 ϵ r \epsilon_r ϵr,这些上界称为相对误差限
∣ e r ( x ∗ ) ∣ ≤ ϵ r |e_r(x^*)|\le\epsilon_r er(x)ϵr

有效数字

如果近似值 x ∗ x^* x的误差限是 0.5 × 1 0 − n 0.5×10^{-n} 0.5×10n则称 x ∗ x^* x准确到小数点后的第 n n n位,从第一个非零数字到这一位的所有数字均称为有效数字。

x = 0.003400 ± 0.5 × 1 0 − 5 x=0.003400\pm 0.5×10^{-5} x=0.003400±0.5×105 表示近似值 x ∗ = 0.003400 x^*=0.003400 x=0.003400 精确到小数点后第5位,有3位有效数字。

有效数字与相对误差限关系

x ∗ x^* x n n n位有效数字, a 1 a_1 a1为首位有效数字,则 x ∗ x^* x的相对误差限为:
1 2 a 1 × 1 0 − n + 1 \frac{1}{2a_1}×10^{-n+1} 2a11×10n+1
反之,若 x ∗ x^* x的相对误差限 ϵ r \epsilon_r ϵr满足:
ϵ r ≤ 1 2 a 1 × 1 0 − n + 1 \epsilon_r\le\frac{1}{2a_1}×10^{-n+1} ϵr2a11×10n+1
x ∗ x^* x至少有 n n n位有效数字。

误差基本运算

y = f ( x 1 , x 2 , ⋯   , x n ) y=f(x_1,x_2,\cdots,x_n) y=f(x1,x2,,xn) ,近似解记为 y ∗ = f ( x 1 ∗ , x 2 ∗ , ⋯   , x n ∗ ) y^*=f(x_1^*,x_2^*,\cdots,x_n^*) y=f(x1,x2,,xn)假定 f f f在点 ( x 1 ∗ , x 2 ∗ , ⋯   , x n ∗ ) (x_1^*,x_2^*,\cdots,x_n^*) (x1,x2,,xn)可微解的误差为:
e ( y ∗ ) = y − y ∗ ≈ d y ∗ = ∑ i = 1 n ∂ y ∗ ∂ x i ⋅ e ( x i ∗ ) \begin{aligned} e(y^*)=y-y^* &\approx dy^* \\ &= \sum_{i=1}^{n} \frac{\partial y^*}{\partial x_i}·e(x_i^*) \end{aligned} e(y)=yydy=i=1nxiye(xi)

Δ y = A Δ x + o ( Δ x ) \Delta y = A\Delta x + o(\Delta x) Δy=AΔx+o(Δx) ,这里的 A A A就是偏导 ∂ y ∗ ∂ x \frac{\partial y^*}{\partial x} xy Δ x \Delta x Δx就是 e ( x ∗ ) e(x^*) e(x) d y dy dy A Δ x A\Delta x AΔx
微分学中,当自变量改变量 Δ x \Delta x Δx(这里可以看做是误差)很小时,函数的微分 d y = A Δ x dy=A\Delta x dy=AΔx 作为函数该变量的主要线性部分可以近似函数的改变量 Δ y \Delta y Δy,故利用微分运算公式可导出误差运算公式。

导出误差基本运算公式:
{ e ( x 1 ± x 2 ) = e ( x 1 ) ± e ( x 2 ) e ( x 1 x 2 ) ≈ x 2 e ( x 1 ) + x 1 e ( x 2 ) e ( x 1 x 2 ) ≈ 1 x 2 e ( x 1 ) − x 1 x 2 2 e ( x 2 ) \left\{ \begin{aligned} e(x_1 \pm x_2)&=e(x_1) \pm e(x_2) \\ e(x_1x_2)&\approx x_2e(x_1)+x_1e(x_2)\\ e(\frac{x_1}{x_2})&\approx \frac{1}{x_2}e(x_1)-\frac{x_1}{x_2^2} e(x_2)\\ \end{aligned} \right. e(x1±x2)e(x1x2)e(x2x1)=e(x1)±e(x2)x2e(x1)+x1e(x2)x21e(x1)x22x1e(x2)

解的相对误差为:
e ( y ∗ ) = e ( y ∗ ) y ∗ ≈ d y ∗ y ∗ = ∑ i = 1 n ∂ y ∗ ∂ x i ⋅ e ( x i ∗ ) y ∗ \begin{aligned} e(y^*)=\frac{e(y^*)}{y^*} &\approx \frac{dy^*}{y^*} \\ &= \sum_{i=1}^{n} \frac{\partial y^*}{\partial x_i}·\frac{ e(x_i^*) }{y^*} \end{aligned} e(y)=ye(y)ydy=i=1nxiyye(xi)

导出相对误差基本运算公式:
{ e r ( x 1 ± x 2 ) = e ( x 1 ) ± e ( x 2 ) x 1 ± x 2 e r ( x 1 x 2 ) ≈ e ( x 1 ) x 1 + e ( x 2 ) x 2 = e r ( x 1 ) + e r ( x 2 ) e ( x 1 x 2 ) ≈ e ( x 1 ) x 1 − e ( x 2 ) x 2 = e r ( x 1 ) − e r ( x 2 ) \left\{ \begin{aligned} e_r(x_1 \pm x_2)&= \frac{ e(x_1) \pm e(x_2) }{x_1 \pm x_2}\\ e_r(x_1x_2)&\approx \frac{ e(x_1)}{x_1}+\frac{ e(x_2)}{x_2}=e_r(x_1)+e_r(x_2)\\ e(\frac{x_1}{x_2})&\approx \frac{e(x_1)}{x_1}-\frac{e(x_2)}{x_2}=e_r(x_1)-e_r(x_2)\\ \end{aligned} \right. er(x1±x2)er(x1x2)e(x2x1)=x1±x2e(x1)±e(x2)x1e(x1)+x2e(x2)=er(x1)+er(x2)x1e(x1)x2e(x2)=er(x1)er(x2)

注意分辨公式里的误差 e e e 和相对误差 e r e_r er
相对误差公式即在上述误差公式的基础上除以 y ∗ y^* y ,再把 e e e 转化为 e r e_r er

例1:假设运算中数据都精确到两位小数,试求 x ∗ = a ⋅ b − c x^*=a·b-c x=abc的误差限和相对误差限。
e ( x ∗ ) = a ∗ ⋅ e ( b ∗ ) + b ∗ ⋅ e ( a ∗ ) − e ( c ∗ ) e(x^*)=a^*·e(b^*)+b^*·e(a^*)-e(c^*) e(x)=ae(b)+be(a)e(c)
由于数据精确到两位小数,故 e ( a ∗ ) , e ( b ∗ ) , e ( c ∗ ) ≤ 0.5 × 1 0 − 2 e(a^*),e(b^*),e(c^*) \le 0.5×10^{-2} e(a),e(b),e(c)0.5×102 ,则有:
e ( x ∗ ) ≤ ( 0.5 × 1 0 − 2 ) a ∗ + ( 0.5 × 1 0 − 2 ) b ∗ − ( 0.5 × 1 0 − 2 ) = ( a ∗ + b ∗ − 1 ) ⋅ ( 0.5 × 1 0 − 2 ) \begin{aligned} e(x^*) & \le (0.5×10^{-2})a^*+(0.5×10^{-2})b^*-(0.5×10^{-2}) \\ &=(a^*+b^*-1)·(0.5×10^{-2}) \end{aligned} e(x)(0.5×102)a+(0.5×102)b(0.5×102)=(a+b1)(0.5×102)

数值计算应注意的问题

  1. 避免两个相近的数相减
    e r ( x ∗ − y ∗ ) = e ( x ∗ − y ∗ ) x ∗ − y ∗ e_r(x^*-y^*)=\frac{e(x^*-y^*)}{x^*-y^*} er(xy)=xye(xy)
    相近的 x x x y y y会导致相对误差增大,相对误差限增大,从而使得结果的有效数字减少。
  2. 避免大数吃小数
    由于计算机小数位数精度限制,大数减去小数经常会未变化,此时结果不准确。
  3. 避免除数的绝对值远小于被除数的绝对值
    e ( x y ) ≈ 1 y e ( x ) − x y 2 e ( y ) e(\frac{x}{y})\approx \frac{1}{y}e(x)-\frac{x}{y^2} e(y) e(yx)y1e(x)y2xe(y)
    y ≪ x y\ll x yx时,后项导致舍入误差增大
  4. 要简化计算,减少计算次数
    计算量大小会影响误差的累积。

例2(算法稳定性问题):考虑递推式算法 I n = 1 n − 5 I n − 1 I_n=\frac{1}{n}-5I_{n-1} In=n15In1 ,假设 I 0 I_0 I0 有误差 e 0 e_0 e0 ,计算中没有舍入误差情况下,求 e n e_n en
e n = I n − I n ∗ = − 5 I n − 1 + 5 I n − 1 ∗ = − 5 ( I n − 1 − I n − 1 ∗ ) = − 5 e n − 1 = ( − 5 ) n e 0 \begin{aligned} e_n = I_n - I_n^* &= -5I_{n-1}+5I_{n-1}^* \\&= -5(I_{n-1}-I_{n-1}^*)\\&=-5e_{n-1}\\&= (-5)^ne_0 \end{aligned} en=InIn=5In1+5In1=5(In1In1)=5en1=(5)ne0
每计算一次,误差便会扩大到5倍。由于计算过程中舍入误差增长,该算法不具有数值稳定性。相反,舍入误差不增长的算法具有数值稳定性

本文地址:https://blog.csdn.net/weixin_39955411/article/details/109011134

相关标签: 笔记