Uvod

Uvod#

Numerička matematika je prvi kolegij iz područja primijenjene matematike i njegov cilj je opisati osnovne probleme koji se pojavljuju u primijenjenoj matematici i tipične pristupe njihovom rješavanju.

Primijenjena matematika

Svrha primijenjene matematike je rješavati probleme iz „stvarnog svijeta”: matematičke metode koriste se u drugim područjima poput fizike, kemije, medicine, inženjerstva. Za razliku od idealiziranih matematičkih problema s kakvima ste se susretali u dosadašnjem obrazovanju, problemi iz „stvarnog svijeta” imaju neke sasvim nove aspekte.

  • Većina problema je opisana jednadžbama (bilo „običnim” bilo diferencijalnim) koje nije moguće egzaktno riješiti. Potrebno je naći zadovoljavajuće dobru aproksimaciju rješenja.

  • Podaci kojima manipuliramo tipično dolaze iz mjerenja raznih fizikalnih veličina. To znači da već u samom startu, a onda i tijekom računa nemamo „lijepe” brojeve niti npr. razlomke koji se uvijek na kraju pokrate kao (namještenim!) zadacima u dosadašnjem matematičkom obrazovanju. Račun se gotovo uvijek provodi s realnim brojevima na dovoljno mnogo decimala.

  • Većina stvarnih problema se svodi na račun koji je opsegom prezahtjevan za ljude. Na primjer, numeričko rješavanje neke parcijalne diferencijalne jednadžbe se može na kraju svesti na sustav od 1,000,000 linearnih jednadžbi s jednako mnogo nepoznanica. Cilj numeričke matematike je osmisliti efikasne algoritme koji će moći rješavati takve probleme pomoću računala.

Primijenjena matematika je tijekom svoje povijesti, a pogotovo u posljednjih 70-ak godina od pojave prvih računala, ostvarila spektakularne rezultate. Mnoge svakodnevne činjenice koje uzimamo zdravo za gotovo postoje zahvaljujući uspjesima primijenjene matematike u razvoju znanosti i tehnologije: točnija vremenska prognoza, efikasniji zrakoplovi i automobili poboljšane aerodinamike, napredak medicine (npr. zbog simulacija krvotoka koje su omogućile dizajn boljih stentova), jeftiniji razvoj bilo kojeg proizvoda zbog mogućnosti izrade vjerne numeričke simulacije na računalu, itd. Strojno učenje je također bazirano na metodama primijenjene matematike: na primjer, za uspjeh neuronskih mreža zaslužni su numerički algoritmi za traženje minimuma funkcija te ekstremno efikasni algoritmi za množenje matrica.

Najmoćnija računala dostupna danas (vidi: TOP500) koriste se za rješavanje problema primijenjene matematike. Čak se i kao mjera njihove brzine koriste standardizirani testovi (LINPACK, HPCG) kojima se rješavaju linearni sustavi velikih dimenzija.

Zbog gore navedenih svojstava, numerička matematika zahtijeva drugačiji pristup od tipičnih kolegija teorijske matematike. Konkretno, zanimaju nas sljedeće teme:

  • Uvjetovanost problema: osjetljivost problema na greške, prvenstveno u početnim podacima.

  • Konstrukcija numeričkih metoda za rješavanje danog problema.

  • Stabilnost numeričkih metoda: ako su ulazni podaci imali neku grešku u odnosu na egzaktne ulazne podatke, kolika je greška izlaznih podataka nakon izvršavanja metode?

  • Efikasnost numeričkih metoda: koliki je broj potrebnih računskih operacija i potreban memorijski prostor za rješavanje problema (vremenska i prostorna složenost)?

  • Točnost numeričkih metoda: ocjena točnosti izračunatog rješenja.

  • Kritičnost u interpretaciji dobivenih rezultata: ima li izračunati rezultat (fizikalnog) smisla? Ako ne, detektirati razlog – je li algoritam numerički nestabilan, je li sam problem dobro uvjetovan, itd.

Python

U ovoj skripti su numerički eksperimenti napravljeni u programskom jeziku Python.

Iako od studenata na ovom kolegiju (zasad!) ne očekujemo da sami pišu slične programe, svakako preporučamo da proučite programski kod koji je dostupan za većinu ovih eksperimenata. Python je iznimno pogodan za pisanje ovakvih programa, njegova sintaksa je bliska pseudokodu što olakšava čitljivost i smanjuje duljinu programa, te postoje napredne biblioteke za numeričku matematiku poput numpy i scipy u kojima su već implementirani brojni algoritmi koje ćemo raditi na ovom kolegiju.

Drugi često korišteni programski jezici koji se koriste u primijenjenoj matematici su Matlab koji je instaliran u praktikumima (i njegov besplatni klon Octave), zatim Julia, te R koji se prvenstveno koristi u statistici. Ovi programski jezici uglavnom služe za razvoj i testiranje prototipa numeričkih algoritama. Ukoliko je od kritične važnosti napraviti vrlo efikasnu implementaciju algoritma, to se i dalje tipično radi u jezicima niže razine poput C/C++ ili Fortrana.