Numerička obrada i simulacije (2. deo)
Autor: Stefan Nožinić
U prethodnom broju smo vas uveli u ovu oblast nauke. Govorili smo uopšteno kako se problemi obrade podataka rešavaju svođenjem na jednostavnije probleme i koji su nam alati dostupni za takve stvari. Kao što ste verovatno i mogli da primetite, ova disciplina zahteva dosta analitičkog razmišljanja i sposobnost rešavanja problema. U ovom broju ćemo se dotaći matematike i arhitekture računara kako bismo bolje razumeli probleme koji se javljaju prilikom numeričke obrade podataka.
Prilikom računanja mi uvodimo grešku. Ovo znači da izračunata vrednost retko kada bude jednaka tačnoj vrednosti. Za tačan rezultat uzimamo vrednost koja nema veliku grešku od tačne vrednosti. Jedan od najjednostavnijih primera ovoga je računanje korena broja 2. Znamo da je koren broja 2 iracionalan broj. Ovo znači da ga je nemoguće zapisati u decimalnom zapisu. On čak nema ni obrazac koji se ponavlja pa je tako nemoguće računati tačno bilo šta što koristi ovu vrednost u računanju. Umesto da pokušavamo da izračunamo tačnu vrednost korena iz 2, mi uvodimo približnu vrednost koja je najčešće 1,41. Potrebno je primetiti da smo vrednost zaokružili na dve decimale, ali ako nam treba veća tačnost, možemo uraditi aproksimaciju na više decimala.
Tipovi i uzroci numeričke greške
Kada se radi obrada numeričkih podataka, odnosno bilo kakvo izračunavanje na računaru, uvode se različiti tipovi grešaka, a neki od njih su:
- greška prilikom zaokruživanja,
- greška prilikom aproksimacije različitih funkcija,
- greška uvedena zbog konačnog broja iteracija.
Prvi uzrok greške se dešava zbog ograničene arhitekture računara i zbog konačnog broja memorijskih mesta koja su nam na raspolaganju. Pored toga, sama reprezentacija pojedinih brojeva je nemoguća pošto za predstavljanje decimalnih brojeva u računaru koristimo tri vrednosti: znak, mantisu i eksponent. Postoje brojevi koje je nemoguće dobiti bilo kojom kombinacijom ovih vrednosti pošto moramo uzeti u obzir i ograničen broj memorijskih lokacija.
Drugi tip greške uvodimo svesno primenom različitih metoda aproksimacije pojedinih jednačina i funkcija. Da bismo povećali tačnost, najčešće moramo tačnije da aproksimiramo funkciju, a to nekad zahteva i promenu metoda aproksimacije.
Treći tip greške je greška koja se uvodi zbog konačnog broja iteracija. Tačnost se ovde povećava povećanjem broja iteracija, ali to podrazumeva i duže vreme izračunavanja. Potrebno je da se ovaj kompromis u praksi često napravi — žrtvovati jednu stvar nauštrb druge.
Propagacija grešaka
Sistemi za simulaciju i numeričku obradu su često sačinjeni od više posebnih delova koji se spajaju. Tako izlaz jednog dela postaje ulaz drugog. Ovo je veoma važno uvesti u analizu greške jer se greška propagira kroz sistem. To može predstavljati problem ako je jedan deo veoma osetljiv na male promene na svom ulazu, pa tako mala greška jednog dela sistema može prouzrokovati nestabilnost celog sistema.
Zašto je važna analiza greške?
Često se u konstrukciji softvera vrše testovi kako bi se proverila ispravnost implementacije. Za ljude koji se bave obradom podataka i numerikom ovo znači da moraju biti obazriviji od svojih kolega koji rade u drugim disciplinama računarstva.
Ako softver ne radi dobro, često se postavlja pitanje da li je određenim greškama i „bubama” uzrok loša implementacija metoda, ili je loš sâm metod. Zbog ovoga je pre implementacije potrebno detaljno analizirati dobre i loše strane metoda koji se koristi i implementaciju raditi postepeno dodavanjem zasebnih delova i njihovim testiranjem na jednostavnim slučajevima kako bi se proverila ispravnost implementacije.