Ordine delle operazioni, algoritmi numerici


10

L'ho letto

(1) Le operazioni mal condizionate devono essere eseguite prima di quelle ben condizionate.

Ad esempio, si dovrebbe calcolare come ( x - y ) z poiché la sottrazione è mal condizionata mentre la moltiplicazione no.xz−yz(x−y)z

Tuttavia, un'analisi degli errori del primo ordine di entrambi gli algoritmi rivela che differiscono solo per un fattore tre (*), e non vedo perché si possa generalizzare questo all'istruzione (1), né intuire intuitivamente il significato di ordine delle operazioni. Pensi che l'affermazione sia (1) sia una regola accettata e hai altre spiegazioni per questo?

*: più specificamente, la prima versione ha un errore relativo limitato da

mentre l'errore relativo della seconda versione è limitato da

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

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

dove è la precisione della macchina.eps

Questa analisi si basa sul presupposto che l' -esimo risultato intermedio sia moltiplicato per ( 1 + ε i ) (a causa di errori di arrotondamento), dove ε i sono variabili casuali delimitate da eps . "Primo ordine" significa che i termini di ordine superiore, come ϵ i ϵ j x , vengono trascurati.i(1+εi)εiepsϵiϵjx


Dove l'hai letto?
— David Ketcheson,

nei miei appunti di lezione
— Bananach,

Risposte:


8

Indichiamo con (ero pigro cercando di ottenere la versione cerchiata dell'operatore di divisione) gli analoghi a virgola mobile di moltiplicazione esatta ( × ), addizione ( + ) e sottrazione (⊗,⊕,⊖×+ ), rispettivamente. Supponiamo (IEEE-754) che per tutti [ x ⊕ y ] = ( x + y ) ( 1 + δ ⊕ ) ,− dove ϵ m a

[x⊕y]=(x+y)(1+δ⊕),|δ⊕|≤ϵmach,
è la macchina epsilon che fornisce un limite superiore all'errore relativo dovuto all'arrotondamento. Useremo anche il seguente lemma (assumendo tutto | δ i | ≤ ϵ m a c h , emnon è troppo grande) che può essere facilmente dimostrato: ϵmach|δi|≤ϵmachm
∏i=1m(1+δi)=1+θ(m),|θ(m)|≤mϵmach1−mϵmach

fx,y,z

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

e due versioni dell'implementazione della funzione in aritmetica in virgola mobile conforme IEEE come ef1~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ϵmach1−4ϵ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ϵmach1−4ϵmach

f1~f2~f2~f1~

xy

|f1~−f||f|=|xz+xzθxz,1−yz−yzθyz,1−(xz−yz)||xz−yz|=|xθxz,1−yθyz,1||x−y|≤|x|+|y||x−y|4ϵmach1−4ϵmach,
|f2~−f||f|=|xz+xzθx,2−yz−yzθy,2−(xz−yz)||xz−yz|=|xθx,2−yθy,2||x−y|≤|x|+|y||x−y|4ϵmach1−4ϵmach.

Lievi differenze tra θx,y,z(x−y)xy

NB: tutte le discussioni precedenti non presuppongono overflow o underflow, ovvero x,y,z,f(x,y,z)∈F0F0

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.