Numeeriset menetelmät TIEA381 Luento 2 Kirsi Valjus Jyväskylän yliopisto Luento 2 () Numeeriset menetelmät 14.3.2013 1 / 39
Luennon 2 sisältö Luvusta 1: Numeerinen stabiilisuus Liite A: Liukulukuaritmetiikasta Luku 2: Epälineaarisen yhtälön ratkaiseminen Puolitushaku Kiintopistemenetelmä Newtonin menetelmä Sekanttimenetelmä Ohjelmointitekniikasta Luento 2 () Numeeriset menetelmät 14.3.2013 2 / 39
Luku 1: Numeerisen matematiikan peruskäsitteitä 1.3 Numeerinen stabiilisuus Numeerinen stabiilisuus: Esimerkki Tarkastellaan tehtävää x = f + 1 f, f 0 (suuri). Tehtävän häiriöalttius suurilla parametrin f arvoilla on K(x) 1 2. Lasketaan suureen x arvoja joillakin parametrin f arvoilla käyttäen yksinkertaisen tarkkuuden liukulukuaritmetiikkaa: f x tarkka 10 1 0.154347E+00 0.154347E+00 10 2 0.498753E-01 0.498756E-01 10 3 0.158081E-01 0.158074E-01 10 4 0.499725E-02 0.499988E-02 10 5 0.158691E-02 0.158113E-02 Koska neliöjuuren argumenttia ei voida esittää tarkasti liukulukuna on luonnollista, että laskennan tuloksessa esiintyy virhettä. Virhe on paljon suurempi kuin mitä tehtävän häiriöalttius ennustaa. Luento 2 () Numeeriset menetelmät 14.3.2013 3 / 39
Luku 1: Numeerisen matematiikan peruskäsitteitä Esimerkki jatkuu 1.3 Numeerinen stabiilisuus Tehtävä on hyvin asetettu: ratkaisu x on olemassa ja se on yksikäsitteinen, ratkaisu x on stabiili, eli riippuu jatkuvasti alkutiedosta f Tehtävän häiriöalttius on pieni K(x) 1 2. Mutta: Liukuluvuilla laskettaessa virhe paljon suurempi kuin mitä häiriöalttius ennustaa Lausekkeen generoima äärellisestä määrästä peruslaskutoimituksia koostuva numeerinen algoritmi x:n laskemiseksi on numeerisesti epästabiili Luento 2 () Numeeriset menetelmät 14.3.2013 4 / 39
Luku 1: Numeerisen matematiikan peruskäsitteitä 1.3 Numeerinen stabiilisuus Esimerkki jatkuu Yhtälö x = f + 1 f, f 0 (suuri). voidaan kirjoittaa yhtäpitävässä muodossa x = 1 f + 1 + f. Tätä lauseketta käyttäen yksinkertaisen tarkkuuden liukulukuaritmetiikalla saadaan täysi tarkkuus suureen x arvoille. Vaikka lausekkeet ovat matemaattisesti yhtäpitäviä vain jälkimmäinen muoto on käyttökelpoinen. Luento 2 () Numeeriset menetelmät 14.3.2013 5 / 39
Luku 1: Numeerisen matematiikan peruskäsitteitä 1.3 Numeerinen stabiilisuus Numeerinen stabiilisuus: Määritelmä Kun sovelletaan jotakin numeerista algoritmia yleisen tehtävän Φ(x, f ) = 0 (1) ratkaisemiseen, tuotetaan jono alkuperäistä tehtävää approksimoivia tehtäviä Φ n (x n, f ) = 0, (2) joiden ratkaisujen jonolle {x n } pätee x n x kun n. Määritelmä 1.2 Numeerinen algoritmi on stabiili, jos yhtälön (2) ratkaisun x n riippuvuus lähtötiedon häiriöstä ei ole suurempi kuin alkuperäisen tehtävän (1) ratkaisun x. Ts. virheiden x n x n ja x x tulisi siis olla samaa kertaluokkaa kaikilla n. Luento 2 () Numeeriset menetelmät 14.3.2013 6 / 39
Luku 1: Numeerisen matematiikan peruskäsitteitä 1.3 Numeerinen stabiilisuus Numeerinen stabiilisuus Numeerinen stabiilisuus on tärkein numeeriselle menetelmälle asetettavista vaatimuksista. Ilman sitä tulosten luotettavuus on kyseenalaista. Epästabiileja operaatioita ovat esim. jakaminen itseisarvoltaan pienellä luvulla kahden suunnilleen samansuuruisen luvun vähentäminen toisistaan Ohje: sievennä tai muokkaa lauseketta! Luento 2 () Numeeriset menetelmät 14.3.2013 7 / 39
Luku 1: Numeerisen matematiikan peruskäsitteitä Esimerkki 1.5 1.3 Numeerinen stabiilisuus Eksponenttifunktion arvo voidaan laskea pisteessä x = 15 potenssisarjasta e 15 = ( 15) i i=0 i! = 1 15 + 112 1 2 5621 2 +... 3.1 10 7. Tämä on numeerisesti epästabiili algoritmi, koska sarjan summa on pieni yhteenlaskettaviin verrattuna. Stabiili tapa on laskea käänteisluku potenssisarjan avulla e 15 = 1 e 15 = 1 1 + 15 + 112 1 2 + 562 1 2 +... Luento 2 () Numeeriset menetelmät 14.3.2013 8 / 39
Luku 1: Numeerisen matematiikan peruskäsitteitä Liite A: Liukulukuaritmetiikasta Liite A: Liukulukuaritmetiikasta - tietokoneessa luvut tallennetaan kiinteällä määrällä bittejä - luku x ( 0) B-kantaisessa liukulukuesityksessä on x = ( 1) s M B E, missä s {0, 1} on etumerkki M R on mantissa E Z on eksponentti Luento 2 () Numeeriset menetelmät 14.3.2013 9 / 39
Luku 1: Numeerisen matematiikan peruskäsitteitä Liukulukuaritmetiikasta Liite A: Liukulukuaritmetiikasta Nykyään käytössä IEEE:n standardin mukainen 2-kantainen liukulukuesitys yksinkertaisen tarkkuuden liukuluvut esitetään käyttäen 32 bittiä }{{} S }{{ E }} M{{} 1 8 23 Näin voidaan esittää suuruusluokkaa 10 38,..., 10 38 olevat luvut noin 7 merkitsevän numeron tarkkuudella kaksinkertaisen tarkkuuden liukuluvut esitetään käyttäen 64 bittiä }{{} S }{{ E }} M{{} 1 11 52 Näin voidaan esittää suuruusluokkaa 10 307,..., 10 307 olevat luvut noin 15 merkitsevän numeron tarkkuudella Luento 2 () Numeeriset menetelmät 14.3.2013 10 / 39
Luku 1: Numeerisen matematiikan peruskäsitteitä Liite A: Liukulukuaritmetiikasta Liukulukuaritmetiikan ominaisuuksia liukulukujen joukossa pienin ja suurin luku liukuluvut eivät ole tasaisesti jakautuneet reaaliakselille: esim väleillä (2 128, 2 127 ) ja (2 126, 2 127 ) on yhtä monta liukulukua kun reaalilukua approksimoidaan liukuluvulla, menetetään mantissan bitit, jotka eivät mahdu tallennusmuotoon. Viimeinen bitti määrätään pyöristämällä. Liukulukulaskutoimituksen tulos pyöristetään aina käytetyn liukulukuesityksen mukaisesti (myös välitulokset!) Luento 2 () Numeeriset menetelmät 14.3.2013 11 / 39
Luku 1: Numeerisen matematiikan peruskäsitteitä Liite A: Liukulukuaritmetiikasta Liukulukuaritmetiikan ominaisuuksia liukulukujen joukko ei ole suljettu laskutoimitusten +,,, / suhteen; jos tulos menee itseisarvoltaan liian pieneksi, tapahtuu alivuoto liian suureksi, tapahtuu ylivuoto (tulokseksi asetetaan ± Inf). liukulukulaskutoimitusten tulos voi riippua myös laskujärjestyksestä konevakio ε R on pienin liukuluku, joka toteuttaa 1.0 + ε R > 1.0. 32 bitin IEEE aritmetiikassa ε R 10 7 ja 64 bitin IEEE aritmetiikassa ε R 2 10 16. Luento 2 () Numeeriset menetelmät 14.3.2013 12 / 39
Luku 1: Numeerisen matematiikan peruskäsitteitä Liite A: Liukulukuaritmetiikasta Esimerkki: suuren ja pienen luvun yhteenlasku Lasketaan yhteen 10-järjestelmän luvut 0.01 ja 7000, käyttäen esitystä, jossa mantissa esitetään neljällä numerolla. Lukujen normalisoidut liukulukuesitykset ovat 0.01 = 0.1000 10 1 ja 7000 = 0.7000 10 4. Suoritettaessa yhteenlasku luovutaan normalisoidusta esityksestä pienemmässä luvussa 0.000001 10 4 +0.700000 10 4 0.700001 10 4 Varsinainen laskutoimitus suoritetaan muistitilaa pidemmässä yksikössä Tulosta talletettaessa suoritetaan mantissan pyöristys neljään numeroon Saadaan tulos 0.7000 10 4, eli pienemmällä yhteenlaskettavalla ei ollut mitään merkitystä. Luento 2 () Numeeriset menetelmät 14.3.2013 13 / 39
Luku 1: Numeerisen matematiikan peruskäsitteitä Toinen Esimerkki Liite A: Liukulukuaritmetiikasta Liukulukujen yhtäsuuruuden testaaminen ei ole mielekästä. Seuraava ohjelmanpätkä jää todennäköisesti tahattomaan päättymättömään silmukkaan: s = 0.00 do read(*,*) x s = s + x if (s == 1.0) exit end do Oikea lopetuskriteeri olisi yhtäsuuruuden sijaan s 1 δ, missä δ > 0 on pieni toleranssiparametri (usein δ = ε R ). Luento 2 () Numeeriset menetelmät 14.3.2013 14 / 39
Luku 1: Numeerisen matematiikan peruskäsitteitä Liite A: Liukulukuaritmetiikasta Liukulukuaritmetiikasta Jos alkuperäinen tehtävä on hyvin asetettu ja ratkaisualgoritmi on numeerisesti stabiili, ei liukulukuaritmetiikka aiheuta ongelmia. ts. jos algoritmissa ei vähennetä lähes samansuuruisia lukuja, jaeta hyvin pienellä luvulla jne. Ei ollut tarkoitus säikäyttää liukulukuaritmetiikalla! Luento 2 () Numeeriset menetelmät 14.3.2013 15 / 39
Luku 2: Epälineaarisen yhtälön ratkaiseminen Olkoon f : R R jatkuva funktio. Tarkastellaan yhtälön ratkaisemista. f (x) = 0 (3) Jos f on epälineaarinen, yleensä yhtälön (3) ratkaisun (juuren) x lauseketta ei tunneta suljetussa muodossa. Luento 2 () Numeeriset menetelmät 14.3.2013 16 / 39
Esimerkki Luku 2: Epälineaarisen yhtälön ratkaiseminen Keplerin yhtälö x e sin(x) M = 0 kuvaa (esim. satelliitin) liikettä elliptisellä radalla. - x on eksentrinen anomalia (radan kulma) - e eksentrisyys (ellipsin soikeus) - M keskianomalia (satelliitin sijainti radalla ajanhetkellä t) Luento 2 () Numeeriset menetelmät 14.3.2013 17 / 39
Epälineaarisen yhtälön ratkaiseminen Käytetään numeerisia ratkaisumenetelmiä, joissa etsitään iteratiivisesti uusia, parempia approksimaatioita juurelle x lähtien alkuarvauksesta x 0, kunnes ennaltamäärätty lopetuskriteeri toteutuu. ts. muodostetaan jono {x n } ratkaisuja s.e. x n x, kun n. Huom. Tehtävällä ei välttämättä ole ratkaisua tai niitä voi olla useita (jopa ääretön määrä) jos mahdollista, tehtävä kannattaa aluksi hahmottaa geometrisesti. Luento 2 () Numeeriset menetelmät 14.3.2013 18 / 39
2.1. Puolitushaku 2.1. Puolitushaku Olkoon välillä [a, b] voimassa f (a)f (b) < 0 ts. f vaihtaa merkkiä välillä [a, b]. x ]a, b[ siten, että f (x ) = 0. Olkoon piste c = 1 2 (a + b) välin keskipiste. Jos nyt f (a)f (c) < 0, niin x [a, c]; asetetaan b := c. Jos f (a)f (c) > 0, niin x [c, b]; asetetaan a := c. Jos f (a)f (c) = 0, niin f (c) = 0 ja x = c. Jatketaan, kunnes väli [a, b] on kutistunut riittävän pieneksi (tai tarkka ratkaisu on löytynyt) x = c. Luento 2 () Numeeriset menetelmät 14.3.2013 19 / 39
Algoritmi 2.1 Luku 2: Epälineaarisen yhtälön ratkaiseminen 2.1. Puolitushaku bisect( a, b, toler, itmax, c ) u := f (a) v := f (b) h := b a if sign(u) = sign(v) then stop do iter = 1,..., itmax h := h/2 c := a + h w := f (c) if h toler or w toler then return if sign(w) sign(u) then b := c v := w else a := c u := w end if end do Luento 2 () Numeeriset menetelmät 14.3.2013 20 / 39
Esimerkki 2.1. 2.1. Puolitushaku Sovelletaan puolitushakua Keplerin yhtälöön (e=1/2, M=1) x 1 2 sin x 1 = 0. Kun käytetään alkuarvauksena väliä [0, 2], niin saadaan seuraavanlainen jono likiratkaisuja: iter c f (c) 1 1.00000 4.2e-01 2 1.50000 1.3e-03 3 1.25000 2.2e-01... 8 1.49219 6.3e-03... 12 1.49854 1.6e-04 13 1.49878 7.5e-05 Luento 2 () Numeeriset menetelmät 14.3.2013 21 / 39
Lause 2.1 Luku 2: Epälineaarisen yhtälön ratkaiseminen 2.1. Puolitushaku Olkoon [a 0, b 0 ], [a 1, b 1 ],..., [a n, b n ] puolitushaun tuottamat välit. Tällöin lim a n = lim b n = x, n n missä f (x ) = 0. Jos c n = 1 2 (a n + b n ), niin x c n 2 (n+1) (b 0 a 0 ). Luento 2 () Numeeriset menetelmät 14.3.2013 22 / 39
2.2. Iteratiivisten algoritmien konvergenssianalyysistä 2.2. Iteratiivisten algoritmien konvergenssianalyysistä Iteratiivisen menetelmän tulee olla suppeneva ja numeerisesti stabiili ollakseen käyttökelpoinen. Sen tulisi olla myös tehokas (tarvittavien iteraatiokierrosten lukumäärä ja funktion arvojen laskujen lukumäärä per iteraatio). Käytännössä menetelmän tehokkuutta (eli sen konvergenssinopeutta) arvioidaan seuraavasti: Luento 2 () Numeeriset menetelmät 14.3.2013 23 / 39
2.2. Iteratiivisten algoritmien konvergenssianalyysistä Määritelmä 2.1. Olkoon {x n } n=0 R jono, jolle lim n x n = x. Jos on olemassa reaaliluvut p ja C > 0 siten, että x n+1 x lim n x n x p = C, niin p = jonon {x n } konvergenssin kertaluku ja C = asymptoottinen virhevakio. Käytännössä suurille n x n+1 x C x n x p ts. C kertoo, minkä verran 1 iteraatio parantaa ratk. approksimaatiota. Luento 2 () Numeeriset menetelmät 14.3.2013 24 / 39
2.2. Iteratiivisten algoritmien konvergenssianalyysistä Konvergenssinopeus Konvergenssinopeus jne. x n+1 x lim n x n x p = C Jos p = 1 ja C < 1, niin konvergenssi on lineaarista. Jos 1 < p < 2, niin konvergenssi on superlineaarista. Jos p = 2, niin konvergenssi on kvadraattista (neliöllistä). Luento 2 () Numeeriset menetelmät 14.3.2013 25 / 39
Esimerkki 2.2. 2.2. Iteratiivisten algoritmien konvergenssianalyysistä Puolitushaussa kullakin iteraatiolla pahimmassa tapauksessa (c n ratkaisun approksimaatio). Siten x c n = 2 (n+1) (b 0 a 0 ) c n+1 x c n x = 2 (n+2) (b 0 a 0 ) 2 (n+1) (b 0 a 0 ) = 1 2, eli p = 1 ja C = 1 2. Konvergenssi on siis lineaarista. Luento 2 () Numeeriset menetelmät 14.3.2013 26 / 39
2.3. Kiintopistemenetelmä 2.3. Kiintopistemenetelmä Merkkiehtoon f (a)f (b) < 0 perustuvat menetelmät ovat yksinkertaisia toteuttaa ja ne konvergoivat varmasti. Konvergenssi on kuitenkin hidasta, eivätkä menetelmät yleisty useamman yhtälön muodostaman yhtälöryhmän tapaukseen. Luovutaan siis jatkossa merkkiehdosta. Luento 2 () Numeeriset menetelmät 14.3.2013 27 / 39
Kiintopistemenetelmä: idea 2.3. Kiintopistemenetelmä Idea: korvataan alkuperäinen yhtälö f (x) = 0 yhtäpitävällä yhtälöllä x g(x) = 0 ja sovelletaan iteraatiota x n+1 = g(x n ). Riittävä ehto sille, että iteraatio on suppeneva on, että funktio g : [a, b] [a, b] on kutistava: g(x) g(y) γ x y, jollekin vakiolle 0 < γ < 1. Luento 2 () Numeeriset menetelmät 14.3.2013 28 / 39
Kiintopistemenetelmä jatkuu 2.3. Kiintopistemenetelmä Lause Olkoon g : [a, b] [a, b] kutistava funktio. Tällöin sillä on täsmälleen yksi kiintopiste x = g(x ). Lisäksi iteraatio x n+1 = g(x n ) suppenee kiintopisteeseen kaikilla alkuarvauksilla x 0 [a, b]. Esimerkki 2.3. Yhtälö x 1 2 cos x = 0 voidaan ratkaista iteraatiolla x n+1 = 1 2 cos x n. Iteraatio suppenee kaikilla alkuarvauksilla x 0 ja ratkaisuksi saadaan x 0.450184. Tässä tapauksessa konvergenssi on lineaarista ja asymptoottinen virhevakio C 0.22. Luento 2 () Numeeriset menetelmät 14.3.2013 29 / 39
2.4. Newtonin menetelmä 2.4. Newtonin menetelmä Ollaan ratkaisemassa yhtälöä f (x) = 0. Juuren approksimaatiota x n parannetaan korvaamalla käyrä y = f (x) pisteeseen (x n, f (x n )) asetetulla tangentilla. Uusi approksimaatio x n+1 on tangentin ja x-akselin leikkauspiste. Saadaan iteraatiokaava x n+1 = x n f (x n) f (x n ). Luento 2 () Numeeriset menetelmät 14.3.2013 30 / 39
Newtonin menetelmä jatkuu 2.4. Newtonin menetelmä Newtonin menetelmä on lienee tunnetuin numeerinen juurenhakumenetelmä voidaan yleistää suoraviivaisesti myös epälineaarisille yhtälöryhmille. Voidaan tulkita myös kiintopisteiteraationa, jossa iteraatiofunktioksi valitaan g(x) = x f (x) f (x). Luento 2 () Numeeriset menetelmät 14.3.2013 31 / 39
Lause 2.3. Luku 2: Epälineaarisen yhtälön ratkaiseminen 2.4. Newtonin menetelmä Newtonin menetelmä konvergoi, kun alkuarvaus x 0 valitaan riittävän läheltä juurta x. (Olettaen, että juuren x ympäristössä funktio f on 2 kertaa jatkuvasti derivoituva ja f (x) 0) + kvadraattinen konvergenssi tehokas. - x 0 :n valinta voi käytännössä olla hankalaa - termi f (x n )/f (x n ) voi aiheuttaa ongelmia laskennassa, koska nimittäjä voi mennä pieneksi. - funktion f arvojen lisäksi tarvitaan myös derivaatan f arvoja. Luento 2 () Numeeriset menetelmät 14.3.2013 32 / 39
Newtonin menetelmä jatkuu 2.4. Newtonin menetelmä Jos funktiolla f on yksinkertainen analyyttinen lauseke, ei derivointi ole ongelma. Jos funktion f lauseketta ei ole annettu suljetussa muodossa, voidaan käyttää hyväksi tietokoneohjelmien automaattista derivointia Newtonin menetelmä voidaan yhdistää johonkin globaalisti konvergoivaan algoritmiin (esim. puolitushaku). Yksinkertaisella menetelmällä haetaan kohtuullinen likiarvo, jota käytetään Newtonin menetelmän alkuarvauksena. Luento 2 () Numeeriset menetelmät 14.3.2013 33 / 39
Sekanttimenetelmä Sekanttimenetelmä Sekanttimenetelmä saadaan Newtonin menetelmästä korvaamalla siinä esiintyvä derivaatta erotusosamäärällä: x n x n 1 x n+1 = x n f (x n ) f (x n ) f (x n 1 ), n 1. Nyt käyrää y = f (x) approksimoidaan tangentin sijaan sekantilla. Myös sekanttimenetelmä varsin tehokas menetelmä, sillä konvergenssin kertaluvuksi voidaan osoittaa p 1.62. Luento 2 () Numeeriset menetelmät 14.3.2013 34 / 39
Ohjelmointitekniikasta 2.5. Ohjelmointitekniikasta Numeerinen ratkaisumenetelmä on yksinkertaisimmillaan pelkkä iteraatiokaava Ratkaisualgoritmi sisältää iteraatiokaavan lisäksi toistorakenteen ja lopetuskriteerin. Tietokonetoteutus, eli ongelman ratkaiseva (ali)ohjelma sisältää edellisten lisäksi vielä käyttöliittymän (parametrilistan) ja mahdollisten virhetilanteiden hallintalogiikan. Luento 2 () Numeeriset menetelmät 14.3.2013 35 / 39
2.5. Ohjelmointitekniikasta Esimerkki: Newtonin men. implementointi aliohjelmaksi Aliohjelmalle newton välitetään parametrina ratkaistavan yhtälön määräävä funktio f, alkuarvaus x 0, toleranssiparametrit δ ja ε sekä iteraatiokierrosten maksimimäärä itmax. Aliohjelman suorituksen jälkeen tulosparametrit x ja error sisältävät yhtälön likiratkaisun sekä virheindikaattorin. Algoritmi 2.2 newton( f, x 0, δ, ε, itmax, x, error ) Luento 2 () Numeeriset menetelmät 14.3.2013 36 / 39
2.5. Ohjelmointitekniikasta Esimerkki: Newtonin men. implementointi aliohjelmaksi Algoritmi 2.2 newton( f, x 0, δ, ε, itmax, x, error ) v := f (x 0 ) d := f (x 0 ) do iter = 1,..., itmax if d δ then error := 2 return end if x 1 := x 0 v/d v := f (x 1 ) d := f (x 1 ) if x 1 x 0 ε x 1 and v ε then error := 0 x := x 1 return end if x 0 := x 1 end do error := 1 x := x 1 Luento 2 () Numeeriset menetelmät 14.3.2013 37 / 39
2.5. Ohjelmointitekniikasta Iteraation lopetuskriteerin lähempi tarkastelu Lopetuskriteeriä valittaessa tulevat esimerkiksi seuraavat ehdot kyseeseen: f (x n ) ε (funktion f itseisarvo pieni) x n x n 1 ε (likiratkaisun abs. muutos pieni) x n x n 1 ε x n (likiratkaisun suht. muutos pieni) Mikään näistä kriteereistä ei kuitenkaan yksinään sovellu kaikentyyppisille menetelmille ja yhtälöille. Yleiskäyttöisessä aliohjelmassa kannattaa vaatia vähintään kahden lopetuskriteerin voimassaoloa ennen kuin iteraatio lopetetaan. Luento 2 () Numeeriset menetelmät 14.3.2013 38 / 39
2.5. Ohjelmointitekniikasta Algoritmia 2.2 voidaan pitää Newtonin menetelmän minimitoteutuksena. Kaupallisten aliohjelmakirjastojen mukaista käyttäjäystävällisyyttä tavoitellessa Käyttäjällä tulisi olla mahdollisuus jättää toleranssi- parametrit ε ja δ antamatta, jolloin käytetään sopivia oletusarvoja (esim. ε = ε R ). Lisäksi pitäisi varautua näppäily virheisiin (esim. itmax < 0). Luento 2 () Numeeriset menetelmät 14.3.2013 39 / 39