操作顺序,数值算法


10

我读过

(1)条件恶劣的操作应在条件良好的操作之前进行。

举例来说,由于减法不适用于乘法,而减法不适用于条件,因此应将计算为。x - y zxzyz(xy)z

但是,对这两种算法的一阶误差分析表明,它们的相差仅三倍(*),而且我不明白为什么有人可以将其概括为语句(1),也无法直观地理解操作顺序。您认为陈述(1)是被接受的规则,您对此有其他解释吗?

*:更具体地说,第一个版本的相对误差由

eps+3|x|+|y||x||y|eps
而第二版本的相对误差由

3eps+|x|+|y||x||y|eps

其中是机器精度。eps

该分析基于以下假设:第个中间结果乘以(由于舍入误差),其中是由界定的iid随机变量。“一阶”表示忽略诸如的高阶术语。1 + ε ε EPS ε ε Ĵ Xi(1+εi)εiepsϵiϵjx


你在哪里读的?
David Ketcheson

在我的演讲笔记中
Bananach 2015年

Answers:


8

让我们用(我懒于尝试获得除法运算符的带圆圈版本),分别是精确乘法(),加法()和减法()的浮点类似物。我们假设(IEEE-754)对于它们全部 其中是由于四舍五入而导致相对误差上限的机器epsilon。我们还将使用以下容易证明的引理(假设所有,并且不太大): × + - [ X Ý ] = X + Ý 1 + δ ,,×+ε 中号一个Ç ħ | δ | ε 一个Ç ħΠ= 11 + δ = 1 + θ

[xy]=(x+y)(1+δ),|δ|ϵmach,
ϵmach|δi|ϵmachm
i=1m(1+δi)=1+θ(m),|θ(m)|mϵmach1mϵmach

让我们定义对实数运算的真函数为X ÿ žfx,y,z

f(x,y,z)=(x×z)(y×z)

和在符合IEEE的浮点算法中的两个版本的函数实现,分别为和,它们对浮点表示形式进行操作,如下所示:˚F 2X =X1+δXÿžf1~f2~x~=x(1+δx),y~,z~

f1~(x~,y~,z~)=(x~z~)(y~z~),

f2~(x~,y~,z~)=(x~y~)z~.

错误分析:f1~

f1~=((x(1+δx)×z(1+δz))(1+δxz)(x~z~)(y(1+δy)×z(1+δz))(1+δyz)(y~z~))(1+δ)=xz(1+δx)(1+δz)(1+δxz)(1+δ)yz(1+δy)(1+δz)(1+δyz)(1+δ)=xz(1+θxz,1)yz(1+θyz,1).
在这里,。|θxz,1|,|θyz,1|4ϵmach14ϵmach

类似地,对于 在这里,。f2~

f2~=(((x(1+δx)y(1+δy)(1+δxy))×(z(1+δz)))(1+δ)=xz(1+δx)(1+δz)(1+δxy)(1+δ)yz(1+δy)(1+δz)(1+δxy)(1+δ)=xz(1+θx,2)yz(1+θy,2).
|θx,2|,|θy,2|4ϵmach14ϵmach

因此,对于和我们得到了相同类型的表达式,因此,从数值的角度来看,我不明白为什么一个实现比另一个实现更可取(除了与相比,仅执行2个浮点运算。f1~f2~f2~f1~

计算相对误差将表明,问题出在以下事实: 和可能非常接近(抵消)。xy

|f1~f||f|=|xz+xzθxz,1yzyzθyz,1(xzyz)||xzyz|=|xθxz,1yθyz,1||xy||x|+|y||xy|4ϵmach14ϵmach,
|f2~f||f|=|xz+xzθx,2yzyzθy,2(xzyz)||xzyz|=|xθx,2yθy,2||xy||x|+|y||xy|4ϵmach14ϵmach.

之间的细微差别可能会使两个数值实现之一略微变好或变差,具体取决于。但是,我怀疑这可能有任何意义。该结果完全有意义,因为无论如何,如果必须使用浮点算术计算和的值足够接近(对于您使用的精度如果使用,则没有定标可以显着帮助您:你已经遇到麻烦了。X ÿ ž X - Ý X ÿθx,y,z(xy)xy

注意:以上所有讨论均假设没有上溢或下溢,即,是所有正常浮点数的集合。˚F 0x,y,z,f(x,y,z)F0F0

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.