Documente Academic
Documente Profesional
Documente Cultură
0. Erori
rd ( x ) − x 5 ⋅ 10 −(t +1)
~
≤ ≤ 5 ⋅ 10 − t .
x a
~
Notăm eps = 5 ⋅10 −t . Dacă rd ( x ) = x(1 + ε ) , atunci, din inegalitatea de mai sus
rezultă ε ≤ eps . Numărul real eps se numeşte precizia calculatorului.
Pentru rotunjirea în sistemul binar se procedează analog. Se aduce x ∉ F la
forma normală x = a ⋅ 2b cu 2 −1 ≤ a < 1 şi a = 0.α1α 2 ...α iα i +1... cu α i = 0 sau 1
şi α1 = 1 .
⎧0.α1α 2 ...α t , dacă α t +1 = 0 ~
Se determină a' = ⎨ −t , iar rd (x ) = sgn ( x ) ⋅ a '⋅2 b . În
⎩0.α1α 2 ...α t + 2 , dacă α t +1 = 1
acest caz eps = 2 −t .
~ ~
În cazul în care rd (x ) ∈ F , atunci rd (x ) este chiar rd (x ) . Deoarece
numărul poziţiilor pentru exponentul e este finit, există , din păcate, numere
~
x ∉ F pentru care rd (x ) ∉ F .
Exemplul 3.
Fie a = 0.2337125810 − 4 , b = 0.33678429 10 2 , c = −0.3367781110 2 .
Într-un calculator cu t = 8 şi e = ∞ , operaţia + ∗ conduce la:
( )
a + ∗ b + ∗ c = 0.2337125810 − 4 + ∗ 0.61800000 10 − 3 =
= 0.0233712610 − 3 + ∗ 0.6180000010 − 3 = 0.6413712610 − 3
(a +∗ b)+ ∗ c = (0.2337125810 − 4 + ∗ 0.3367842910 2)−∗ 0.3367781110 2 =
= (0.0000002310 2 + ∗ 0.3367842910 2 ) − ∗ 0.3367781110 2 =
= 0.3367845210 2 − ∗ 0.3367781110 2 = 0.6410000010 − 3
Rezultatul exact al adunării este:
6 Bazele Analizei Numerice
( )
def
fl ( x + ( y + z )) = x + ∗ y + ∗ z
( )
def
fl ((x + y ) + z ) = x + ∗ y + ∗ z
pentru restul calculelor. Mulţimea operand finală va consta din rezultatele dorite
y1 , y 2 ,..., y m . În concluzie, o operaţie corespunde unei transformări a mulţimii
operand. Scriind mulţimile operand consecutive ca vectori coloană
⎛ x (i ) ⎞
⎜ 1 ⎟
⎜ (i ) ⎟
(i ) ⎜ x 2 ⎟
x = ∈ R ni , putem asocia fiecărei operaţii elementare o funcţie vectorială
⎜ M ⎟
⎜ (i ) ⎟
⎜ xn ⎟
⎝ i ⎠
( )
elementară astfel: ϕ (i ) : Di → R ni +1 , Di ⊂ R ni astfel încât ϕ (i ) x (i ) = x (i +1) cu
x (0 ) = x , unde x (i +1) este o reprezentare vectorială a mulţimii operand
transformate.
Fiind dat un algoritm, şirul său de operaţii elementare dă naştere unei
descompuneri a lui ϕ într-un şir de funcţii elementare ϕ (i ) : Di → Di +1 , i = 0, r ,
, ϕ = ϕ (r ) o ϕ (r −1) o ... o ϕ (0 ) , D0 = D , Dr +1 ⊆ R nr +1 = R m .
nj
Dj ⊆R
ϕ εϕ
x y
εx + ε y , dacă x + y ≠ 0
x+y x+ y x+ y
x y
x–y εx − ε y , dacă x − y ≠ 0
x− y x− y
x⋅ y εx +εy
x/ y εx −εy
1
x εx
2
Dacă operanzii care se adună au semne diferite, atunci cel puţin unul dintre
x y
numerele de condiţionare , este mai mare ca 1 şi erorile relative
x+ y x+ y
ε x , ε y sunt amplificate. Dacă x ≈ − y atunci se abandonează calculele (apare
cancelarea rezultatului).
Pentru descrierea propagării erorilor de rotunjire într-un algoritm dat ϕ ,
vom apela tot la formula ∆y = Dϕ ( x) ⋅ ∆x .
Presupunem că ϕ admite reprezentarea ϕ = ϕ ( r ) o ϕ ( r −1) o .... o ϕ ( 0) şi că
rezultatele calculelor pornind de la vectorul datelor de intrare, x = x (0) sunt date de
relaţiile:
x = x (0) , x (1) = ϕ (0) ( x (0) ) ,…, y = x ( r +1) = ϕ ( r ) ( x ( r ) ) , ϕ (i ) ∈ C 1 ( Di ) , i = 0, r .
Notăm ψ (i ) = ϕ ( r ) o .... o ϕ (i ) : Di → R m , i = 0, r şi ψ (0) = ϕ .
Erorile din datele de intrare şi erorile de rotunjire vor perturba rezultatele
intermediare exacte x(i), obţinându-se în aritmetica virgulei mobile aproximările
~
x (i ) date de relaţiile : ~
x (i +1) = fl (ϕ (i ) ( ~
x (i ) )) . Atunci erorile absolute se pot evalua
astfel:
∆x (i +1) = [ fl (ϕ ( i ) ( ~
x ( i ) )) − ϕ ( i ) ( ~
x ( i ) )] + [ϕ ( i ) ( ~
x ( i ) ) − ϕ ( i ) ( x ( i ) )] . (2)
Dar
ϕ (i ) ( ~x (i ) ) − ϕ (i ) ( x (i ) ) ≈ Dϕ (i ) ( x (i ) )∆x (i ) (3).
Cum ϕ (i ) este o funcţie elementară, evaluarea sa în virgulă mobilă va fi
fl (ϕ (i ) (u )) = rd (ϕ (i ) (u )) ,
care pe componente devine:
fl (ϕ (ji ) (u )) = rd (ϕ (ji ) (u )) = (1 + ε j )ϕ (ji ) (u ) cu ε j ≤ eps, j = 1, ni +1 .
Aici ε j este eroarea de rotunjire generată în timpul calculului în virgulă
mobilă a componentei a j-a, a lui ϕ (i ) .
Relaţiile de mai sus se scriu matriceal sub forma
fl (ϕ (i ) (u )) = ( I + E i +1 )ϕ (i ) (u ) ,
unde I este matricea unitate de ordinul ni+1 , iar Ei+1 este matricea diagonală a
erorilor:
⎛ ε 1 0 ... ... 0 ⎞
⎜ ⎟
⎜ 0 ε 2 0 ... 0 ⎟
E i +1 = ⎜ cu ε j ≤ eps .
... ... ... ... ... ⎟
⎜ ⎟
⎜ 0 0 ... ... ε n ⎟
⎝ i +1 ⎠
fl (ϕ (i ) ( ~
x ( i ) )) − ϕ ( i ) ( ~
x ( i ) ) = Ei +1 ⋅ ϕ ( i ) ( ~
x ( i ) ) ≈ Ei +1 ⋅ ϕ (i ) ( x ( i ) ) = Ei +1 x ( i +1) = α i +1 .
Vectorul coloană α i +1 poate fi interpretat ca eroarea absolută de rotunjire apărută
atunci când se evaluează în aritmetica virgulei mobile ϕ (i ) , iar elementele
diagonale ale matricei Ei+1 pot fi interpretate ca erori relative de rotunjire
corespunzătoare. Ţinând seamă de (2) şi (3) rezultă:
∆x (i +1) = α i +1 + Dϕ (i ) ( x (i ) ) ⋅ ∆x (i ) = E i +1 ⋅ x (i +1) + Dϕ (i ) ( x (i ) ) ⋅ ∆x (i )
i ≥ 0, ∆x (0) = ∆x .
Prin urmare:
∆x (1) = Dϕ (0) ( x) ⋅ ∆x + α 1
∆x ( 2) = Dϕ (1) ( x1 )[ Dϕ (0) ( x) ⋅ ∆x + α 1 ] + α 2
………………………………………….
∆y = ∆x ( r +1) = Dϕ ( r ) ...Dϕ (0) ∆x + Dϕ ( r ) ...Dϕ (1)α1 + ... + α r +1 .
Sau dacă ţinem seama de ceea ce am notat cu ψ avem:
∆y = Dϕ ( x)∆x + Dψ (1) ( x (1) ) ⋅ α 1 + ... + Dψ ( r ) ( x ( r ) ) ⋅ α r + α r +1 =
= Dϕ ( x)∆x + Dψ (1) ( x (1) ) ⋅ E1 x (1) + ... + Dψ ( r ) ( x ( r ) ) ⋅ E r x ( r ) + E r +1 y
Aceasta arată că matricea jacobiană Dψ (i ) este importantă pentru efectul
erorilor de rotunjire intermediare α i sau Ei asupra rezultatului final.
ψ (1) (u , v) = u − v 2 ,ψ ( 2) (u , v ) = u − v , Dϕ ( x) = ( 2a,−2b) ,
⎛ ε 1a 2 ⎞ ε 0⎞
Dψ (1) ( x (1) ) = (1, − 2b) , Dψ ( 2) ( x ( 2) ) = (1, − 1) , α1 = ⎜ ⎟, E1 = ⎛⎜ 1 ⎟⎟ ,
⎜ 0 ⎟ ⎜
⎝ ⎠ ⎝ 0 0⎠
⎛ a ⋅∗ a ⎞ ⎛ a 2 ⎞
deoarece fl (ϕ (0) ( x (0) )) − ϕ (0) ( x (0) ) = ⎜ ⎟ − ⎜ ⎟ (eroarea de rotunjire în
⎜ b ⎟ ⎜ b ⎟
⎝ ⎠ ⎝ ⎠
virgulă mobilă apare doar pe prima poziţie). Similar
⎛ 0 ⎞ ⎛0 0 ⎞
α 2 = ⎜⎜ 2 ⎟⎟, E 2 = ⎜⎜ ⎟⎟ , α 3 = ε 3 (a 2 − b 2 ) , ε i ≤ eps, i = 1,3.
ε b
⎝ 2 ⎠ ⎝ 0 ε 2⎠
⎛ ∆a ⎞
Dacă ∆x = ⎜⎜ ⎟⎟, ∆y = 2a∆a − 2b∆b + a 2 ε 1 − b 2 ε 2 + ( a 2 − b 2 )ε 3 .
⎝ ∆b ⎠
În cazul algoritmului 2, avem:
⎛a⎞ ⎛ a + b ⎞ ( 2)
x = x ( 0) = ⎜⎜ ⎟⎟ , x (1) = ⎜⎜ ⎟⎟ , x = y = a 2 − b 2 ; ψ (1) (u , v) = u ⋅ v ,
b
⎝ ⎠ ⎝ a − b ⎠
⎛ ε 1 ( a + b) ⎞
Dϕ ( x) = (2a,−2b) , Dψ (1) ( x (1) ) = ( a − b, a + b) ; α 1 = ⎜⎜ ⎟⎟ ,
⎝ ε 2 ( a − b) ⎠
⎛ε 0⎞
α 2 = ε 3 (a 2 − b 2 ) şi E1 = ⎜⎜ 1 ⎟⎟ ; ε i ≤ eps .
⎝ 0 ε2 ⎠
Atunci ∆y = 2a ∆a − 2b ∆b + ( a 2 − b 2 )(ε 1 + ε 2 + ε 3 ) .
Se poate da o margine a efectului erorilor de rotunjire astfel:
- în algoritmul 1:
a 2ε1 − b 2ε 2 + ( a 2 − b 2 )ε 3 ≤ ( a 2 + b 2 + a 2 − b 2 ) eps
- în algoritmul 2:
( a 2 − b 2 )(ε1 + ε 2 + ε 3 ) ≤ 3 a 2 − b 2 eps.
Când selectăm un anumit algoritm de calcul pentru un ϕ (x ) (cu alte
cuvinte, o anumită descompunere a lui ϕ în funcţii elementare), Dϕ rămâne
neschimbat; matricele jacobiene Dψ (i ) care măsoară propagarea rotunjirilor vor fi
totuşi diferite, efectul total al erorilor de rotunjire va fi:
Dψ (1)α 1 + ... + Dψ ( 2)α 2 + α r +1 .
Un algoritm este numeric mai bun decât alt algoritm pentru calculul lui
ϕ (x ) , dacă pentru o mulţime de date x, efectul total al erorilor de rotunjire este
mai mic în cazul primului algoritm.