metode de calcul numeric matriceal. algoritmi fundamentali
metode de calcul numeric matriceal. algoritmi fundamentali
metode de calcul numeric matriceal. algoritmi fundamentali
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
8 CAPITOLUL 0. CONCEPTE FUNDAMENTALE<br />
un<strong>de</strong> op poate fi +, · sau /, iar µ este un număr <strong>de</strong> ordinul unităţii.<br />
Mo<strong>de</strong>lul (0.7) este obţinut presupunând că xop y este <strong>calcul</strong>at exact, apoi rezultatul<br />
este transformat în FVM printr-o funcţie <strong>de</strong> rotunjire. În realitate, lucrurile nu<br />
stau chiar aşa; unităţile specializate pentru <strong>calcul</strong>ul în VM nu obţin rezultatul exact,<br />
dar se comportă ca şi cum l-ar obţine, lucrând pe baza unor <strong>algoritmi</strong> nebanali, a<br />
căror cunoaştere nu este necesară pentru înţelegerea <strong>algoritmi</strong>lor din această lucrare<br />
şi a căror prezentare <strong>de</strong>păşeşte cadrul problematicii propuse.<br />
În completarea relaţiei (0.7), trebuie să menţionăm că, atunci când o operaţie<br />
în virgulă mobilă produce un număr cu un modul prea mare (> M), apare eroarea<br />
numită <strong>de</strong> <strong>de</strong>păşire superioară (overflow). Când rezultatul este prea mic în valoare<br />
absolută (< m, dar nenulă), eroarea se numeşte <strong>de</strong> <strong>de</strong>păşire inferioară (un<strong>de</strong>rflow).<br />
Desigur, orice algoritm bine conceput trebuie să specifice cum se proce<strong>de</strong>ază în<br />
eventualitatea unor <strong>de</strong>păşiri şi, mai ales, să încerce evitarea lor (vom explica în<br />
capitolul următor tehnica folosită — scalarea). Depăşirea inferioară nu constituie<br />
<strong>de</strong> regulă o eroare gravă, <strong>de</strong> aceea majoritatea <strong>calcul</strong>atoarelor atribuie automat<br />
rezultatului valoarea zero. În cazul unei <strong>de</strong>păşiri superioare, <strong>de</strong> obicei <strong>calcul</strong>ele sunt<br />
oprite sau, cel puţin, este afişat un mesaj <strong>de</strong> avertisment. În standardul IEEE pentru<br />
virgulă mobilă, există o valoare specială, numită Inf (infinit), care este atribuită<br />
rezultatului în cazul unei <strong>de</strong>păşiri superioare; <strong>calcul</strong>ele continuă cu această valoare;<br />
rezultatele se obţin conform regulilor uzuale <strong>de</strong> lucru cu infinităţi. O altă valoare<br />
specială – NaN (Not a Number) – este atribuită rezultatelor ne<strong>de</strong>finite, ca 0 · ∞,<br />
0/0, ∞/∞; o operaţie implicând NaN are întot<strong>de</strong>auna ca rezultat NaN.<br />
Relaţia (0.7) garantează că o operaţie aritmetică introduce erori relative mici,<br />
<strong>de</strong> ordinul β −t (adică al lui epsilon maşină). O problemă fundamentală a <strong>calcul</strong>ului<br />
<strong>numeric</strong> este evaluarea mărimii erorii ce afectează rezultatul în cazul unei secvenţe<br />
<strong>de</strong> operaţii.<br />
Pentru a aborda problema, să consi<strong>de</strong>răm două exemple în care apar erori <strong>numeric</strong>e<br />
mari, dar din cauze esenţial diferite. Lucrăm în FVM cu (β, t, p) = (10, 3, 1).<br />
Pentru a evita confuziile, vom nota cu ⊕, ⊖, ⊗ şi ⊘ adunarea, scă<strong>de</strong>rea, înmulţirea,<br />
respectiv împărţirea în VM; <strong>de</strong>ci x + y este suma exactă, iar x ⊕ y = fl(x + y) este<br />
suma <strong>calcul</strong>ată în VM.<br />
Exemplul 0.6 În <strong>calcul</strong>ul rădăcinilor polinomului <strong>de</strong> gradul al doilea ax2 + bx + c,<br />
cu a ≠ 0, este necesar <strong>calcul</strong>ul expresiei b 2 − 4ac. Consi<strong>de</strong>rând b = 3.34, a = 1.22,<br />
c = 2.28, avem b 2 −4ac = 0.0292, în timp ce, rotunjind prin tăiere, b ⊗b = 4 ⊗a⊗c<br />
= 11.1, <strong>de</strong>ci b ⊗ b − 4 ⊗ a ⊗ c = 0. Rezultatul <strong>calcul</strong>at are toate cifrele semnificative<br />
eronate, iar eroarea relativă aferentă este egală cu 1; totuşi, pentru fiecare operaţie<br />
în parte, eroarea relativă este mai mică <strong>de</strong>cât 10 −2 .<br />
♦<br />
Exemplul 0.7 Dacă polinomul <strong>de</strong> gradul II are rădăcini reale, acestea se <strong>calcul</strong>ează<br />
<strong>de</strong> obicei utilizând formulele<br />
x 1 = −b − √ b 2 − 4ac<br />
2a<br />
, x 2 = −b + √ b 2 − 4ac<br />
. (0.8)<br />
2a<br />
Luând b = 10.1, a = 0.0123, c = 32.4, valoarea exactă rotunjită la 3 cifre<br />
semnificative a lui x 2 este −3.22. Efectuând <strong>calcul</strong>ele în formatul ales, obţinem<br />
∆ = b ⊗ b ⊖ 4 ⊗ a ⊗ c = 100 (în loc <strong>de</strong> 100.41, dar eroarea relativă e încă <strong>de</strong> ordinul