26.12.2014 Views

metode de calcul numeric matriceal. algoritmi fundamentali

metode de calcul numeric matriceal. algoritmi fundamentali

metode de calcul numeric matriceal. algoritmi fundamentali

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!