Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Numeerinen ratkaisu matemaattisen mallin avulla

Samankaltaiset esitykset


Esitys aiheesta: "Numeerinen ratkaisu matemaattisen mallin avulla"— Esityksen transkriptio:

1 Numeerinen ratkaisu matemaattisen mallin avulla
ongelma teoreettinen, matemaattinen malli numeerinen, laskennallinen malli algoritmi ohjelma laskenta virhearviot ja herkkyysanalyysi tulosten tarkastelu

2 Virhelähteitä matemaattisen mallin virhe, mallissa on esimer-kiksi liian suuria yksinkertaistuksia numeerisen mallin virheet, kuten diskretointivirhe ja katkaisuvirhe datan virheet, systemaattiset ja tilastolliset algoritmiset ongelmat (herkkyys, epästabiilisuus, tehottomuus) laskentatarkkuuden ongelmat (pyöristys-, katkaisu-, ja diskretisointivirheet)

3 Hyvin asetettu ja huonosti asetettu ongelma
Matemaattinen tehtävä on hyvin asetettu (well-posed), jos ratkaisu on olemassa kaikilla lähtöarvoilla, on yksikäsitteinen ja riippuu jatkuvasti tehtävän alkuarvoista. Huonosti asetetulla tehtävällä (ill-posed) ei ole kaikkia näitä ominaisuuksia.

4 Hyvin asetettu ja huonosti asetettu ongelma
Hyvin asetetun tehtävän ratkaisuksi saadaan hyvällä algoritmilla hyvä likiarvo. Jos matemaattinen tehtävä on huonosti asetettu, sitä ei voida ratkaista tarkasti ja luotettavasti. Huonosti asetetuille tehtäville on kuitenkin kehitetty menetelmiä, joilla tehtäville saadaan edes käypiä ratkaisuja.

5 Kokonaisluvut Kokonaisluvut ovat tietokoneessa tarkkoja.
Tietokoneessa kokonaisluvut esitetään kiinteällä määrällä bittejä, joten luvuilla on ylä- ja alaraja. Bittien määrä on nykyään käytännössä aina jaollinen tavun bittien määrällä 8. Kokonaisluvun esittämiseen käytetään yleensä joko 1 tavu (8 bittiä), 2 tavua (16 bittiä), 4 tavua (32 bittiä) tai jopa 8 tavua (64 bittiä). Useimmissä koneissa voidaan käyttää kaikkia näitä eripituisia kokonaislukumuuttujia.

6 Liukuluvut Reaaliluvut esitetään tietokoneessa liukuluvuilla.
Liukuluku koostuu kahdesta kokonaisluvusta, mantissasta m ja eksponentista e, jotka kummatkin sisältävät etumerkin. Kaavana liukuluku on f=m2e, joten on olemassa suurin ja pienin liukuluku fmax ja fmin. Liuku-luvut eivät ole tasaisesti jakautuneet välille (fmin, fmax). Periaatteessa voidaan käyttää muutakin kantalukua kuin kaksi, mutta kakkonen on nykyään yleisin.

7 Reaaliluvusta liukuluvuksi
Reaaliluku muunnetaan liukuluvuksi joko katkaisemalla tai pyöristämällä. Aritmeettisissa operaatioissa lukuja joko pyöristetään tai katkaistaan. Yleensä ohjelmointikielissä on mahdollista valita liukuluvuille useita tarkkuuksia, esimerkiksi 32 tai 64 bittiä. IEEE:n standardi: puolitarkkuuden liukuluvun mantissa on 24 bittiä ja eksponentti 8 bittiä. Suurin liukuluku on noin 1038 ja pienin positiivinen liukuluku noin

8 Ylivuoto ja alivuoto Yli- ja alivuodot johtuvat siitä, että kokonais- ja liukuluvuilla on aina joku ylä- ja alaraja. Ylivuotoja voidaan joskus välttää algoritmisesti kirjoittamalla laskukaava toiseen muotoon. Esimerkki. an /bn = (a/b)n Joskus auttaa muuttujien skaalaus, mutta usein joudutaan käyttämään ehtolauseita ohjelman toiminnan varmistamiseksi.

9 Pyöristysvirheet Koska liukuluku on vain approksimaatio reaaliluvulle, pyöristysvirheet ovat väistämättömiä. Pyöristysvirheitä syntyy lukuja syötettäessä ja niillä laskettaessa. Keinoja välttämiseen: aritmeettisten operaatioiden määrän minimointi esimerkiksi analyyttisia kaavoja sieventämällä. Samoin kannattaa pyöristää vasta lopputulokset. Laskutarkkuuden on oltava riittävän suuri.

10 Pyöristysvirheet Pyöristysvirheet voivat kasautua esimerkiksi sarjojen summauksissa ja iteraatioissa. Kahden liukuluvun yhtäsuuruutta ei pidä ohjelmassa verrata suoraan, vaan pitää testata, että luvut ovat sopivissa rajoissa samat. Esimerkki. Kahta liukulukua a ja b ei saa verrata käyttäen lauseketta if a = b, koska tämä muoto on herkkä pyöristysvirheille. Paremmin if abs(a-b) < epsilon, missä epsilon on sopiva pieni liukuluku.

11 Kumoutumisvirhe Kahden reaaliluvun vähentäminen toisistaan voi johtaa virheelliseen tulokseen, jos luvut ovat hyvin suuria erotukseensa nähden. Silloin lukujen erotus voi olla samaa suuruusluokkaa kuin epätarkemman luvun tarkkuus ja riittävän tarkkaa vastausta ei saada. Tällaista virhettä kutsutaan kumoutumisvirheeksi (catastrophic cancellation).

12 Esimerkki Merkitään reaalilukuja esittäviä liukulukua x ja y ja niiden virheitä Dx ja Dy. Jos x= ja y= ja niiden virheet Dx = Dy = , niin erotus x-y=0.0001, joka on melkein yhtä suuri kuin sen virhe, ! (Dahlquist and Björk 1974)

13 Matlabilla: » x = 0.5554; y= 0.5553; » x-y » ans = 1.0000e-004
» dx = ; dy = dx; » % virheen kasautumislaki » sqrt(dx^2+dy^2) ans = e-005

14 Esimerkki Laskettaessa yhteen hyvin suuri ja pieni luku voi käydä niin, että pienempi luku on samaa suuruusluokkaa kuin suuremman luvun tarkkuus, jolloin pienemmällä luvulla ei ole mitään vaikutusta lopputulokseen. Ratkaisuna tähänkin ongelmaan on usein algoritmin vaihto eli laskukaavan saattaminen johonkin muuhun matemaattisesti ekvivalenttiin, mutta numeerisesti erilaiseen muotoon.

15 Esimerkkejä vuorottelevan sarjan summa, esimerkiksi exp(-x) = 1/exp(x)
numeerinen derivaatta (f(x+h)-f(x))/h

16 Ongelman skaalaaminen
Peruslaskutoimituksia pitäisi suorittaa mieluiten luvuilla, jotka ovat keskenään samaa suuruus-luokkaa ja järkevän suuruisia verrattuina lukualueeseen ja liukulukujen tarkkuuteen. Ongelma joudutaan usein skaalaamaan, jotta pysyttäisiin liukulukualueen rajoissa.

17 Skaalaus Muuttujat eivät saisi olla laadullisia suureita.
Laaduttomiin suureisiin päästään jakamalla tällaiset muuttujat sopivilla probleemaan liittyvillä 'mittatikuilla', jotka muuntavat muuttujien arvot järkevän suuruisiksi. Käyttäjäystävällinen ohjelma tekee tietenkin skaalaukset sisäisesti. Syöttödata annetaan sille fysikaalisissa yksiköissä ja se palauttaa myös tulokset näissä yksiköissä. Muunnokset tapahtuvat siis juuri ennen tulostusta ja syötön jälkeen.

18 Diskretisointi ja katkaisu
Ongelma joudutaan numeerisissa tehtävissä diskretoimaan, josta aiheutuu myös virhettä. Diskretointi tarkoittaa (jatkuvan) funktion arviointia diskreetillä funktiolla, jossa on äärellinen määrä pisteitä.

19 Esimerkki: katkaisu Tarkastellaan yksinkertaisuuden vuoksi jatkuvaa yhden muuttujan funktiota f(x). Tietokoneessa funktiota ei voi approksimoida koko reaaliakselilla, vaan ainoastaan äärellisellä välillä (a,b), missä a ja b ovat riittävän suuria. Funktio siis katkaistaan. Laskujen tulokset ovat tietysti virheellisiä, jos funktio on nollasta poikkeava välin (a,b) ulkopuolella.

20 Lorenzin funktion integrointi
>> f = inline(’1./(1+x.^2)’, ’x’); >> quad(f,-10,10) ans = >> quad(f,-100,100) ans = >> quad(f,-1000,1000) ans = >> quad(f, ,100000) ans = vrt. vanha versio antaa !!!

21 Esimerkki: Diskretisointi
Diskretoinnissa väli (a,b) jaetaan osa-väleihin { a=x1 < x2 < …< xN = b}, ja funktion f diskreetiksi approksimaatioksi tällä välillä otetaan sen arvojen jono {f(a) = f(x1), f(x2),…, f(xN) = f(b)}. Pistetiheyden valinnalla voi olla huomattava vaikutus tuloksen tarkkuuteen.

22 Lorenzin funktio, integrointi puolisuunnikassäännöllä
x = -10:0.1:10; trapz(x,f(x)) ans = x = -1000:0.1:1000; ans = x = -1000:1:1000; ans =

23 Numeerinen derivointi
» x = 0:0.1:4*pi; h=0.1; subplot(1,2,1), plot(x+h/2,(cos(x+h)-cos(x))/h,x,-sin(x),'.') » x = 0:0.5:4*pi; h=0.5; subplot(1,2,2), plot(x+h/2,(cos(x+h)-cos(x))/h,x,-sin(x),'.')

24 Tärkeää Matemaattisesti ekvivalentit algoritmit (antaisivat samat tulokset, jos laskentatarkkuus olisi ääretön ja laskentaan käytettävät resurssit olisivat äärettömät) eivät juuri koskaan anna samoja tuloksia eivätkä ole juuri koskaan yhtä tehokkaita.

25 Numeerisen tarkkuuden arviointi
lähtötietojen virheet mittaustarkkuuden parantaminen diskretisointivirheet pistetiheyden valinta katkaisuvirheet laskentavälin laajennus, analyyttinen jatko pyöristysvirheet algoritmin ja laskenta-tarkkuuden valinta


Lataa ppt "Numeerinen ratkaisu matemaattisen mallin avulla"

Samankaltaiset esitykset


Iklan oleh Google