数值分析 笔记 1
误差分析
通常来说,误差的来源包括:
- 计算前的误差:
- 模型误差:例如物理中常见的“忽略空气阻力”
- 数据误差:已知常数、测量值、前序结果的误差等
- 计算中的误差
- 截断误差:计算方法本身的近似带来的误差,例如有限阶的泰勒展开计算非多项式函数
- 舍入误差:计算时对数据进行舍入,默认为四舍五入
误差及其分类
我们通常使用x表示真实值,使用x^表示近似值,那么绝对误差和相对误差分别定义为
e(x)er(x)=x^−x=xx^−x
因此当真实值为0的时候,讨论相对误差没有意义
在很多情况下(例如测量、舍入计算时)我们无法获取真实值,因此无法计算真实误差,这种情况下会估计误差上限,绝对误差限和相对误差限分别定义为:
ε(x)εr(x)=max(e(x))=max(er(x))
在误差很小的情况下,相对误差可以近似为
er(x)≈x^e(x)
关于有效数字的定理
将x保留p位有效数字得到近似值x^,其中第一位有效数字为d0,则相对误差满足:
∣er(x)∣≤d05×10−p
如果x与x^的相对误差满足
∣er(x)∣≤d0+15×10−p
则:x^的前p位有效数字与x的相同,或保留p位有效数字之后二者相等
这可以认为是x^对x的估计有p位是正确的
由于d0≤9,因此如果相对误差小于21×10−p,则保留p位有效值后估计是正确的
数据传递误差与计算误差
在计算函数f(x)的过程中,误差的来源是两部分:
f^(x^)−f(x)=(f^(x^)−f(x^))+(f(x^)−f(x))
前者是单纯的计算误差,f无法精确计算导致,而后者是数据传递误差,即自变量的误差影响到因变量
考虑使用差商近似微分:
f′(x)≈hf(x+h)−f(x)
由带拉格朗日余项的泰勒公式:
f(x+h)=f(x)+f′(x)h+2f′′(ξ)h2ξ∈(x,x+h)
因此使用差商会带来截断误差,设f′′(x)的上界为M,则截断误差误差限为:
εT=2Mh
而舍入误差限为:
εR=h2ε
其中ε是每一次计算f带来的舍入误差限
因此总误差限为
εtot=2Mh+h2ε
容易得到,当h=2ε/M的时候,总误差限最小
问题的敏感性
我们使用条件数来反应问题的敏感性:
cond=∣∣输入的相对误差∣∣∣∣解的相对误差∣∣
以函数求值问题为例,我们有:
cond=(x^−x)/x[f(x^)−f(x)]/f(x)≈f(x)xf′(x)
类似的,我们可以使用绝对误差定义绝对条件数
对于简单多元运算y=f(x1,…,xn),近似值为y^=f(x^1,…,x^n)我们可以使用Taylor来近似估计相对误差限
y−y^≈i=1∑n∂xi∂f(x^1,…,x^n)(xi−x^i)
因此
ε(y^)=i=1∑n∂xi∂f(x^1,…,x^n)ε(x^i)
算法稳定性
对于一个算法,其稳定性可以定义为:
- 对计算过程中的扰动(四舍五入、保存数据精度等)不敏感的算法更稳定
- 对包含一系列计算步的过程, 若中间步结果的(相对)误差不放大或放大不严重, 则该过程对应的算法更稳定
例如在计算黄金分割率ϕ的幂次时,如果采用下列递推式:
ϕn+1ϕ0=ϕn−1−ϕn(n≥2)=1,ϕ1=ϕ^
其绝对误差也满足:
en+1e0=en−1−en(n≥2)=0,e1=ϕ−ϕ^
可以计算得知,∣en∣=cn∣e1∣,其中cn为Fibonacci序列,显然当n较大时,绝对误差的放大非常严重,相对误差亦然
向后误差
向后误差是一种分析舍入误差的方法,在函数求值的过程中,f的计算会有误差f(x)→f^(x),这种舍入误差可能是隐含在每一步的计算过程中的,分析过程较为复杂,因此考虑将其转化为输入扰动带来的误差,即:
找到x^,使得f(x^)=y^,则Δx=x^−x称为向后误差
计算机浮点数
我们定义机器精度为εmach=2−p
则有如下定理:
实数x与其浮点数表示fl(x)的误差满足:
xfl(x)−x≤εmach
两个实数x1,x2,若∣x2/x1∣≤21εmach,则x2的数值对浮点运算x1+x2无影响
抵消现象
指在计算过程中有效位数下降的过程,例如x=1.02305×103,y=1.92137×103,则精确计算得到x−y=1.68,有效位数降至3位,可能导致相对误差的放大与准确度的下降
例如在一元二次方程求根公式中,其中一个根为:
x1=2a−b+b2−4ac
如果∣4ac∣<<b2,那b与b2−4ac的值非常接近,可能会出现抵消现象,解决方法为修改求根公式:
x1=−b−b2−4ac2c
总结