Sunteți pe pagina 1din 7

C1 – Aspecte introductive.

Propagarea erorilor în calculul


numeric.

1. Aspecte introductive
 Numele meu este ȚIPLEA Grigore
 Vom realiza cursul de MN, în contextul actual, fizic, la salile de curs si de laborator.
 MN, o disciplina ce îmbina cunostintele de MATEMATICA cu cele de
PROGRAMARE.
 Metodele numerice sunt orientate spre rezolvarea problemelor de matematica,
inclusiv acelea care nu admit o rezolvare analitica. Rezultatele care se obtin sunt
valori aproximative, însa aceasta aproximare poate sa fie impusa, prin precizarea
valorii erorii rezultatelor.
 Astfel de probleme apar deseori în activitatea inginerului, de aceea veti regasi
aceasta disciplina în programa tuturor universitatilor tehnice, din tara si din
strainatate.
 Aceste metode pe care noi le vom descrie în aspectele lor esentiale, sintetice, au la
baza teoreme si demonstratii ale acestora, bine puse la punct.
 Categoriile de probleme pe care le vom aborda sunt: Propagarea erorilor în calculul
expresiilor matematice, Derivarea si Integrarea numerica, Rezolvarea ecuatiilor
algebrice, Rezolvarea sistemelor de ecuatii liniare si neliniare, Interpolarea
numerica, Optimizari, Ecuatii diferentiale de ordinul 1.
 Din punct de vedere practic implementarea algoritmilor se va face în limbaj C++.
Important este astfel ajutorul care vi se ofera prin faptul ca veti putea sa va acoperiti
anumite goluri care exista la unii dintre voi, chiar si dupa cele 2 semestre de
programare din anul 1. Încurajare!!!
 De cele mai multe ori tendinta studentului care nu prea se descurca la Programare
este sa zica: „Nu îmi place / Nu am chef / hai sa treaca odata ora asta / Nu e pentru
mine”. Voi fi bucuros daca în urma laboratoarelor noastre va exista un plus de
încredere în voi însiva, chiar si în situatii de acest fel. Eu cred ca daca veti incepe sa
obtineti rezultate, pe bune, fara a face doar un copy-paste de la vreun coleg, sansele
sunt chiar foarte mari. Merita sa faceti acest efort acum, deoarece este posibil ca mai
tarziu sa va fie si mai greu.
 Programele sunt relativ simple, chiar scurte unele dintre ele, astfel încat veti putea
acorda atentie implementarii acestora.
 La fiecare curs, dupa expunerea unei parti teoretice, cea de-a doua parte a sa va avea
un aspect de seminar în care o anumita problema va fi trecuta prin metodele expuse,
explicitandu-se astfel pasii algoritmilor.

2. Aspecte organizatorice
 Adresa mea de email: grigore.tiplea@upb.ro
 https://itlectures.ro/ro_RO/metode-numerice/
 https://tc.itlectures.ro/
 Bibliografie: IOAN RUSU, Metode numerice în electronica (curs, editura Tehnica)
 Evaluarea finala a cursului se va face în saptamana 13 / 14. Veti primi nota
(transformată dintr-un punctaj maxim alocat de 40p)
 Orele de laborator: o prezentare fff scurta a teoriei (aceasta a fost deja prezentata la
curs si nu are sens sa ne tot repetam) si apoi implementarea algoritmilor pe
calculator. La finalul orelor, ultimele 15 min(când de obicei vom face si prezenta)
vor fi destinate discutiilor, în principiu cu privire la lucrarea ce a fost prezentată, dar
si la lucrari din urma.
 La primele 2 lucrari de laborator, pentru un algoritm vom oferi chiar programul ca
si model. Pentru celelalte metode vom da un pseudocod apropiat de C, în proportie
de 70%.
 Vom programa în limbajul C / C++. Vom folosi una din variantele de DevC++.
 Notare laborator:
60 = 40 (colocviu) + 10 (test) + 10 (tema)

 Tematica cursului va fi urmatoarea:


o Curs 1. Aspecte introductive si organizatorice. Propagarea erorilor în
calculul numeric. Valoarea unui polinom folosind un numar minim de
înmultiri.
o Curs 2. Rezolvarea numerica a ecuatiilor algebrice.
o Curs 3. Derivarea numerica. Interpolare numerica.
o Curs 4. Integrarea numerica. Rezolvarea numerica a ecuatiilor
diferentiale de ordinul 1.
o Curs 5. Rezolvarea sistemelor de ecuatii liniare (1). Rezolvarea
sistemelor de ecuatii neliniare(tema).
o Curs 6. Rezolvarea sistemelor de ecuatii liniare (2). Metode de optimizare
(regresii).
o Curs 7. Verificarea cunostintelor (verificare în scris – la curs).

3. Propagarea erorilor folosind grafurile de procedura.


În principal toate calculele numerice care sunt realizate de diferiti algoritmi depind de
corectitudinea / exactitatea cu care au fost reprezentate valorile operanzilor.
Daca operanzii sunt valori întregi, în principiu nu exista niciun fel de problema, doar
trebuie tinut cont de domeniul valorilor si a rezultatelor ce vor apare astfel încat sa se încadreze
în domeniul ce corespunde numarului de biti pe folositi.
Daca sunt folositi n biti, valoarea pozitiva întreaga maxima este 2n-1 (primul bit este 0,
ptr numerele pozitive), iar valoarea negativa -2n, valoare care este reprezentata în complement
fata de 2 (1 urmat de n-1 de 0, primul bit este 1 pentru numerele negative).
Forma normalizată a un număr real nenul x presupune următoarea reprezentare:
x = m × be
unde b = baza, m = mantisa, e = exponentul, cu 0,1b ≤ |m|b < 1b (ceea ce înseamnă că mantisa
este un număr subunitar cu prima cifră după virgulă diferită de zero).
Pentru a scrie numărul sub formă normalizată trebuie găsite deci mantisa şi exponentul.
Mantisa se obţine deplasând virgula în faţa primei cifre nenule ce apare în scrierea numărului
(în baza b). Exponentul se ia egal cu numărul de poziţii cu care s-a deplasat virgula precedat de
semnul + dacă deplasarea s-a făcut de la dreapta la stânga, şi de semnul - dacă deplasarea s-a
făcut de la stânga la dreapta. Astfel dacă x este reprezentat în baza b sub forma
xb = ±anan-1…a1a0,a-1a-2…a-m,… cu an ≠ 0, atunci forma normalizată este
xb = ±0,anan-1…a1a0a-1a-2…a-m …× bn+1
Dacă baza de numerație este 10 atunci reprezentarea normalizată se numește notație
științifică (în puteri ale lui 10). Afișarea unor astfel de valori dintr-un program C se poate face
cu ajutorul specificatorului de format %e (sau %E).
Una dintre cele mai răspândite reprezentări internă (în PC-uri) a numerelor reale este
reprezentarea în virgulă mobilă. Reprezentarea în virgulă mobilă presupune existenţa unei baze
b (întotdeauna presupusă pară) şi a unei precizii p (revenim la laborator cu exemplu clar).
Ca urmare nu toate numerele reale sunt reprezentabile exact.
Fie urmatoarele exemple:
a) x = 0.55 Vom urmari sa determinam reprezentarea sa în baza 2.
0.55 x 2 = 1.1 (se pastreaza 1 si 0.1 va continua înmultirile succesiv)
0.1 x 2 = 0.2
0.2 x 2 = 0.4
0.4 x 2 = 0.8
0.8 x 2 = 1.6
0.6 x 2 = 1.2
0.2 x 2 = 0.4
- se observa ca mai departe se vor repeta aceleasi cifre si algoritmul nu se va opri
deoarece nu vom obtine o parte zecimala 0.
0.55 = 0.10001100110011001100110011... la nesfarsit
b) y = 0.625 Vom urmari sa determinam reprezentarea sa în baza 2.
0.625 x 2 = 1.25
0.25 x 2 = 0.5
0.5 x 2 = 1.0 partea zecimala este acum 0 si algoritmul se opreste.
0.625 = 0.101 = 1 x 2-1+ 1 x 2-3 aceasta este o reprezentare exacta în memoria
calculatorului
Exemplu de reprezentare eronata a valorilor numerice în calculator, care s-a dovedit o
catastrofa:
!!! Eșecul unui sistem de rachete antirachetă Patriot în timpul războiului din Golf
din 1991 s-a datorat unei erori de conversie software. Ceasul sistemului măsura timpul în zecimi
de secundă, dar îl memora într-un registru de 24 de biti, provocându-se astfel erori de rotunjire.
Datele din câmp au arătat că sistemul poate eșua să urmărească și să intercepteze o rachetă după
20 de ore de funcționare și deci sistemul ar necesita rebootare (acumularea în timp a erorilor de
rotunjire).
După 100 de ore de funcționare, eșecul sistemului a cauzat moartea a 28 de soldati
americani aflati într-o cazarmă din Dhahran, Arabia Saudită, deoarece nu a reușit să
intercepteze o rachetă Scud irakiană. Deoarece numărul 0.1 are o dezvoltare infinită în binar
(este o fracție periodică), valoarea din registrul de 24 de biti este eronată
(0.00011001100110011001100)2 ≈ 0.95 × 10−7 . Eroarea de timp după o sută de ore a fost de
0.34 secunde. Viteza rachetei Scud este de 3750 mile/oră, rezultând o eroare în distantă de
aproximativ 573.59 m. (http://www.ima.umn.edu/~arnold/disasters/)
Numerele prea mari pentru a fi reprezentate corespund unei depăşiri superioare de
capacitate (overflow), iar numerele prea mici unei depăşiri inferioare de capacitate (underflow).
Pentru a fi reprezentat un număr real x este aproximat cu un număr în virgulă mobilă pe care
convenim să-l notăm fl(x). Aproximarea lui x prin fl(x) poartă numele de rotunjire, iar eroarea
introdusă de eroare de rotunjire(trunchiere, rotunjire la par).
Formatele de reprezentare a numerelor în virgulă mobilă (conform standardului IEEE
754) sunt:
 simplă precizie (single-precision) pe 32 de biți; 1 bit pentru semnul mantisei ; 8 biţi
pentru exponentul decalat (Emin = -126, Emax = 127); 23 biţi pentru mantisă (p = 24,
α0 = 1 se omite)
 dublă precizie (double-precision) pe 64 de biţi; 1 bit pentru semnul mantisei; 11 biţi
pentru exponentul decalat (Emin = -1022, Emax = 1023); 52 biţi pentru mantisă (p
= 53, α0 = 1 se omite)

Regula de rotunjire este rotunjirea la par. Deci pentru


 simplă precizie, εmach = 2-24 ≈ 10-7 (7 cifre zecimale semnificative).
 dublă precizie, εmach = 2-53 ≈ 10-16 (16 cifre zecimale semnificative).
Cum se propaga erorile de rotunjire??? (acestea am vazut ca apar atat în
reprezentarea numerelor reale cat si în reprezentarea rezultatelor obtinute prin efectuarea unor
operatii matematice)
Fie x – valoarea exacta a unei marimi, 𝑥̅ – valoarea aproximativa a aceleiasi marimi.
eroarea absoluta = ex ≜ |𝑥 − 𝑥̅ |
eroarea relativă = εx = ex / 𝒙̅ – eroarea relativa, prin raportare la valoarea cunoscuta,
aproximata
Ex: 100 m ± 0.5 cm vs 18 cm ± 0.2 cm
Cu toate că valoarea absolută a erorii în primul caz este mai mare, este evident că prima
măsurătoare a fost realizată mult mai exact decât a doua (estimati singuri conform definitiei
erorii relative eroarea relativa în cele doua situatii)
(𝒙+𝒚)−(𝒙
̅+𝒚
̅) 𝒆𝒙 + 𝒆𝒚 𝒆𝒙 ̅
𝒙 𝒆𝒚 ̅
𝒚 ̅
𝒙 ̅
𝒚
𝜺𝒙+𝒚 = ̅+𝒚
̅
= ̅+𝒚
̅
= ̅
∙ 𝒙̅+𝒚̅ + ̅
∙ 𝒙̅+𝒚̅ = 𝜺𝒙 ∙ 𝒙̅+𝒚̅ + 𝜺𝒚 ∙ 𝒙̅+𝒚̅ (1)
𝒙 𝒙 𝒙 𝒚
Rezulatul operatiei fiind un numar real admite o eroare de rotunjire (εr), a carei valoare
maxima este (în baza 10), 5·10-t, unde t este numarul de cifre semnificative prin care a fost
reprezentata valoarea reala. Pentru un numar real în baza 10, cifrele semnificative sunt cifrele
numarului subunitar, ce formeaza partea fractionara ( 0.1 <=| f |< 1 ).
Ex: a=3.1415, a = 0.31415 x 101 în acest caz t=5
Daca a va fi reprezentat prin 3.141, a = 0.3141·101 si atunci t=4. Verificam afirmatia de
mai sus:
|0.31415 − 0.3141|
𝜀𝑎 = = 1.5 ∗ 10−4 < 5 ∗ 10−4
0.3141
Acest rezultat (1) de mai sus poate fi foarte usor modelat folosind un graf binar, astfel:

Rezultatul se formeaza astfel: se înmulteste valoarea din nod cu marca si se însumeaza


cu valoarea celui de al doilea nod înmultita deasemenea cu marca, iar în final se adauga eroare
de rotunjire ce corespunde rezultatului. Se obtine astfel expresia (1) plus εr.
 x+ y  x y
x   y  r
xy xy
Similar cu exemplul de mai sus pentru operatia de adunare, se obtin grafurile
corespunzatoare operatiilor de scadere, înmultire, împartire si extragere a radacinii patrate.
Regula de generarea a rezultatului este întotdeauna aceiasi, si pentru expresii mai complexe.
x y
 x-y  x   y r (2)
xy xy

 xy   x   y   r
(3)
 x/ y   x   y  r
(4)

  (1 / 2) x   r
x (5)

Folosind aceste grafuri se poate foarte usor determina expresia erorii relative(spuneam
ca aceste erori ne intereseaza) pentru expresii aritmetice complexe, si în felul acesta putem
realiza comparatii între aceste erori.
De exemplu, daca x este un numar real, din punct de vedere al erorilor ce se genereaza
atunci cand sunt calculate expresiile (x+2)2 si x2 + 2x + 4 se obtin rezultate diferite.

4. Calculul valorii unui polinom folosind un numar minim de operatii de


înmultire.
Pentru un polinom se cunosc gradul, coeficientii si punctul de calcul. Se cere sa se faca
un numar minim de operatii de înmultire pentru a calcula valoarea sa.

𝑃𝑛 (𝑥) = 𝑎𝑛 ∙ 𝑥 𝑛 + 𝑎𝑛−1 ∙ 𝑥 𝑛−1 + ⋯ + 𝑎1 ∙ 𝑥1 + 𝑎0 (6)

Daca se fac operatiile în mod obisnuit vom folosi n(n+1)/2 înmultiri.


Formula eficienta care permite calculul valorii polinomului este:
𝑃𝑛 (𝑥) = (… ((𝑎𝑛 ∙ 𝑥 + 𝑎𝑛−1 )𝑥 + 𝑎𝑛−2 )𝑥 + ⋯ + 𝑎1 )𝑥 + 𝑎0 (7)

Acum este evident ca numarul operatiilor de înmultire este n.

Seminar:
1. Sa se determine eroarea relativa de rotunjire pentru expresia x2 + 2x + 4.
Construim graful de procedura si apoi vom parcurge de la stanga la dreapta acest graf
pentru a obtine rezultatul cerut.
𝑥2 2𝑥
𝜀𝑢 = ( (𝜀𝑥 ∗ 1 + 𝜀𝑥 ∗ 1 + 𝜀𝑟1 ) 2 + (𝜀𝑥 ∗ 1 + 0 ∗ 1 + 𝜀𝑟2 ) 2
𝑥 + 2𝑥 𝑥 + 2𝑥
𝑥 2 + 2𝑥 4 5𝑥 2 + 8𝑥 + 4
+ 𝜀𝑟3 ) 2 +0 ∗ 2 + 𝜀𝑟4 = 2 𝜀
𝑥 + 2𝑥 + 4 𝑥 + 2𝑥 + 4 𝑥 + 2𝑥 + 4 𝑟

Atunci cand evaluam rezultatul expresiei de mai sus pentru valori ale lui x foarte
mari (𝑥 → ∞) si pentru valori foarte mici (𝑥 → 0) obtinem: 𝜀𝑢 = 5𝜀𝑟 respectiv 𝜀𝑢 = 𝜀𝑟 .
Va ramane d-voastra ca si exercitiu sa faceti acelasi lucru pentru expresia v=(x+2)2 si sa
comparati rezultatele. Acestea nu vor fi identice. Spor!

2. Pentru polinomul: P(x) = 4.7x4 + 2.3x2 + 9x - 2, sa se scrie formula optima de calcul


a valorii sale folosind un numar minim de înmultiri. Sa se determine numarul
înmultirilor si pentru P’(x).

P(x) = (((4.7x + 2.3)x + 0)x + 9)x – 2.


P’(x) = 4*4.7*x3 + 2.3*2*x + 9 Algoritmul va face 7 înmultiri.

Cu aceasta am încheiat acest prim curs.

S-ar putea să vă placă și