R. Mäkinen NUMEERISET MENETELMÄT 2011
2
Luku 1 Numeerisen matematiikan peruskäsitteitä The purpose of computing is insight, not numbers. R. W. Hamming Numeerinen analyysi tutkii algoritmeja luonnontieteissä, tekniikassa, taloustieteissä jne. esiintulevien jatkuvan matematiikan tehtävien ratkaisemiseen. Jatkuva tarkoittaa tässä sitä, että suureet, joiden laskemisesta ollaan kiinnostuneita, ovat reaali- tai kompleksilukuja. Useimpien jatkuvan matematiikan tehtävien (epälineaariset yhtälöt, differentiaaliyhtälöt,...) ratkaisuja ei voi esittää äärellisellä määrällä alkeislaskutoimituksia. Siksi numeeriset algoritmitkin ovat yleensä iteratiivisia, eli ne tuottavat jonon likiratkaisuja. Oleellista on, että likiratkaisujen jono suppenee riittävän nopeasti. Myös sellaiset jatkuvan matematiikan ongelmat, jotka voidaan periaatteessa ratkaista äärellisillä algoritmeilla (esim. lineaariset yhtälöryhmät), ratkaistaan usein iteratiivisesti. Numeerisia menetelmiä on jossakin muodossa kehitetty ja käytetty jo satoja, jopa tuhansia vuosia. Numeerinen matematiikka on ollut keskeinen, mutta vähän arvostettu työväline luonnontieteiden kehityksessä kuluneiden vuosisatojen aikana. Toisen maailmansodan jälkeen numeerisesta matematiikasta on tietokoneiden kehityksen myötä muodostunut itsenäinen tieteenala. Ilmiöiden matemaattinen mallittaminen ja mallien numeerinen ratkaiseminen, tieteellinen laskenta (scientific computing), on noussutkin viimeisen 20 vuoden aikana tasavertaiseksi tutkimusmenetelmäksi teoreettisen ja kokeellisen tutkimuksen rinnalle luonnontieteissä ja tekniikassa. Numeerinen analyysi on tieteellisen laskennan matematiikkaa. Avainsanat algoritmi ja jatkuva kytkevät numeerisen matematiikan tietojenkäsittelytieteisiin ja matemaattiseen analyysiin. Kuitenkin tietojenkäsittelytieteen tutkimuksen valtavirta keskittyy algoritmeihin, jotka perustuvat diskreettiin matematiikkaan, ja toisaalta matemaattisen analyysin tutkimus ei kohdistu algoritmien analysointiin. Tietokoneiden laskentatehon eksponentiaalinen kasvu, graafiset käyttöliittymät ja laskentatulosten helppo 3D-visualisointi ovat tehneet mahdolliseksi ratkaista rutiininomaisesti numeerisesti matemaattisia ongelmia, joista Manhattan-projektin aikaiset tiedemiehet eivät osanneet edes uneksia. Tästä huolimatta tulee muistaa, että tietokoneella(kin) 3
4 LUKU 1. NUMEERISEN MATEMATIIKAN PERUSKÄSITTEITÄ tapahtuva laskenta on loppujen lopuksi inhimillisen toiminnan tulosta. Siksi numeerisia ratkaisumenetelmiä käytettäessä käyttäjällä tulee olla kyky arvioida saatujen tulosten järkevyys alkuperäisen (fysikaalisen) tehtävän kannalta sekä tieto siitä, millaisia tehtäviä menetelmällä oletetaan voitavan ratkaista halutulla tarkkuudella ja millaisia ei. 1.1 Likiarvoista Käytännön laskuissa jokainen on väistämättä törmännyt likiarvoihin. Laskutikkujen aikakautena (ja miksei myöhemminkin) oli normaalia käyttää laskuissa esimerkiksi π:n ja valon nopeuden c arvoina karkeita likiarvoja π 3.14 ja c 3 10 8 ms 1 taulukkokirjoista löytyvien tarkempien arvojen π 3.14159265, c 2.99792458 10 8 ms 1 sijaan. Luonnollinen tapa arvioida likiarvojen hyvyyttä on mitata tarkan arvon x ja likiarvon ˆx etäisyyttä eli absoluuttista virhettä x ˆx. Tällöin edellämainituille likiarvoille olisi π 3.14 0.00159265, c 3 10 8 207542. Valon nopeuden absoluuttinen virhe, yli 207 km s 1, vaikuttaa ensisilmäykseltä hämäävän suurelta. Tämän vuoksi likiarvon hyvyyttä mitataan myös suhteellisen virheen x ˆx / x avulla. Edellämainittujen likiarvojen suhteelliset virheet ovat c 3 10 8 c 0.00069, π 3.14 π 0.00051. Siis molempien likiarvojen suhteelliset virheet olivat samaa kertaluokkaa. Suhteellinen virhe voidaan kertoa sadalla ja puhua prosentuaalisesta virheesta. Esimerkiksi 3.14 on π:n likiarvo noin 0.05%:n tarkkuudella. Usein käytetään myös termejä oikeat desimaalit ja oikeat merkitsevät numerot. Jos x ˆx < 1 2 10 d, niin sanotaan likiarvon ˆx:n approksimoivan x:ää d:llä desimaalilla. Edelleen, jos x ˆx < 1 2 10 s x, niin likiarvon ˆx sanotaan approksimoivan x:ää s:llä merkitsevällä numerolla. Esimerkiksi luvut x = 78.123 ja ˆx = 78.157 ovat samoja kolmen merkitsevän numeron ja yhden desimaalin tarkkuudella. 1.2 Matemaattisen probleeman stabiilisuus Tarkastellaan yhtälömuotoista matemaattista probleemaa Φ(x, f ) = 0, (1.1) missä x on tehtävän ratkaisu ja f on ns. alkutieto (tehtävän parametrit, data ). Tehtävä (1.1) on hyvin asetettu, jos ratkaisu x on olemassa ja se on yksikäsitteinen, ratkaisu x on stabiili, eli se riippuu jatkuvasti alkutiedosta f. Eli jos x on häirityn tehtävän Φ( x, f ) = 0 (1.2) ratkaisu, niin f f = x x.
1.2. MATEMAATTISEN PROBLEEMAN STABIILISUUS 5 Esimerkki 1.1. Toisen asteen yhtälön (kompleksisten) juurten ratkaisutehtävä Φ(x, f ) = ax 2 + bx + c = 0, a 0 on muotoa (1.1). Nyt alkutietona on yhtälön kertoimet f = (a,b,c) ja ratkaisuna on x = b ± b 2 4ac. 2a Yhtälöllä on aina täsmälleen kaksi kompleksista juurta (kun niiden kertaluku otetaan huomioon), joten ratkaisu on olemassa ja yksikäsitteinen. Lisäksi juuret riippuvat jatkuvasti lähtötiedosta f, joten tehtävä on hyvin asetettu. Esimerkki 1.2. Tavallisen differentiaaliyhtälöryhmän { x 1 (t) = x 2 (t), x 1 (0) = f 1 x 2(t) = x 1 (t), x 2 (0) = f 2 (1.3) yksikäsitteinen ratkaisu on x 1 (t) = 1 2 ( f 1 + f 2 )e t + 1 2 ( f 1 f 2 )e t x 2 (t) = 1 2 ( f 1 + f 2 )e t 1 2 ( f 1 f 2 )e t. Alkutietoa f = (1, 1) vastaava ratkaisu on { x1 (t) = e t x 2 (t) = e t, eli molemmat ratkaisun komponentit lähestyvät nollaa, kun t kasvaa rajatta. Systeemi, jota malli kuvaa, pyrkii asettumaan siis tasapainotilaan. Jos e.o. alkutiedon sijaan käytetään häirittyä alkutietoa f = (1 + ε, 1), ε > 0, niin ratkaisuksi saadaan x 1 (t) = ε 2 et + (1 + ε 2 )e t x 2 (t) = ε 2 et (1 + ε 2 )e t. Tämän ratkaisun komponentit puolestaan lähestyvät ääretöntä, eli mallin kuvaama systeemi räjähtää, oli ε miten pieni hyvänsä! Tehtävä (1.3) on siten epästabiili alkutiedon häiriöiden suhteen. Käytännössä huonosti asetettua tehtävää ei voi ratkaista. Jos parametri f on peräisin esimerkiksi mittauksista se sisältää automaattisesti mittausvirhettä. Vastaava tilanne syntyy, jos parametrin f arvo esitetään äärellisenä liukulukuna. Tehtävälle täytyy tällöin yrittää etsiä jokin vaihtoehtoinen, hyvin asetettu formulointi. Vaikka tehtävä olisikin stabiili matemaattisen määritelmän mielessä, voi se olla käytännössä huonosti asetettu ja sen ratkaiseminen siten hankalaa. Alkutiedon f vaikutusta ratkaisuun x mitataan ns. häiriöalttiudella (condition number):
6 LUKU 1. NUMEERISEN MATEMATIIKAN PERUSKÄSITTEITÄ Määritelmä 1.1. Olkoon f = f + δ f häiritty lähtötieto ja olkoon x häirityn yhtälön ratkaisu. Häiriöalttius on suure Φ( x, f ) = 0 K(x) = sup δ f x x x δ f, (1.4) f missä on sallittujen häiriöiden joukko (so. tehtävä on vielä mielekäs parametrin f + δ f arvolla). Normit määräytyvät luonnollisestikin tehtävän mukaan. Pienille häiriöille on siis voimassa seuraava arvio alkutiedon ja ratkaisun suhteellisille virheille: x x x K(x) δ f f. Eli jos alkutieto on annettu 0.1%:n tarkkuudella ja häiriöalttius on 100, niin pahimmassa tapauksessa tehtävän ratkaisulta voidaan odottaa vain 10%:n tarkkuus. Kyseessä on ns. suhteellinen häiriöalttius, joka on yleensä tarkoituksenmukainen. Jos x = 0 tai f = 0, voidaan vastaavasti määritellä absoluuttinen häiriöalttius korvaamalla suhteelliset virheet absoluuttisilla virheillä kaavassa (1.4). Huonosti asetetuille tehtäville on K(x) = ja tehtävät, joilla K(x) on suuri, ovat häiriöalttiita ja siten hankalia ratkaista, koska pienet parametrin f muutokset (esim. mittaus- ja pyöristysvirheet) aiheuttavat suuren muutoksen ratkaisussa x. Myös häiriöalttiiden tehtävien tapauksessa on syytä yrittää löytää tehtävälle vaihtoehtoisia formulointeja. Esimerkki 1.3. Häiriöalttiuden K(x) tarkka arvo on käytännössä useimmiten mahdotonta laskea ja yleensä riittääkin tietää vain K(x):n suuruusluokka. Olkoon tehtävänä ratkaista yhtälö x e f = 0, missä f on tehtävän alkutieto. Usein riittää arvioida häiriöalttiutta muodostamalla x:n ensimmäisen kertaluvun Taylorin kehitelmä f :n suhteen δx ( x/ f ) δ f. Tällöin K(x) δx x δ f f x f f = e f f x e f = f. (1.5) Jos nyt f = 10 ja f = 9.9, niin häirityn alkutiedon virhe on prosentin luokkaa. Kaavan (1.5) mukainen arvio x:n virheelle olisi siten noin 10% todellisen virheen ollessa 9.5%.
1.3. NUMEERINEN STABIILISUUS 7 1.3 Numeerinen stabiilisuus Tarkastellaan tehtävää x = f + 1 f, f 0. (1.6) 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 kuitenkin paljon suurempi kuin mitä tehtävän häiriöalttius ennustaa. Yhtälö (1.6) voidaan kirjoittaa yhtäpitävässä muodossa x = 1 f + 1 + f. (1.7) Jos edellä lasketut suureen x arvot lasketaan tätä lauseketta käyttäen yksinkertaisen tarkkuuden liukulukuartimetiikalla, saadaan täysi tarkkuus. Vaikka lausekkeet (1.6) ja (1.7) ovat matemaattisesti yhtäpitäviä, ne generoivat kaksi erilaista äärellisestä määrästä peruslaskutoimituksia koostuvaa numeerista algoritmia x:n laskemiseksi. Näistä ensimmäinen on käytännössä käyttökelvoton ja sen ominaisuutta tuottaa odotettua epätarkempi tulos sanotaan numeeriseksi epästabiilisuudeksi. Ilmiötä voidaan kuvailla abstraktilla tasolla seuraavasti. Kun sovelletaan jotakin numeerista algoritmia yleisen tehtävän (1.1) ratkaisemiseen, tuotetaan jono alkuperäistä tehtävää approksimoivia tehtäviä Φ n (x n, f ) = 0, (1.8) joiden ratkaisujen jonolle {x n } pätee x n x, kun n. Tehtävän (1.6) tapauksessa n voi olla esimerkiksi liukulukuesityksen bittien lukumäärä. Olkoon sitten x n vastaavan häirityn tehtävän Φ n ( x n, f ) = 0 (1.9) ratkaisu. Laskettu numeerinen ratkaisu x n ei saisi olla oleellisesti herkempi alkutiedon f häiriölle kuin alkuperäisen tehtävän ratkaisu x. Virheiden x n x n ja x x tulisi siis olla samaa kertaluokkaa kaikilla n. Määritelmä 1.2. Numeerinen algoritmi on stabiili, jos yhtälön (1.8) ratkaisun riippuvuus lähtötiedon häiriöstä ei ole suurempi kuin alkuperäisen tehtävän (1.1) ratkaisun. Numeerinen stabiilisuus on tärkein numeeriselle menetelmälle asetettavista vaatimuksista. Ilman sitä tulosten luotettavuus on kyseenalaista. Vain stabiileja numeerisia menetelmiä voidaan asettaa paremmuusjärjestykseen tehokkuuden perusteella.
8 LUKU 1. NUMEERISEN MATEMATIIKAN PERUSKÄSITTEITÄ Esimerkki 1.4. Yleisin numeerisen epästabiilisuuden lähde on melkein yhtä suurten lukujen vähentäminen toisistaan yhdessä tai useammassa numeerisen algoritmin askeleessa. Tämä ei ole suinkaan mikään tietokoneen tai liukulukuaritmetiikan oma ongelma. Vähennyslaskun ominaisuus on, että siinä voi tapahtua joskus kohtalokastakin informaation menetystä. Tarkastellaan esimerkkinä melkein yhtä suurien lukujen x = 1731.73 ja y = 1719.28 erotusta x y = 12.45. Olkoot x = 1730 ja ỹ = 1720 käytetyt likiarvot. Vaikka x ja ỹ on annettu 0.1 %:n tarkkuudella, on erotuksen x ỹ = 10 suhteellinen virhe noin 20 %. Tämä pätee yleisestikin: jos erotus on pieni vähennettäviin verrattuna, niin erotuksen suhteellinen virhe voi kasvaa suureksi. Esimerkki 1.5. Eksponenttifunktion arvo voidaan laskea pisteessä x = 15 potenssisarjasta e 15 ( 15) = i = 1 15 + 112 1 i=0 i! 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 +... Esimerkki 1.6. Numeeristen menetelmien tarpeellisuudesta esitetään usein seuraavantapainen väittämä: Jos eksakti analyyttinen lauseke on käytettävissä, on se aina hyödyllisempi kuin numeerisella menetelmällä laskettu likiarvo. Tarkastellaan väittämää integraalin x n = 1 0 t n (t + 5) 1 dt, n 0 tapauksessa. Helposti nähdään, että integraali voidaan laskea mielivaltaiselle n rekursiokaavasta x 0 = ln 6 5, x n = n 1 5x n 1, n 1. (1.10) Alla on esitetty x n muutamilla n laskettuna rekursiokaavasta (1.10) yksinkertaisella tarkkuudella sekä numeerista integrointia (puolisuunnikassääntö, h = 1/100) käyttäen. n rekursio num. integr. tarkka 0 0.18232 0.18232 0.18232 3 0.04313 0.04314 0.04314 5 0.02835 0.02848 0.02847 7 0.01839 0.02124 0.02123 9-0.05413 0.01694 0.01693 Havaitaan, että rekursiokaava on numeerisena algoritmina epästabiili ja siten käyttökelvoton. Käytetty (melko karkea) numeerinen integrointikaava antaa sen sijaan täysin luotettavan tuloksen. Yleisesti voidaan todeta, että analyyttinen lauseke on hyödyllinen, mikäli tarvitaan nimenomaan analyyttistä lauseketta esimerkiksi raja-arvotarkasteluihin. Mikäli taas tarvitaan lausekkeen numeerista arvoa muutamalla kiinteällä parametrien arvolla, saattaa numeerinen menetelmä olla käyttökelpoisempi.
Luku 2 Epälineaarisen yhtälön ratkaiseminen Olkoon f : R R jatkuva funktio. Tarkastellaan yhden muuttujan yhtälön f (x) = 0, (2.1) ratkaisemista. Jos f on epälineaarinen, niin yleensä yhtälön (2.1) ratkaisun ( juuren ) x lauseketta ei tunneta suljetussa muodossa. Klassinen esimerkki tällaisesta tilanteesta on (esimerkiksi satelliitin) liikettä elliptisellä radalla kuvaava Keplerin yhtälö x esinx M = 0, missä tuntematon x on eksentrinen anomalia, vakio 0 < e < 1 on eksentrisyys ja vakio M on keskianomalia. Tällaisessa tilanteessa joudutaan käyttämään numeerisia ratkaisumenetelmiä, joissa etsitään iteratiivisesti uusia, parempia approksimaatioita yhdelle juurelle x lähtien (mielellään hyvästä) alkuarvauksesta x 0, kunnes ennaltamäärätty lopetuskriteeri toteutuu. On huomattava, että tehtävällä (2.1) ei välttämättä ole ratkaisua, ja toisaalta ratkaisuja voi olla useita, jopa ääretön määrä. Siksi tehtävä on hyvä hahmottaa aluksi geometrisesti, jos suinkin mahdollista. Suoraviivainen tapa ratkaista yhtälö (2.1) likimääräisesti on etsiä väli, jolla funktio f vaihtaa merkkiään, ja pienentää sen jälkeen ko. väliä haarukoimalla. 2.1 Puolitushaku Olkoon välillä [a,b] voimassa f (a) f (b) < 0. Tällöin on olemassa piste x ]a,b[ siten, että f (x ) = 0. Olkoon piste c = 1 2 (a + b) välin keskipiste. Testataan nyt, onko voimassa f (a) f (c) < 0. Jos on, niin x [a,c] ja asetetaan b := c. Jos f (a) f (c) > 0, niin x [c,b] ja asetetaan a := c. Jos f (a) f (c) = 0, niin luonnollisestikin f (c) = 0 ja tarkka ratkaisu x = c on löytynyt. Menettelyä toistetaan niin kauan kunnes väli [a, b] on kutistunut riittävän pieneksi (tai tarkka ratkaisu on löytynyt). Edellinen menettely voidaan esittää myös algoritmin muodossa: Algoritmi 2.1. bisect( a, b, toler, itmax, c ) u := f (a) 9
10 LUKU 2. EPÄLINEAARISEN YHTÄLÖN RATKAISEMINEN 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 Esimerkki 2.1. Sovelletaan puolitushakua Keplerin yhtälöön x 2 1 sinx 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 Puolitushaun toimivuus vaikuttaa ilmeiseltä. Matemaattinen todistuskaan ei ole mutkikas: Lause 2.1. Olkoon [a 0,b 0 ], [a 1,b 1 ],...,[a n,b n ] puolitusmenetelmän 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 ). (2.2) Todistus. Välittömästi havaitaan, että välien päätepisteillä on seuraavat ominaisuudet: a 0 a 1 a 2... b 0 b 0 b 1 b 2... a 0 b n+1 a n+1 = 1 2 (b n a n ). (2.3)
2.2. ITERATIIVISTEN ALGORITMIEN KONVERGENSSIANALYYSISTÄ 11 Koska jono {a n } on ei-vähenevä ja ylhäältä rajoitettu, niin se suppenee. Samalla tavoin {b n } suppenee. Soveltamalla yhtälöä (2.3) rekursiivisesti, saadaan b n a n = 2 n (b 0 a 0 ). Täten lim b n lim a n = lim 2 n (b 0 a 0 ) = 0. n n n Asettamalla r := lima n = limb n ja suorittamalla rajankäynti epäyhtälössä f (a n ) f (b n ) 0, saadaan [ f (r)] 2 0 eli f (r) = 0. Jos menetelmä pysäytetään askeleella n, niin välin [a n,b n ] keskipiste c n = 1 2 (a n + b n ) on luonnollinen valinta juuren x likiarvoksi. Tällöin x c n 1 2 (b n a n ) = 2 (n+1) (b 0 a 0 ). 2.2 Iteratiivisten algoritmien konvergenssianalyysistä Jatkossa tullaan esittelemään muitakin iteratiivisia algoritmeja epälineaarisen yhtälön ratkaisemiseksi. Jotta menetelmä ylipäätään olisi käyttökelpoinen, täytyy sen olla suppeneva ja numeerisesti stabiili. Tämän lisäksi menetelmän tulisi olla tehokas. Suoraviivaisin tehokkuuden mittari on tarvittavien iteraatiokierrosten lukumäärä ja funktion arvojen laskujen lukumäärä per iteraatio. Käytännössä tarvittavien iteraatiokierrosten määrän laskeminen etukäteen on yleensä mahdotonta. Siksi tyydytäänkin asymptoottisiin arvioihin. 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 = C, (2.4) p niin p:tä sanotaan jonon {x n } konvergenssin kertaluvuksi ja C:tä sanotaan asymptoottiseksi virhevakioksi. Raja-arvo (2.4) tarkoittaa käytännössä sitä, että x n+1 x C x n x p, kun n on riittävän suuri. Konvergenssinopeuden yhteydessä käytetään yleisesti seuraavia nimityksiä: 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, jne. Esimerkki 2.2. Puolitushaussa kullakin iteraatiolla välin keskipisteiden c n etäisyys juuresta pahimmassa tapauksessa on 2 (n+1) (b 0 a 0 ). Täten 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. 2.3 Kiintopistemenetelmä Merkkiehtoon f (a) f (b) < 0 perustuvat menetelmät ovat yksinkertaisia toteuttaa ja niiden konvergenssikin on taattu. Merkkiehdon toteuttavan välin [a, b] löytäminen on triviaalia
12 LUKU 2. EPÄLINEAARISEN YHTÄLÖN RATKAISEMINEN (esim. kuva piirtämällä), jos funktion f arvon laskeminen ei ole kovin työlästä. Tehokkaammat perusmenetelmät eivät kuitenkaan käytä merkkiehtoa hyväksi. Lisäksi merkkiehtoon perustuvat menetelmät eivät yleisty useamman yhtälön muodostaman yhtälöryhmän tapaukseen. Luovutaan seuraavassa merkkiehdosta ja tarkastellaan menetelmää yleisen epälineaarisen yhtälön juuren etsimiseksi. Kiintopistemenetelmässä ideana on korvata alkuperäinen yhtälö f (x) = 0 yhtäpitävällä yhtälöllä x g(x) = 0 ja soveltaa jälkimmäiseen yhtälöön kiintopisteiteraatiota x n+1 = g(x n ). Riittävä ehto sille, että iteraatio on suppeneva on, että funktio g : [a,b] [a,b] on kutistava, s.o. g(x) g(y) γ x y, jollekin vakiolle 0 < γ < 1. Lause 2.2. 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 cosx = 0 voidaan ratkaista iteraatiolla x n+1 = 1 2 cosx 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. 2.4 Newtonin menetelmä Jos funktio f : R R on differentioituva, niin kiintopisteiteraatiossa iteraatiofunktioksi voidaan valita g(x) = x f (x)/ f (x). Saatua menetelmää sanotaan Newtonin menetelmäksi (joskus myös Newtonin ja Raphsonin menetelmäksi). Kiintopisteiteraation sijaan esitetään kuitenkin seuraavassa menetelmän johtaminen geometrisen tarkastelun kautta. f (x) x x n+1 x n Kuva 2.1: Newtonin menetelmä Olkoon annettu alkuarvaus x 0 läheltä juurta x. Uusi approksimaatio juurelle saadaan korvaamalla käyrä y = f (x) pisteeseen (x 0, f (x 0 )) asetetulla tangentilla (kuva 2.1) ja ottamalla uudeksi juuren approksimaatioksi tangentin ja x-akselin leikkauspiste. Toistamalla tämä saadaan iteraatiokaava x n+1 = x n f (x n) f (x n ). (2.5) Newtonin menetelmä lienee tunnetuin numeerinen juurenhakumenetelmä, ja se voidaan yleistää suoraviivaisesti myös epälineaarisille yhtälöryhmille. Newtonin menetelmälle pätee seuraava konvergenssitulos:
2.4. NEWTONIN MENETELMÄ 13 Lause 2.3. Olkoot funktio f kaksi kertaa jatkuvasti derivoituva välillä I ε := [x ε,x + ε], ε > 0 ja f (x ) = 0 sekä f (x) 0 x I ε. Silloin, jos alkuarvaus x 0 on valittu riittävän läheltä juurta x, niin iteraation (2.5) määräämälle jonolle {x n } on voimassa x n x, n. Lisäksi x x n+1 lim n (x x n ) 2 = f (x ) 2 f (x ), (2.6) eli konvergenssin kertaluku on p = 2. Todistus. Muodostamalla funktiolle f Taylorin kehitelmä pisteessä x saadaan 0 = f (x ) = f (x n ) + f (x n )(x x n ) + 1 2 f (ξ n )(x x n ) 2, missä min{x,x n } < ξ n < max{x,x n }. Sijoittamalla tämä iteraatioon (2.5) saadaan x x n+1 = x x n + f (x n) f (x n ) = (x x n ) 2 f (ξ n ) 2 f (x n ). (2.7) Koska funktio 1 2 f / f on jatkuva välillä I ε, on olemassa vakio M > 0 siten, että Kun valitaan n = 0, niin (2.7):n mukaan on eli 1 2 f (x)/ f (x) M x I ε. x x 1 M x x 0 2, (2.8) M x x 1 (M x x 0 ) 2. Jos nyt valitaan alkuarvaus x 0 siten, että x x 0 ε ja M x x 0 < 1, niin M x x 1 < 1 ja edelleen M x x 1 M x x 0 M x x 0 M x x 0 Mε, eli x x 1 x x 0. Induktiolla saadaan, että x x n ε ja M x x n < 1. Kuten (2.8) saadaan yleisellä indeksillä n ja edelleen induktiolla x x n+1 M x x n 2 M x x n+1 (M x x n ) 2, M x x n (M x x 0 ) 2n. (2.9) Koska M x x 0 < 1, niin epäyhtälöstä (2.9) seuraa, että x n x, kun n. Yhtälöstä (2.7) saadaan x x n+1 (x x n ) 2 = f (ξ n ) 2 f (x n ). (2.10) Koska myös ξ n x, niin yhtälöstä (2.10) seuraa yhtälö (2.6).
14 LUKU 2. EPÄLINEAARISEN YHTÄLÖN RATKAISEMINEN Newtonin menetelmä on kvadraattisen konvergenssin ansiosta erittäin tehokas. Menetelmä ei ole kuitenkaan täysin yleiskäyttöinen kolmesta syystä. Ensiksikin alkuarvauksen valinta siten, että menetelmä varmasti konvergoi vaatisi lauseen 2.3 todistuksessa esiintyvän (hankalasti määritettävän) vakion M tuntemisen. Toiseksi termi f (x n )/ f (x n ) voi aiheuttaa hankaluuksia laskennassa, koska nimittäjä voi mennä pieneksi. Kolmas ja aikaisemmin ehkä liikaa korostettu ongelma on se, että funktion f arvojen lisäksi tarvitaan myös derivaatan f arvoja. Jos funktiolla f on yksinkertainen analyyttinen lauseke, on derivointi käsin tai symbolisen laskennan ohjelmistolla mekaaninen toimitus. Jos funktion f lauseketta ei ole annettu suljetussa muodossa, voidaan käyttää hyväksi tietokoneohjelmien automaattista derivointia. Newtonin menetelmä saadaan yleiskäyttöisemmäksi yhdistämällä se jonkin globaalisti konvergoivan algoritmin (esim. puolitushaku) kanssa. Yksinkertaisella, merkkiehtoa hyödyntävällä menetelmällä taataan konvergenssi kohtuulliseen likiarvoon, ja sen jälkeen siirrytään Newtonin menetelmään lopullisen likiarvon laskemiseksi. Jos derivaatan laskeminen halutaan kuitenkin syystä tai toisesta välttää, voidaan käyttää sekanttimenetelmää, joka saadaan Newtonin menetelmästä korvaamalla siinä esiintyvä derivaatta erotusosamäärällä. Geometrisesti menetelmä voidaan tulkita siten, että käyrää y = f (x) approksimoidaan tangentin sijaan sekantilla. Olkoon juurelle annettu kaksi erisuurta alkuarvausta x 0 ja x 1. Uusia approksimaatiota juurelle saadaan iteraatiolla x n+1 = x n f (x n ) x n x n 1, n 1. (2.11) f (x n ) f (x n 1 ) Myös sekanttimenetelmä on varsin tehokas menetelmä, sillä konvergenssin kertaluvuksi voidaan osoittaa p 1.62. 2.5 Ohjelmointitekniikasta Epälineaarisen yhtälön numeerinen ratkaisumenetelmä on yksinkertaisimmillaan pelkkä iteraatiokaava, kuten (2.5). Ratkaisualgoritmi puolestaan sisältää iteraatiokaavan lisäksi tarvittavan toistorakenteen ja lopetuskriteerin. Tietokonetoteutus, eli epälineaarisen yhtälön ratkaiseva (ali)ohjelma sisältää edellisten lisäksi vielä käyttöliittymän (parametrilistan) ja mahdollisten virhetilanteiden hallintalogiikan. Epälineaarisen yhtälön ja muidenkin numeerisen matematiikan ongelmien ratkaisemiseen tarkoitetuilla ohjelmilla odotetaan ideaalitilanteessa olevan seuraavat ominaisuudet: Luotettavuus: Ohjelma toimii aina oikein helppojen tehtävien tapauksessa. Robustisuus: Ohjelma toimii oikein suurelle joukolle vaikeita tehtäviä. Mahdollinen epäonnistuminen hoidetaan hallitusti ja käyttäjää informoiden. Tarkkuus: Ohjelma palauttaa tuloksen tehtävän ja syöttötietojen mahdollistamalla tarkkuudella, mahdollisesti myös tarkkuusarvion. Tehokkuus: Käytetyt algoritmit on poimittu tehokkaimpien tunnettujen algoritmien joukosta. Siirrettävyys ja ylläpidettävyys: Ohjelma on kirjoitettu yleisesti käytössä olevalla ohjelmointikielellä nykyaikaista, hyvää ohjelmointitapaa noudattaen.
2.5. OHJELMOINTITEKNIIKASTA 15 Käytettävyys: Ohjelma on hyvin dokumentoitu, sillä on selkeä käyttöliittymä ja sillä voidaan ratkaista suuri joukko käytännön tehtäviä. Käytännössä em. vaatimukset ovat osin ristiriitaisia eivätkä kaikki niistä ole tarpeellisia joka tilanteessa. Jos esimerkiksi tietyn spesifin epälineaarisen yhtälön ratkaisualgoritmi sisällytetään jonkin toisen numeerisen menetelmän sisään, tingitään yleensä robustisuudesta tehokuuden hyväksi. Käytetään seuraavassa Newtonin menetelmää esimerkkinä numeerisen menetelmän implementoinnista 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 ) 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 Mikäli error=0, niin yhtälön likiratkaisu on löytynyt lopetuskriteerin mukaisella tarkkuudella. Jos error=1, iteraatiokierrosten maksimimäärä saavutettiin. Tehtävällä ei ehkä ole ratkaisua, alkuarvaus ei ole riittävän hyvä, tarkkuusparametri ε on liian pieni käytettyyn laskentatarkkuuteen verrattuna tai itmax on liian pieni. Jos iteraatiokaavassa esiintyvä nimittäjä (derivaatan arvo) on mennyt itseisarvoltaan parametria δ pienemmäksi, palautetaan error=2. Iteraation lopetuskriteeri ansaitsee lähemmän tarkastelun. Lopetuskriteeriä valittaessa tulevat esimerkiksi seuraavat ehdot kyseeseen: f (x n ) ε (funktion f itseisarvo pieni), x n x n 1 ε (likiratkaisun absoluuttinen muutos pieni) ja x n x n 1 ε x n (likiratkaisun suhteellinen muutos pieni). Tässä ε > 0 on käyttäjän antama tarkkuusparametri.
16 LUKU 2. EPÄLINEAARISEN YHTÄLÖN RATKAISEMINEN Mikään edellisistä kriteereistä ei kuitenkaan yksinään sovellu kaikentyyppisille menetelmille ja yhtälöille. Ehdon f (x n ) ε käyttö yksinään ei takaa mitään etäisyydestä x x n (kuva 2.2). Toisaalta ehto x n x n 1 ε yksinään tulee kyseeseen vain nopeasti suppenevien iteraatioiden tapauksessa. Esimerkiksi Newtonin menetelmälle on voimassa x n+1 x n = f (x n) f (x n ) f (x n) f (ξ n ) = x x n. Siis epäyhtälöstä x n+1 x n ε = seuraa epäyhtälö x x n ε, jos x n on niin lähellä x :aa, että pätee f (x n ) f (ξ n ). Sen sijaan hitaasti suppenevan iteraation tapauksessa x n+1 x n voi tulla pieneksi, vaikka ei olla lähelläkään juurta. Yleiskäyttöisessä aliohjelmassa kannattaa siksi vaatia vähintään kahden lopetuskriteerin voimassaoloa ennenkuin iteraatio lopetetaan. Algoritmia 2.2 voidaan pitää Newtonin menetelmän minimitoteutuksena. Kaupallisten aliohjelmakirjastojen mukaista käyttäjäystävällisyyttä tavoitellessa täytyisi käyttäjällä olla mahdollisuus jättää parametrit ε ja δ antamatta, jolloin käytetään sopivia oletusarvoja (esim. ε = ε R ). Lisäksi pitäisi varautua näppäily virheisiin (esim. itmax<0). f (x) x x n x f (x) x x x n x x n f (x n ) x x n f (x n ) Kuva 2.2: Eri lopetuskriteerioiden soveltuvuus 2.6 Polynomin reaaliset juuret Mikä tahansa edellä esitetyistä menetelmistä sopii periaatteessa polynomiyhtälöille, varsinkin jos halutaan vain tietty juuri, jonka alkuarvaus on annettu. Kuitenkin algebran peruslauseen mukaan polynomilla p(x) = a 0 + a 1 x + a 2 x 2 + + a n x n, a n 0, (2.12) on täsmälleen n reaalista tai kompleksista juurta, jos juurien kertaluku otetaan huomioon. Tarkastellaan aluksi, kuinka lasketaan polynomin arvo pisteessä x tehokkaasti ns. Hornerin menetelmällä. Polynomi (2.12) voidaan esittää seuraavassa muodossa: p(x) = a 0 + x(a 1 + x(a 2 + + x(a n 1 + a n x)...)). (2.13)
2.6. POLYNOMIN REAALISET JUURET 17 Jos polynomi kehitetään tästä muodosta, tarvitaan n yhteenlaskua ja n kertolaskua. Muoto (2.12) vaatii puolestaan n yhteenlaskua ja 2n 1 kertolaskua. Hornerin menetelmä polynomin p arvon laskemiseksi pisteessä voidaan esittää rekursiona { bn = a n, (2.14) b k = a k + zb k+1, k = n 1,n 2,...,0, jolloin p(z) = b 0. Polynomin arvon b 0 lisäksi Hornerin menetelmän tuottamat luvut b 1,...,b n ovat hyödyllisiä esim. juurenhaussa. Tarkastellaan b i -kertoimista polynomia Silloin Siis q(x) = b 1 + b 2 x + + b n x n 1. (2.15) b 0 + (x z)q(x) = b 0 + (x z)(b 1 + b 2 x + + b n x n 1 ) = (b 0 b 1 z) + (b 1 b 2 z)x + + (b n 1 b n z)x n 1 + b n x n = a 0 + a 1 x + + a n x n. p(x) = b 0 + (x z)q(x), (2.16) eli q on osamäärä ja b 0 jakojäännös, kun polynomi p jaetaan binomilla (x z). Jos z on polynomin p juuri, niin b 0 = 0 ja p(x) = (x z)q(x) ja polynomin p muita juuria voidaan etsiä nyt polynomista q, joka on alempaa astelukua kuin polynomi p. Sovelletaan nyt Newtonin menetelmää polynomin juurien laskemiseen. Sitä varten tarvitaan myös derivaatan p (x) arvoja. Kaavasta (2.16) saadaan p (x) = (x z)q (x) + q(x) ja p (z) = q(z). Siis derivaatan p arvo saadaan laskemalla polynomin q(z) arvo. Myös tämän polynomin arvot lasketaan Hornerin menetelmällä seuraavasti: { cn = b n, (2.17) c k = b k + zc k+1, k = n 1,n 2,...,1. Seuraavalla algoritmilla saadaan approksimaatio yhdelle polynomin reaaliselle juurelle: Algoritmi 2.3. poly_newton( {a 0,...,a n }, n, x 0, ε, δ, itmax, x, {b 1,...,b n }, error) do iter=1,...,itmax z := x 0, b n := a n, c := a n do k = n 1,n 2,...,1 b k := a k + z b k+1 c := b k + z c end do if c δ then error := 2 return
18 LUKU 2. EPÄLINEAARISEN YHTÄLÖN RATKAISEMINEN end if b 0 := a 0 + z b 1 x 1 := x 0 b 0 /c if x 1 x 0 ε x 1 and b 0 ε then error := 0 x := x 1 return end if x 0 := x 1 end do error := 1 x := x 1 Kun yksi juuri on löydetty, algoritmia voidaan soveltaa astetta alempaan polynomiin, jonka kertoimet ovat b-vektorissa. Algoritmissa ei tallenneta c:n arvoja, koska niitä ei jatkossa tarvita. Jos yo. algoritmia sovelletaan peräkkäin monen juuren etsimiseen, on muistettava, että jokaisessa vaiheessa algoritmin antamat b i -kertoimet eivät ole tarkkoja vaan likiarvoja. Tämä voi häiritä ratkaisevasti jäljellä olevien juurten tarkkuutta. Kannattaakin menetellä siten, että kun kaikki juuret on laskettu, sovelletaan iteraatiota vielä alkuperäiseen polynomiin käyttäen edellä laskettuja juuria alkuarvauksina. 2.7 Kompleksisten juurten laskemisesta Kuten tunnettua, ei reaalikertoimisellakaan polynomilla ole välttämättä reaalijuuria. Polynomin kompleksisia juuria voidaan laskea Newtonin menetelmällä, jos käytetään kompleksiaritmetiikkaa ja alkuarvaus on aidosti kompleksinen. Esimerkiksi yhtälön x 2 + 2 = 0 juuren likiarvoksi saadaan alkuarvauksesta x 0 = i := 1 lähtien x 0 = i, x 1 = 1.5i, x 2 1.41667i, x 3 1.4142i,... Toinen yksinkertainen menetelmä kompleksisten juurten laskemiseen on Müllerin menetelmä, joka on sekanttimenetelmän yleistys. Menetelmä tarvitsee kolme alkuarvausta, koska sekantin sijaan funktiota f approksimoidaan paraabelilla. Müllerin menetelmällä saadaan kompleksiaritmetiikkaa käyttämällä mielivaltaisen analyyttisen funktion kaikki reaaliset ja kompleksiset juuret. Lisäksi voidaan osoittaa, että menetelmä konvergoi alkuarvauksesta riippumatta ja konvergenssinopeus on superlineaarinen. Jos merkitään f [x i,x i 1 ] := ( f (x i ) f (x i 1 ))/(x i x i 1 ) f [x i,x i 1,x i 2 ] := ( f [x i,x i 1 ] f [x i 1,x i 2 ]/(x i x i 2 ) c i := f [x i,x i 1 ] + f [x i,x i 1,x i 2 ](x i x i 1 ), niin pisteiden (x i 2, f (x i 2 )),(x i 1, f (x i 1 )),(x i, f (x i )) kautta kulkeva toisen asteen polynomi voidaan kirjoittaa muotoon p(x) = f (x i ) + (x x i )c i + f [x i,x i 1,x i 2 ](x x i ) 2. Tällöin toisen asteen yhtälön p(ξ) = 0 nollakohdat saadaan kaavasta ξ ± 2 f (x i ) =. c i ± c 2 i 4 f (x i) f [x i,x i 1,x i 2 ]
2.8. JUURENHAKUTEHTÄVÄN HÄIRIÖALTTIUDESTA 19 Valitsemalla merkki siten, että nimittäjä on itseisarvoltaan mahdollisimman suuri, saadaan juurelle uusi approksimaatio x i+1 = ξ. Mikäli laskutoimitukset suoritetaan kompleksiluvuilla, löydetään myös kompleksinen juuri. Tällöin reaalijuuren approksimaatiossa saattaa olla (pieni) imaginääriosa. Menetelmä löytää yhden juuren kerrallaan. Kun r kappaletta juuria ξ 1,...,ξ r on löydetty, sovelletaan menetelmää funktioon ϕ r (x) := f (x) (x ξ 1 )(x ξ 2 )...(x ξ r ). Tällä menettelyllä menetetään tietenkin tarkkuutta, mutta laskettuja juuria voidaan käyttää alkuarvauksina ja soveltaa koko algoritmia uudelleen alkuperäiseen funktioon f. Yleisen analyyttisen funktion, esim. f (x) = sinx 2, (kompleksisia) nollakohtia haettaessa on lisäksi muistettava, että niitä voi olla ääretön määrä. Muita pelkästään polynomiyhtälöille tarkoitettuja menetelmiä ovat esim. Laguerren menetelmä sekä Jenkinsin ja Traubin menetelmä. 2.8 Juurenhakutehtävän häiriöalttiudesta Tähän asti on oletettu funktion f : R R juuren x olevan yksinkertainen, eli f (x ) 0. Funktiolla f on kertalukua m oleva juuri x, jos f (x) = (x x ) m h(x), (2.18) missä funktio h : R R on jatkuva pisteessä x ja h(x ) 0. Kun funktion arvoja lasketaan liukulukuaritmetiikalla, on juuren ympäristössä aina epävarmuusväli [x δ,x +δ], jossa lasketun funktion arvon etumerkistä ei ole varmuutta. Tämä väli on sitä laajempi mitä korkeampi juuren kertaluku on. Esimerkki 2.4. Kuva 2.3 esittää funktion f (x) = (x 1) 6 = x 6 6x 5 + 15x 4 20x 3 + 15x 2 6x + 1 arvoja kun ne on laskettu 64 bitin liukulukuaritmetiikalla aukikehitetystä lausekkeesta. Analyyttisesti x = 1 on kuusinkertainen juuri ja muualla f (x) > 0. Havaitaan, että haettaessa numeerisesti yhtälön f (x) = 0 juurta ei saataisi pahimmassa tapauksessa kuin kahden merkitsevän numeron tarkkuus. 2e-14 1.5e-14 1e-14 5e-15 0-5e-15-1e-14 0.995 0.996 0.997 0.998 0.999 1 1.001 1.002 1.003 1.004 1.005 Kuva 2.3: Liukulukuaritmetiikalla laskettu polynomi x 6 6x 5 + 15x 4 20x 3 + 15x 2 6x + 1 Moninkertaiset juuret heikentävät yleensä iteratiivisten algoritmien konvergenssiominaisuuksia tai estävät niiden käytön kokonaan (vrt. puolitusmenetelmä ja eo. polynomi). Esimerkiksi Newtonin menetelmän konvergenssi on m-kertaiselle juurelle lineaarista asymptoottisen virhevakion ollessa C = (m 1)/m.
20 LUKU 2. EPÄLINEAARISEN YHTÄLÖN RATKAISEMINEN Polynomin juuret ovat polynomin kertoimien jatkuvia funktioita, joten juurenhaku on hyvin asetettu tehtävä. Tehtävän häiriöalttius voi olla kuitenkin suuri ja siten tehtävän numeerinen ratkaiseminen hankalaa. Suuri häiriöalttius ei liity välttämättä monikertaisiin juuriin. Olkoon x polynomin p yksinkertainen reaalijuuri, s.o. p(x ) = 0. Tarkastellaan häirittyä polynomia p ε (x) := p(x) + εq(x), missä ε > 0 on häiriöparametri. Olkoon x (ε) häirityn polynomin juuri, s.o. p(x (ε)) + εq(x (ε)) = 0. (2.19) Oletetaan, että parametri ε on niin pieni, että x (ε) on myös yksinkertainen reaalijuuri. Derivoimalla yhtälö (2.19) puolittain parametrin ε suhteen saadaan: p (x (ε))x (ε) + q(x (ε)) + εq (x (ε))x (ε) = 0, (2.20) ja edelleen x q(x (ε)) (ε) = p (x (ε)) + εq (x (ε)). (2.21) Jos parametri ε on riittävän pieni, on voimassa kehitelmä x (ε) = x + x (0)ε + O(ε 2 ). Sijoittamalla tähän edellä laskettu derivaatan x (ε) lauseke, saadaan häirityn polynomin juurelle arvio x (ε) x ε q(x ) p (x ). Esimerkki 2.5. Kuuluisa esimerkki (Wilkinson) häiriöalttiista polynomista on p(x) = 2432902008176640000 8752948036761600000x + 13803759753640704000x 2 12870931245150988800x 3 + 8037811822645051776x 4 3599979517947607200x 5 +1206647803780373360x 6 311333643161390640x 7 + 63030812099294896x 8 10142299865511450x 9 + 1307535010540395x 10 135585182899530x 11 +11310276995381x 12 756111184500x 13 + 40171771630x 14 1672280820x 15 +53327946x 16 1256850x 17 + 20615x 18 210x 19 + x 20 = 20 i=1 (x i). Vaikka polynomin juuret ovat selvästi separoituvat, niin esimerkiksi korkeimman potenssin kertoimen häiriö q(x) = x 20 aiheuttaa juureen x = 20 häiriön x x (ε) ε q(20) p (20) = ε2020 19! 109 ε. Huomautus 2.1. Polynomin p(λ) = a 0 + a 1 λ +... + a n 1 λ n 1 + a n λ n juuret ovat ominaisarvotehtävän Cx = λx, ominaisarvot, missä 0 0... 0 a 0 /a n 1 0... 0 a 1 /a n C = 0 1... 0 a 2 /a n........ 0 0... 1 a n 1 /a n Yllättävää kyllä, pelkästään polynomiyhtälöiden ratkaisemiseen kehitetyt menetelmät eivät ole optimaalisia menetelmiä tarkkuuden suhteen. Mikäli käytettävissä on kompleksisten ominaisarvojen laskemiseen tarkoitettu algoritmi, kannattaa yleensä käyttää sitä polynomin juurten laskemiseen. Sen sijaan matriisin ominaisarvoja ei juuri koskaan kannata laskea polynomien juurten laskemiseen tarkoitetuilla algoritmeilla.
Luku 3 Yhtälöryhmien ratkaisemisesta Lineaarisen yhtälöryhmän ratkaiseminen on keskeisimpiä tehtäviä numeriikassa. Numeeriset sääennustukset, rakenteiden lujuusanalyysi, kemianteollisuuden prosessien simulointi, jne. johtavat viime kädessä suuren lineaarisen yhtälöryhmän ratkaisemiseen. Lineaarinen yhtälöryhmä voidaan ratkaista äärellisellä määrällä laskutoimituksia, mutta se ei tarkoita sitä, että tehtävä olisi yleisesti ottaen triviaali. Uusien, tehokkaampien ratkaisumenetelmien kehittäminen on edelleen yksi numeerisen matematiikan keskeisimpiä tutkimusaiheita. Tässä esityksessä rajoitutaan yhtälöryhmiin, joissa on yhtä monta yhtälöä kuin tuntematonta. Lineaaristen yhtälöryhmien lisäksi tarkastellaan epälineaarisen yhtälöryhmän ratkaisemista linearisoinnilla. 3.1 Lineaarinen yhtälöryhmä Esimerkki 3.1. Tarkastellaan kuvan 3.1 mukaista ristikkorakennetta. Rakenne koostuu 13 sauvasta, jotka on liitetty toisiinsa 8 nivelen avulla. Niveliin nro. 2, 5 ja 6 kohdistuu 10, 15 ja 20 kn pystysuorat ulkoiset voimat. 3 4 4 8 7 1 3 5 7 11 12 9 1 2 6 8 2 6 5 10 13 10 15 20 Kuva 3.1: Ristikkorakenne Jotta ristikko olisi tasapainossa, pitää jokaisessa nivelessä vaaka- ja pystysuorien voimakomponenttien summan olla nolla. Sauvoihin kohdistuvat aksiaaliset voimat f i, i = 1,..., 13 voidaan siten määrätä asettamalla kuhunkin niveleen vaikuttavat vaaka- ja pystyvoimien summat nolliksi. Koska niveliä on 8, tulee yhtälöiden lukumääräksi 16. Jotta 21
22 LUKU 3. YHTÄLÖRYHMIEN RATKAISEMISESTA yhtälöitä olisi yhtä monta kuin sauvoja, oletetaan nivelessä 1 vaaka- ja pystysuorat siirtymät estetyiksi sekä nivelessä 8 pystysuorat siirtymät estetyiksi. Jos merkitään α := 2/2, niin voimat saadaan laskettua yhtälöistä nivel 2: f 2 = f 6, f 3 = 10 nivel 3: α f 1 = f 4 + α f 5, α f 1 + f 3 + α f 5 = 0 nivel 4: f 4 = f 8, f 7 = 0 nivel 5: α f 5 + f 6 = α f 9 + f 10, α f 5 + f 7 + α f 9 = 15 nivel 6: f 10 = f 13, f 11 = 20 nivel 7: f 8 + α f 9 = α f 12, α f 9 + f 11 + α f 12 = 0 nivel 8: f 13 + α f 12 = 0. Siirtämällä tuntemattomat voimat yhtälöiden vasemmalle puolelle ja tunnetut oikealle puolelle, saadaan yhtälöryhmä muotoon f 2 f 6 = 0 f 3 = 10 α f 1 f 4 α f 5 = 0 α f 1 + f 3 + α f 5 = 0 f 4 f 8 = 0 f 7 = 0 α f 5 + f 6 α f 9 f 10 = 0 α f 5 + f 7 + α f 9 = 15 f 10 f 13 = 0 f 11 = 20 f 8 + α f 9 α f 12 = 0 α f 9 + f 11 + α f 12 = 0 f 13 + α f 12 = 0. Yhtälöryhmällä on kaksi ominaisuutta, jotka ovat tyypillisiä mm. rakenteiden mekaniikan simulointitehtävissä esiintuleville yhtälöryhmille. Ensinnäkin, vaikka malli on erittäin yksinkertainen, niin yhtälöryhmä on melko suuri. Toiseksi yhtälöryhmä on harva, eli kussakin yhtälössä esiintyy vain muutama tuntematon. Yleinen n tuntematonta ja n yhtälöä sisältävä lineaarinen yhtälöryhmä on muotoa a 11 x 1 + a 12 x 2 +... + a 1n x n = b 1 a 21 x 1 + a 22 x 2 + + a 2n x n = b 2 (3.1). a n1 x 1 + a n2 x 2 +... + a nn x n = b n, missä kertoimet (a i j ) n i, j=1, tuntemattomat (x i) n i=1 sekä oikean puolen alkiot (b i) n i=1 ovat reaalilukuja. Yhtälöryhmä (3.1) voidaan kirjoittaa lyhyesti matriisimuodossa missä a 11 a 12... a 1n x 1 a 21 a 22... a 2n A =......, x = x 2. a n1 a n2... a nn x n Ax = b, (3.2) b 1 b 2 ja b =.. b n
3.2. GAUSSIN ELIMINOINTIMENETELMÄ 23 3.2 Gaussin eliminointimenetelmä Eräät lineaarisen yhtälöryhmän erikoistapaukset ovat helppoja ratkaista. Mikäli A on alakolmiomatriisi, niin yhtälöryhmä on muotoa a 11 0... 0 x 1 b 1 a 21 a 22... 0 x 2....... = b 2 (3.3). a n1 a n2... a nn x n b n ja sen ratkaisu saadaan (edellyttäen, että a ii 0, i = 1,...,n) etenevillä sijoituksilla: x i = ( i 1 b i j=1 a i j x j )/a ii, i = 1,2,...,n. (3.4) Vastaavasti, jos A on yläkolmiomatriisi, niin yhtälöryhmä on muotoa a 11 a 12... a 1n x 1 b 1 0 a 22... a 2n x 2....... = b 2. 0 0... a nn x n b n (3.5) ja sen ratkaisu saadaan (edellyttäen, että a ii 0, i = 1,...,n) takenevilla sijoituksilla: x i = ( n b i a i j x j )/a ii, i = n,n 1,...,1. (3.6) j=i+1 Tarkastellaan seuraavaksi, kuinka yleinen lineaarinen yhtälöryhmä saadaan ekvivalenttiin muotoon (3.5) äärellisellä määrällä seuraavia alkeisoperaatioita: kerrotaan jokin yhtälö nollasta eroavalla vakiolla, lisätään johonkin yhtälöön joku toinen yhtälö vakiolla kerrottuna vaihdetaan kaksi yhtälöä keskenään. Sovelletaan ns. Gaussin eliminointimenetelmää yhtälöryhmään 2x 1 + x 2 + x 3 = 7 4x 1 + 4x 2 + 3x 3 = 21 6x 1 + 7x 2 + 4x 3 = 32. Kerrotaan esimmäinen yhtälö 2:lla ja lisätään tulos toiseen yhtälöön. Sen jälkeen kerrotaan ensimmäinen yhtälö 3:lla ja lisätään tulos kolmanteen yhtälöön. Tällöin yhtälöryhmä saa muodon 2x 1 + x 2 + x 3 = 7 2x 2 + x 3 = 7 4x 2 + x 3 = 11.
24 LUKU 3. YHTÄLÖRYHMIEN RATKAISEMISESTA Kerrotaan nyt toinen yhtälö 2:lla ja lisätään tulos kolmanteen yhtälöön jolloin saadaan 2x 1 + x 2 + x 3 = 7 2x 2 + x 3 = 7 x 3 = 3. Yhtälöryhmä on nyt kolmiomuodossa, ja sen ratkaisu saadaan helposti takenevilla sijoituksilla. Alimmasta yhtälöstä saadaan x 3 = 3. Sijoittamalla tämä toiseen yhtälöön saadaan x 2 = 2. Sijoittamalla lopuksi ensimmäiseen yhtälöön x 2 = 2, x 3 = 3 saadaan x 1 = 1. Yleisen n n-yhtälöryhmän tapauksessa menetelmä voidaan esittää algoritmina, joka korvaa alkuperäisen yhtälöryhmän kerroinmatriisin ja oikean puolen vektorin ekvivalentin yläkolmioyhtälöryhmän vastaavilla matriisilla ja oikean puolen vektorilla: Algoritmi 3.1. Gaussin eliminointimenetelmä do k = 1,...,n 1 do i = k + 1,...,n z := a ik /a kk a ik := 0 do j = k + 1,...,n a i j := a i j z a k j end do b i := b i z b k end do end do Huomautus 3.1. Päinvastoin kuin yleisen epälineaarisen yhtälön tapauksessa, tarkka ratkaisu (jos se on olemassa) saadaan äärellisellä määrällä peruslaskutoimituksia. Algoritmin vaativuus on kuitenkin O(n 3 ), joten tarvittavien laskutoimitusten määrä kasvaa kuitenkin nopeasti tuntemattomien lukumäärän kasvaessa. Tästä syystä suuren lineaarisen yhtälöryhmän ratkaiseminen on edelleen erittäin haastava tehtävä. Ennen tietokoneita ratkaistiin yli kymmenen tuntemattoman yhtälöryhmiä äärimmäisen harvoin. Algoritmissa 3.1 on kolme sisäkkäistä silmukkaa. Indeksejä i, j ja k vastaavien dosilmukoiden järjestystä voidaan vaihtaa, jolloin periaatteessa saadaan kuusi eri variaatiota algoritmista. Silmukoiden järjestys määrää sen, missä järjestyksessä matriisialkioihin viitataan (riveittäin vai sarakkeittain). Jos matriisi on tallennettu sarakkeittain (Fortran), niin matriisialkioihin viittaaminen riveittäin voi olla erittäin tehotonta. Esitetyssä klassisessa Gaussin eliminointimenetelmässä on oikean puolen vektori b tunnettava jo suoritettaessa matriisin kolmiointia. Yleisemmin käytetty versio Gaussin eliminointimenetelmästä perustuu ns. LU-hajotelman muodostamiseen, joka johdetaan seuraavassa. Olkoon A (i) kerroinmatriisi i 1:n eliminaatioaskeleen jälkeen (A (1) := A). On helppo nähdä, että A (i+1) = M i A (i), (3.7)
3.2. GAUSSIN ELIMINOINTIMENETELMÄ 25 missä 1 0 0 0... 0 0 1 0 0... 0 0 0 1 0... 0 M i = 0 0 m i+1,i 1... 0...... 0 0 m n,i 0... 1, m ki = a(i) ki a (i) ii. Kertomalla yhtälö (3.7) vasemmalta matriisilla M 1 i saadaan A (i) = M 1 i A (i+1), josta induktiolla A = A (1) = M 1 1 M 1 2 M 1 n 1 A(n). Nyt matriisi U := A (n) on yläkolmiomatriisi konstruktionsa perusteella. Toisaalta matriisi L := M 1 1 M 1 2 M 1 n 1 on alakolmiomatriisi, jonka diagonaalialkiot ovat ykkösiä. Siis matriisille A on löydetty kolmiohajotelma A = LU, (3.8) missä L on ala- ja U yläkolmiomatriisi. Vertaamalla vastinalkioita yhtälössä (3.8) saadaan a i j = n k=1 l iku k j, mistä voidaan johtaa eksplisiittiset kaavat alakolmiomatriisin L ja yläkolmiomatriisin U nollasta eroavien alkioiden laskemiseksi: l i j = 1 u j j ( a i j i 1 u i j = a i j k=1 j 1 k=1 l ik u k j ) j < i, (3.9) l ik u k j j i. (3.10) Alkiot voidaan laskea esimerkiksi siten, että ensimmäisessä vaiheessa muodostetaan matriisin U ensimmäinen rivi ja matriisin L ensimmäinen sarake. Tämän jälkeen matriisin U toinen rivi ja matriisin L toinen sarake jne. Koska Ax = LUx = L(Ux), niin yhtälöryhmä Ax = b palautuu kahdeksi kolmiomaiseksi yhtälöryhmäksi Ly = b, (3.11) Ux = y. (3.12) Ensin ratkaistaan vektori y yhtälöstä (3.11) etenevillä sijoituksilla i 1 y i = b i j=1 l i j y j, i = 1,...,n. Tämän jälkeen ratkaistaan vektori x yhtälöstä (3.12) takenevilla sijoituksilla x i = 1 u ii ( yi n ) u i j x j, i = n,n 1,...,1. j=i+1
26 LUKU 3. YHTÄLÖRYHMIEN RATKAISEMISESTA Edellä esitetyn LU-hajotelman käytössä on kuitenkin yksi rajoitus. Vaikkakin matriisi A on kääntyvä, niin ei ole taattua, etteikö kaavassa (3.9) esiintyvä jakaja voisi olla nolla. Esimerkiksi matriisille [ ] 0 2 A = 3 0 ei voida muodostaa LU-hajotelmaa edellä esitetyllä tavalla. Lisäksi numeerisen stabiilisuuden säilyttämiseksi olisi vältettävä hyvin pienellä luvulla jakamista. Permutaatiomatriisiksi sanotaan matriisia P, jonka jokaisella rivillä ja sarakkeella on täsmälleen yksi ykkönen ja muut alkiot nollia. Jos matriisi kerrotaan vasemmalta permutaatiomatriisilla, niin rivien järjestys muuttuu. Jos taas matriisi kerrotaan oikealta permutaatiomatriisilla, niin sarakkeiden järjestys muuttuu. Huomaa, että permutaatiomatriisien tulo on myös permutaatiomatriisi. Lause 3.1. Jokaiselle kääntyvälle matriisille A on olemassa permutaatiomatriisi P siten, että matriisille PA voidaan muodostaa LU-hajotelma edellä esitetyllä tavalla. Todistus. (periaate) Tällainen permutaatio voidaan löytää käyttämällä ns. osittaistuentaa (partial pivoting): j:nnellä LU-hajotelman askeleella etsitään rivi-indeksi r siten, että j r n ja a ( j) j 1 r j k=1 l rk u k j (3.13) on mahdollisimman suuri. Tämän jälkeen matriisin A ( j) rivit r ja j vaihdetaan keskenään, eli kerrotaan matriisi A (i) permutaatiomatriisilla P i vasemmalta, ja suoritetaan LU-askel näin saadulle permutoidulle matriisille. Tällöin siis A (i+1) = M i P i A (i). Toistamalla tämä jokaisella askeleella saadaan lopulta missä ÛU on yläkolmiomatriisi. Edelleen M n 1 P n 1 M n 2 P n 2...M 1 P 1 A = A (n) =: ÛU, A = P 1 1 M 1 1...P n 1 1 M n 1 1 ÛU. Kertomalla vasemmalta matriisilla P := P n 1...P 1 saadaan PA = P n 1...P 2 M 1 1 P 1 2 M 1 2 P 1 3 M 1 3...P 1 1 n 1 M } {{ n 1 ÛU. (3.14) } =:ˆL Nyt voidaan osoittaa, että ˆL on alakolmiomatriisi, jonka diagonaalialkiot ovat ykkösiä. Siten on muodostetty matriisille PA kolmiohajotelma PA = ˆLÛU. Alkuperäinen yhtälöryhmä Ax = b on nyt ekvivalentti yhtälöryhmän PAx = ˆLÛUx = Pb kanssa. Kertolasku Pb ei ole mitään muuta kuin vektorin b alkioiden permutointi. Käytännön tietokonetoteutuksessa matriisin P sisältämä informaatio voidaan tallentaa yhteen n-paikkaiseen kokonaislukuvektoriin p. Tällöin alkion p i arvo ilmoittaa sen sarakkeen, jossa rivillä i oleva matriisin P ykkösalkio esiintyy.
3.2. GAUSSIN ELIMINOINTIMENETELMÄ 27 Koska alakolmiomatriisin L diagonaalialkiot tunnetaan (ykkösiä), voidaan sen ja yläkolmiomatriisin U sisältämä informaatio tallentaa matriisin A kokoiseen tilaan. Jos ei haluta säilyttää matriisia A, voidaan LU-hajotelma tehdä paikallaan, ts. sitä mukaa kun matriisin A alkiot tulevat tarpeettomiksi ne korvataan vastaavilla kolmiomatriisien L ja U alkioilla. Alla on esitetty yksinkertaiset algoritmit yleisen lineaarisen yhtälöryhmän ratkaisemiseksi LU-hajotelman avulla. Algoritmi LU_factor muodostaa matriisin A LU-hajotelman osittaistuentaa käyttäen. Alkuperäiset matriisialkiot korvautuvat kolmiotekijöiden alkioilla. Permutaatiomatriisin P määräämiseen tarvittava informaatio palautetaan kokonaislukuvektorissa p. Mikäli nollasta eroavaa tukialkiota ei löydetä palautetaan virheparametrissa error nollasta eroava arvo. Algoritmi 3.2. LU_factor( A, p, δ, error ) error:=0 p = [ 1 2 3... n ] do k = 1,...,n 1 Etsi r s.e. a rk = max k s n { a sk } swap ( a k,1:n, a r,1:n ) swap ( p k, p r ) if a kk δ then error:=1 return end if do i = k + 1,...,n a ik := a ik /a kk do j = k + 1,...,n a i j := a i j a ik a k j end do end do end do Kolmioinnin jälkeen voidaan ala- ja yläkolmiomuotoiset yhtälöryhmät Ly = Pb ja Ux = y ratkaista algoritmilla backsolve. Ylimääräistä apuvektoria y ei käytännössä tarvita, sillä ratkaisuvektoria x voidaan käyttää tarvittavana työtilana. Algoritmi 3.3. backsolve( A, p, b, x ) do i = 1,...,n x i := b pi do j = 1,...,i 1 x i := x i a i j x j end do end do do i = n,n 1,...,1 do j = i + 1,...,n
28 LUKU 3. YHTÄLÖRYHMIEN RATKAISEMISESTA x i := x i a i j x j end do x i := x i /a ii end do Huomautus 3.2. Jos matriisi A on kääntyvä, niin eksaktia aritmetiikkaa käytettäessä osittaistuenta antaa aina nollasta eroavia tukialkioita u j j. Liukulukulaskennassa tämä ei kuitenkaan aina takaa parasta mahdollista tarkkuutta. Osittaistuentaan liitetäänkin usein yhtälöryhmän skaalaus. Kukin yhtälö kerrotaan sopivalla vakiolla siten, että jokaisen rivin itseisarvoltaan suurin matriisialkio tulee olemaan samaa kertaluokkaa. Huomautus 3.3. Käänteismatriisia ei yleensä kannata laskea numeerisesti, koska sen eksplisiittinen muodostaminen on kallis operaatio eikä käänteismatriisin kanssa operoimalla saavuteta parasta laskentatarkkuutta. Käänteismatriisia tarvitaan itse asiassa äärimmäisen harvoin. Esimerkiksi skalaarin α = c T A 1 d, A R n n, c,d R n arvo lasketaan helposti ilman käänteismatriisia: Ensin ratkaistaan yhtälöryhmä Ax = d esimerkiksi Gaussin eliminointimenetelmällä ja sitten lasketaan sisätulo α = c T x. Lineaarialgebran alkeiden opetuksen yhteydessä mainitaan usein lineaarisen yhtälöryhmän ratkaiseminen determinantteihin perustuvalla Cramerin säännöllä. Vaikka menetelmä on kätevä, kun n 4, on se yleisessä tapauksessa täysin käyttökelvoton! Cramerin säännön vaativuus on luokkaa O(n!), ja esimerkiksi 20 20-yhtälöryhmän ratkaiseminen kestäisi tähtitieteellisen kauan tehokkaallakin tietokoneella. 3.3 Choleskyn menetelmä Tarkastellaan seuraavaksi erästä lineaarisen yhtälöryhmän tärkeää erikoistapausta. Oletetaan, että yhtälöryhmän kerroinmatriisi on positiivisesti definiitti. Matriisi A R n n on positiivisesti definiitti, jos se on symmetrinen ja x T Ax > 0 kaikille 0 x R n. Käytännössä annetusta matriisista on vaikea sanoa suoraan eo. määritelmän avulla, onko se positiivisesti definiitti vai ei. Definiittisyys tiedetään yleensä yhtälöryhmään johtaneen lähtöprobleeman ominaisuuksista. Esimerkiksi elliptisten osittaisdifferentiaaliyhtälöiden diskretisointi differenssi- tai elementtimenetelmillä johtaa lineaarisen yhtälöryhmän ratkaisemiseen, jonka kerroinmatriisi on positiivisesti definiitti. Lause 3.2. Jos matriisi A on positiivisesti definiitti, niin matriisin A suurin alkio on diagonaalilla ja diagonaalialkiot sekä ominaisarvot ovat aidosti positiivisia, matriisi A on kääntyvä, on olemassa yksikäsitteinen alakolmiomatriisi L, jonka diagonaalialkiot ovat aidosti positiivisia ja jolle pätee A = LL T. Choleskyn menetelmässä muodostetaan kolmiohajotelma A = LL T. (3.15)
3.4. NAUHAMAISET YHTÄLÖRYHMÄT 29 Matriisin L alkiot voidaan johtaa muodostamalla matriisitulo LL T ja vertaamalla vastinalkioihin matriisissa A. Matriisien kertolaskusäännön mukaan tulee olla n l ik l jk = k=1 j k=1 l ik l jk = l i j l j j + j 1 k=1 josta saadaan matriisin L diagonaalin alapuolisille alkioille l i j esitys l i j = 1 l j j ( ja diagonaalialkiolle a i j j 1 k=1 l ik l jk = a i j, (3.16) l ik l jk ), i = 1,...,n, j = 1,...,i 1, i j, (3.17) ( l ii = a ii i 1 k=1 l 2 ik) 1 2, i = 1,..,n. (3.18) Alakolmiomatriisin alkiot l i j voidaan laskea esimerkiksi riveittäin: l 11 = (a 11 ) 2 1 l 21 = a 21 /l 11, l 22 = (a 22 l21 2 ) 1 2 l 31 = a 31 /l 11, l 32 = (a 32 l 31 l 21 )/l 22, l 33 = (a 33 l31 2 l2 32 ) 1 2 jne. Kun hajotelma on muodostettu ratkaistaan yhtälöryhmät Ly = b ja L T x = y etenevillä ja takenevilla sijoituksilla kuten LU-hajotelman yhteydessä: y i = 1 i 1 (b i l ii x i = 1 l ii (y i k=1 n k=i+1 l ik y k ), i = 1,...,n, (3.19) l ki x k ), i = n,n 1,...,1. (3.20) Choleskyn hajotelma voidaan tehdä kuten LU-hajotelmakin matriisin A päälle. Työvektoria y varten ei tarvita myöskään aputilaa. 3.4 Nauhamaiset yhtälöryhmät Matriisia A sanotaan nauhamatriisiksi (band matrix), jos a i j = 0, kun i j > m. Tällaisen matriisin nollasta poikkeavat alkiot ovat nauhana diagonaalin ympäristössä. Lukua m sanotaan sivudiagonaalien lukumääräksi ja lukua 2m + 1 matriisin A nauhanleveydeksi. On helppo nähdä, että jos A on nauhamatriisi, jolle on muodostettu LU-hajotelma ilman tuentaa, niin kolmiotekijät L ja U ovat myös nauhamatriiseja ja niillä on sama nauhanleveys kuin matriisilla A. Sama pätee luonnollisestikin myös Choleskyn menetelmälle. Tämä mahdollistaa kerroinmatriisin A ja kolmiotekijöiden L ja U sisältämän informaation tiiviin esityksen, koska vain diagonaalin ympärillä olevat matriisialkiot tarvitsee tallentaa. Samaten turha laskenta nollilla poistuu lisäten laskennan tehokkuutta.
30 LUKU 3. YHTÄLÖRYHMIEN RATKAISEMISESTA Esimerkki 3.2. Tarkastellaan toisen kertaluvun reuna-arvotehtävän { u (x) + u (x) = f (x), 0 < x < 1 u(0) = u(1) = 0 (3.21) ratkaisemista differenssimenetelmällä. Tehtävä (3.21) voidaan ratkaista likimääräisesti pisteissä x i = i h, i = 1,...,n, h = n+1 1 korvaamalla derivaatat erotusosamäärillä: u(x i + h) + 2u(x i ) u(x i h) h 2 + u(x i) u(x i h) = f (x i ), i = 1,...,n. (3.22) h Jos merkitään u i := u(x i ), f i := f (x i ), niin yhtälöt (3.22) voidaan kirjoittaa matriisimuodossa 2 + h 1 (1 + h) 2 + h 1......... (1 + h) 2 + h 1 (1 + h) 2 + h u 1 u 2. u n 1 u n = h 2 f 1 h 2 f 2. h 2 f n 1 h 2 f n Edellisessä esimerkissä kerroinmatriisi oli nauhamatriisin tärkeä erikoistapaus, tridiagonaalinen matriisi. Yleinen tridiagonaalimatriisi on siis muotoa b 1 c 1 a 2 b 2 c 2 A = a 3 b 3 c 3..... (3.23) a n 1 b n 1 c n 1 a n b n Oletetaan, että tridiagonaalisen matriisin A LU-hajotelma voidaan muodostaa numeerisesti stabiilisti ilman rivien vaihtoa. Tehdään arvaus, että kolmiotekijät ovat muotoa 1 ω 1 α 1 β 2 1 ω 2 α 2 L = β 3 1 ja U =... α n 1, β n 1 ω n missä vakiot ω i, α i ja β i ovat toistaiseksi tuntemattomia. Tällöin kertomalla kolmiotekijät keskenään, saadaan ω 1 α 1 β 2 ω 1 α 1 β 2 + ω 2 α 2 LU = β 3 ω 2 α 2 β 3 + ω 3 α 3......, (3.24) β n ω n 1 α n 1 β n + ω n eli matriisi LU on tridiagonaalinen. Vertaamalla vastinalkioita matriiseissa A ja LU saadaan β i, ω i ja α i laskettua riveittäin: ω 1 = b 1, α 1 = c 1, β i = a i /ω i 1, ω i = b i α i 1 β i, α i = c i, i = 2,3,...,n 1, β n = a n /ω n 1, ω n = b n α n 1 β n.. (3.25)
3.5. VIRHE- JA STABIILISUUSANALYYSIÄ 31 Vastaavasti voidaan johtaa Choleskyn hajotelma positiivisesti definiitille tridiagonaalimatriisille. 3.5 Virhe- ja stabiilisuusanalyysiä Vaikka lineaarinen yhtälöryhmä Ax = b voidaankin periaatteessa ratkaista tarkasti äärellisellä määrällä peruslaskutoimituksia, niin käytännön tehtävissä ratkaisu on yleensä aina likiarvo. Matemaattisen mallin parametreihin A ja b liittyy aina mittausvirheistä ym. johtuvia epätarkkuuksia. Näiden vaikutus ratkaisuun on riippumaton käytetystä ratkaisumenetelmästä (symbolinen vs. numeerinen). Liukulukulaskennassa käytetyt aritmeettiset operaatiot eivät ole tarkkoja ja sen lisäksi matriisi A ja vektori b tallennetaan liukulukuapproksimaatioina. Tarkastellaan aluksi pelkästään matriisin A ja vektorin b häiriöiden vaikutusta ratkaisuun x. Eli käytetyt aritmeettiset operaatiot oletetaan tarkoiksi. Oletetaan jatkossa, että A on kääntyvä matriisi. Jos pelkästään vektoria b häiritään tekijällä δb, saadaan yhtälö Merkitään e = ˆx x. Tällöin Aˆx = b + δb. Ae = Aˆx Ax = b + δb b = δb. Vektorien δb ja e normeja voidaan arvioida seuraavasti δb = Ae A e, e = A 1 δb A 1 δb. Jakamalla ensimmäinen epäyhtälö luvulla A x :llä ja jälkimmäinen luvulla x, saadaan epäyhtälöt δb A x e x A 1 δb. x Arvioimalla edelleen b = Ax A x ja x = A 1 b A 1 b saadaan epäyhtälöt 1 A A 1 δb b e x A A 1 δb b. Ratkaisun suhteellista virhettä voidaan siten arvioida oikean puolen suhteellisen virheen avulla seuraavasti: e x κ(a) δb b, (3.26) missä lukua κ(a) = A A 1 kutsutaan matriisin A häiriöalttiudeksi (matrix condition number). Häiriöalttius ilmoittaa, kuinka hyvää tarkkuutta ratkaisulta voidaan käytännössä odottaa. Jos esimerkiksi κ(a) = 10 3 ja oikean puolen tarkkuus on luokkaa 10 6, on ratkaisun
32 LUKU 3. YHTÄLÖRYHMIEN RATKAISEMISESTA virhe pahimmassa tapauksessa luokkaa 10 3 10 6 = 10 3. Huomaa, että häiriöalttiuden κ(a) numeerinen arvo riippuu myös käytetystä matriisinormista. Häiriöalttiuden tarkan arvon laskeminen on kalliimpi operaatio kuin itse yhtälöryhmän ratkaiseminen. Häiriöalttiuden suuruusluokkaa voidaan kuitenkin arvioida LU-hajotelman avulla helpohkosti ja tämä on yleensä käytännössä riittävää. Esimerkki 3.3. Tarkastellaan n.s. Hilbertin matriisia A R n n, a i j = 1/(i + j 1). Kun n = 5, niin κ (A) 943656, eli Hilbertin matriisi on erittäin häiriöaltis. Olkoon b = A[1 1 1 1 1] T, jolloin yhtälöryhmän Ax = b tarkan ratkaisun kaikki komponentit ovat ykkösiä. Häiritään vektoria b vektorin δb = [0 0 10 7 0 0] T verran. Tällöin epäyhtälön (3.26) antama suhteellisen virheen yläraja on κ (A) δb / b 0.041 ja todellinen virhe e / x 0.012. Vastaavasti voidaan johtaa virhearvio yleisemmässä tapauksessa, jossa sekä kerroinmatriisi että oikean puolen vektori sisältävät häiriön: Lause 3.3. Olkoon matriisi A kääntyvä. Olkoon matriisi δa ja vektori δb matriisin A ja vektorin b häiriöt. Oletetaan lisäksi, että δa < 1 A 1. (3.27) Olkoon x yhtälön Ax = b ratkaisu ja olkoon x + e häirityn yhtälön ratkaisu. Silloin e x (A + δa)(x + e) = b + δb (3.28) κ(a) 1 κ(a) δa A ( δa A + δb ). (3.29) b Huomautus 3.4. Jos det A = 0, niin määritellään κ(a) =. Voidaanko kääntyvän matriisin tapauksessa determinantin arvosta päätellä häiriöalttiuden suuruusluokka? Vastaus on kielteinen. Tarkastellaan n n-matriiseja 10 1 1 1... 1 10 1 D n =..., B 1... 1 n =..... 10 1 1 Nyt detd n = 10 n 0, kun n, mutta κ(d n ) = 1 kaikilla n. Toisaalta detb n = 1 kaikilla n, mutta κ(b n ), kun n. Eli determinantin arvosta ei voida tehdä mitään johtopäätöksiä häiriöalttiuden suhteen. Virhearvio (3.29) on a priori -virhearvio. Residuaalin avulla voidaan johtaa myös a posteriori -virhearvio. Olkoon vektori ˆx yhtälöryhmän Ax = b numeerinen ratkaisu, jolloin sen voidaan ajatella olevan häirityn yhtälöryhmän (A + δa)ˆx = b + δb tarkka ratkaisu. Tällöin yleensä δa,δb 0 ja ratkaisua ˆx vastaavalle residuaalille r = b Aˆx on voimassa r 0. Käytännössä pieni residuaalin normi r ei implikoi pientä virheen normia ˆx x. Nimittäin, jos yhtälöryhmän yhtälöt kerrotaan vakiolla α 0, niin ratkaisu ei
3.6. ITERATIIVISET MENETELMÄT 33 muutu, mutta residuaali tulee kerrotuksi samalla vakiolla. Täten residuaali voidaan saada mielivaltaisen pieneksi tai suureksi tehtävän skaalauksesta riippuen, joten pelkkä residuaali on hyödytön ratkaisun tarkkuuden mittari. Ideaalitilanteessa yhtälöryhmän numeerinen ratkaiseminen aiheuttaisi pyöristysvirheitä vain kun matriisi A ja vektori b tallennetaan liukulukuina, t.s. δa ε R A ja δb ε R b. Yleensä pyöristysvirheistä johtuvat häiriöt δa ja δb ovat kuitenkin suuremmat eikä niiden normeille löydy yksinkertaisia arvioita. Jos e := x ˆx, niin e = A 1 r ja e A 1 r. Käyttämällä hyväksi epäyhtälöä 1, saadaan virhearvio x A b e r κ(a) x b. (3.30) Huomaa, että pienestä suhteellisesta residuaalin normista seuraa pieni suhteellinen virhe ratkaisussa vain, jos matriisin häiriöalttius on pieni. Esimerkki 3.4. Ratkaistaan esimerkin 3.3 lineaarinen yhtälöryhmä numeerisesti LUhajotelman avulla käyttäen 64-bittistä liukulukuaritmetiikkaa. Tällöin suhteellinen residuaalin normi on r / b 9.7 10 17 ja virhearvion (3.30) antama yläraja κ (A) r / b 9.2 10 11. Todellinen suhteellinen virhe on e / x 2.0 10 12. 3.6 Iteratiiviset menetelmät Tähän asti esitetyt yhtälöryhmien ratkaisumenetelmät ovat olleet ns. suoria menetelmiä. Näissä yhtälöryhmän tarkka ratkaisu saadaan äärellisellä määrällä peruslaskutoimituksia, mikäli käytetään tarkkaa aritmetiikkaa. Tarkastellaan seuraavassa iteratiivisia menetelmiä, joissa lähtien alkuarvauksesta x (0), muodostetaan vektorijono {x (k) }, joka suppenee kohti ratkaisua x. Iteratiiviset menetelmät eivät välttämättä vaadi matriisin A eksplisiittistä tallentamista vaan esimerkiksi matriisi-vektoritulon Aw arvon annetulla vektorilla w. Tästä syystä matriisin A alkiot voivat olla tallennettuna mielivaltaiseen tietorakenteeseen tai niitä ei tarvitse tallentaa lainkaan. Kuten epälineaarisen yhtälön tapauksessa, iteratiivisten menetelmien konvergenssista on syytä varmistua. Jos kerroinmatriisi A on symmetrinen ja positiivisesti definiitti, niin iteratiiviset menetelmät yleensä konvergoivat. Tässä esityksessä rajoitutaan tähän tapaukseen. 3.6.1 Klassiset stationääriset menetelmät Tarkastellaan lineaarista yhtälöryhmää Ax = b. Ratkaisemalla i:nnestä yhtälöstä x i (i = 1,...,n), saadaan x 1 = 1 (b 1 a 12 x 2 a 1n x n ) a 11 x 2 = 1 (b 2 a 21 x 1 a 2n x n ) a 22 (3.31). x n = 1 a nn (b n a n1 x 1 a n,n 1 x n 1 ). Jos nyt tunnetaan approksimaatio x (k) ratkaisulle x, niin voidaan yrittää löytää tarkempi approksimaatio sijoittamalla x (k) yhtälön (3.31) oikeaan puoleen. Yleisesti
34 LUKU 3. YHTÄLÖRYHMIEN RATKAISEMISESTA siis x (k+1) i = 1 ( i 1 bi a ii j=1 a i j x (k) j n j=i+1 a i j x (k) ) j, i = 1,...,n. (3.32) Tämä iteraatio tunnetaan Jacobin menetelmän nimellä. Menetelmää voidaan tehostaa käyttämällä komponentin x (k+1) i laskemisessa hyväksi samalla iteraatiolla laskettuja komponentteja x (k+1). Tällöin saadaan ns. Gaussin ja Seidelin menetelmä: 1,...,x (k+1) i 1 x (k+1) i = 1 i 1 (b i a ii j=1 a i j x (k+1) j n j=i+1 ) a i j x (k) j, i = 1,..,n. (3.33) Gaussin ja Seidelin menetelmää voidaan edelleen tehostaa relaksoinnilla. SORmene-telmässä (Successive Over Relaxation method) uusi approksimaatio saadaan kaavasta x (k+1) i = x (k) i + ω ( ˆx (k+1) i x (k) ) i, i = 1,...,n, (3.34) missä ˆx (k+1) i on yhden Gaussin ja Seidelin menetelmän askeleen antama approksimaatio. Parametri ω on ns. relaksaatioparametri. Jos valitaan ω = 1 saadaan Gaussin ja Seidelin menetelmä. Yleensä käytetään arvoja 1.4 ω < 2, ja mitä suurempi on yhtälöryhmän koko sen suurempi on relaksaatioparametri ω. Esitetyt iteratiiviset menetelmät ovat erittäin yksinkertaisia ohjelmoida, erityisesti jos matriisin A alkiot ovat suurimmaksi osaksi nollia. Sekä Jacobin menetelmän että Gaussin ja Seidelin menetelmän konvergenssi on kuitenkin erittäin hidasta. SOR-menetelmän konvergenssi on kohtuullinen edellyttäen, että lähes optimaalinen relaksaatioparametrin ω arvo tunnetaan. Kun otetaan vielä huomioon, että menetelmien konvergenssi ei ole taattu mielivaltaisesta alkuarvauksesta, niin on selvää, että menetelmät eivät ole sellaisenaan kovinkaan käyttökelpoisia. Menetelmät toimivat kuitenkin hyvin osana monimutkaisempia iteratiivisia menetelmiä, kuten monihilamenetelmät (multigrid) ja pohjustettu liittogradienttimenetelmä. SOR-menetelmää voidaan muokata myös epälineaaristen yhtälöryhmien ja kvadraattisten optimointitehtävien ratkaisemiseen sopivaksi. Jacobin menetelmä, Gaussin ja Seidelin menetelmä sekä SOR-menetelmä voidaan esittää myös matriisimuodossa. Hajoitetaan matriisi A alakolmio-, diagonaalija yläkolmiomatriisin summaksi: 0 a 11 0 a 12... a 1n a 21 0 a 22 A = L+D+U = + 0.... +.... an 1,n a n1... a n,n 1 0 a nn 0 Tällöin kolme edellämainittua menetelmää matriisimuodossa ovat x (k+1) = D 1 (L +U)x (k) + D 1 b, (3.35) x (k+1) = (D + L) 1 Ux (k) + (D + L) 1 b, (3.36) x (k+1) = (D + ωl) 1 [D(1 ω) ωu]x (k) + (D + ωl) 1 ωb. (3.37) Iteraatiot (3.35) (3.37) ovat erikoistapauksia yleisestä stationäärisestä iteraatiosta x (k+1) = Gx (k) + c. (3.38) Stationäärinen tarkoittaa tässä yhteydessä sitä, että matriisi G ei muutu iteraation aikana. Lause 3.4. Jos matriisin G spektraalisäteelle on voimassa ρ(g) < 1, niin iteraation (3.38) määräämä jono {x (k) } suppenee kohti vektoria (I G) 1 c mielivaltaisella alkuarvauksella x (0). Todistus. Olkoon ρ(g) < 1. Tällöin on olemassa vektorinormin määräämä mat-
3.6. ITERATIIVISET MENETELMÄT 35 riisinormi, jolle G < 1. Iteraatio (3.38) voidaan esittää muodossa Em. vektorinormia käyttäen saadaan x (k) = G k x (0) k 1 + j=0 G j c. (3.39) G k x (0) G k x (0) G k x (0) 0 kun k. Käyttäen hyväksi tulosta A < 1 = (I A) 1 = saadaan x (k) (I G) 1 c, kun k. A k k=0 kaikille A R n n Lause 3.5. Jos A on positiivisesti definiitti ja 0 < ω < 2, niin SOR-menetelmä konvergoi kaikilla alkuarvauksilla. 3.6.2 Kolmiohajotelmalla lasketun ratkaisun iteratiivinen tarkentaminen Olkoon matriisi H hyvä approksimaatio matriisille A. Jos x (0) on lisäksi hyvä approksimaatio lineaarisen yhtälöryhmän Ax = b ratkaisulle, niin stationäärinen iteraatio x (k+1) = x (k) + H 1 (b Ax (k) ). (3.40) useimmiten konvergoi nopeasti. Iteraatiota (3.40) voidaan soveltaa esimerkiksi tapauksessa, jossa kerroinmatriisi A on häiriöaltis. Tällöin LU-hajotelma ei ole riittävän tarkka. Valitsemalla H = LU A, saadaan algoritmi kolmiohajotelmalla lasketun ratkaisun tarkentamiseksi. Algoritmi 3.4. Ratkaisun iteratiivinen tarkentaminen Muodosta numeerinen LU-hajotelma LU A Ratkaise yhtälöryhmät LUx = b do Ratkaise yhtälöryhmä LUe = b Ax (k) x (k+1) := x (k) + e if e τ return end do Edellinen algoritmi edellyttää, että käytettävissä on myös alkuperäinen matriisi A, eli kolmiointia ei ole tehty sen päälle. Residuaalin b Ax (k) laskeminen on, mikäli mahdollista, tehtävä suuremmalla tarkkuudella kuin yhtälöryhmän ratkaiseminen. 3.6.3 Gradienttimenetelmä Tarkastellaan kvadraattista funktiota J : R n R, J(y) := 1 2 yt Ay b T y. Jos matriisi A on positiivisesti definiitti, niin funktio J on koersiivinen ja aidosti konveksi, jolloin sillä on yksikäsitteinen minimi. Välttämätön (ja tässä tapauksessa myös riittävä) ehto sille, että vektori x on funktion J globaali minimi on, että J(x) = Ax b = 0. (3.41) Siis lineaarisen yhtälöryhmän Ax = b ratkaiseminen on yhtäpitävä kvadraattisen optimointitehtävän min J(y) (3.42) y Rn ratkaisemisen kanssa. Tarkastellaan seuraavassa tämän optimointitehtävän ratkaisemista. Etsitään nyt jonoa {x (k) }, joka minimoi kvadraattisen funktion J. Olkoon x (k) tämänhetkinen
36 LUKU 3. YHTÄLÖRYHMIEN RATKAISEMISESTA approksimaatio minimipisteelle. Uudeksi approksimaatioksi otetaan x (k+1) = x (k) + α k d (k), missä skalaari α k on askelpituusparametri ja vektori d (k) on eräs funktion J pienenemissuunta, eli funktion J suuntaisderivaatalle on voimassa J (x (k) ;d (k) ) := J(x (k) ),d (k) < 0. Lemma 3.6. Olkoot x (k) ja d (k) annettu. Olkoon r (k) := b Ax (k) vektoria x (k) vastaava residuaali. Tällöin α k = d(k),r (k) d (k),ad (k), (3.43) on minimointitehtävän minj(α) ˆ := J(x (k) + αd (k) ) (3.44) α ratkaisu. Todistus. Merkitään z(α) := x (k) + αd (k). Derivoimalla saadaan ˆ J (α) = z J(z),z (α) = Az b,d (k) = Ax (k),d (k) + α Ad (k),d (k) b,d (k) = α Ad (k),d (k) r (k),d (k). Väite seuraa asettamalla ˆ J (α) = 0. Lemma 3.7. Jos x (k+1) = x (k) + α k d (k), niin residuaalille r (k+1) on voimassa r (k+1) = r (k) α k Ad (k). Todistus. Suora sijoitus antaa r (k+1) = b Ax (k+1) = b Ax (k) α k Ad (k) = r (k) α k Ad (k), mistä väite seuraa. Luonnollinen valinta suunnaksi d (k) on funktion J jyrkimmän laskun eli negatiivisen gradientin J(x (k) ) suunta. Tällä valinnalla ja edellisten lemmojen avulla saadaan yhtälöryhmän Ax = b ratkaisemiseksi ns. gradientti- eli jyrkimmän laskun menetelmä: Algoritmi 3.5. Gradienttimenetelmä r (0) := b Ax (0) k := 0 do α k := r (k),r (k) / r (k),ar (k) x (k+1) := x (k) + α k r (k) r (k+1) := r (k) α k Ar (k) if r (k+1) τ then return end if k := k + 1 end do Algoritmin tietokonetoteutuksessa tulo Ar (k) kannattaa tallentaa apuvektoriin, jolloin se tarvitsee laskea vain kerran iteraation aikana. Menetelmä on yksinkertainen ohjelmoida, mutta käytännössä varsin tehoton, sillä negatiivinen gradientti antaa vain lokaalia informaatiota funktion J vähenemissuunnasta.
3.6. ITERATIIVISET MENETELMÄT 37 3.6.4 Liittogradienttimenetelmä Gradienttimenetelmää voidaan tehostaa ottamalla uutta suuntaa määrättäessä huomioon myös edelliset suunnat. Liittogradienttimenetelmässä pakotetaan uusi suunta kohtisuoraksi A-sisätulon x,y A := x,ay suhteen aikaisempien suuntien kanssa. Ts. d (i),ad ( j) = 0 i j. Voidaan osoittaa, että kohtisuoruuden takaamiseksi riittää valita suunta d (k) muodossa d (k+1) = r (k+1) + β k d (k), missä β k on valittu siten, että d (k),ad (k+1) = 0. Uudeksi laskusuunnaksi valitaan siis negatiivisen gradientin ja edellisen suunnan lineaarikombinaatio. Algoritmi 3.6. Liittogradienttimenetelmä r (0) := b Ax (0) d (0) := r (0) k := 0 do α k := d (k),r (k) / d (k),ad (k) x (k+1) := x (k) + α k d (k) r (k+1) := r (k) α k Ad (k) if r (k+1) τ return β k := r (k+1),r (k+1) / r (k),r (k) d (k+1) := r (k+1) + β k d (k) k := k + 1 end do Voidaan osoittaa, että tarkkaa aritmetiikkaa käytettäessä ratkaisu löydetään viimeistään n:nnellä askeleella. Menetelmä on siis periaatteessa suora menetelmä. Menetelmän tekee kuitenkin käyttökelpoiseksi se, että vektori x (k) on hyvä approksimaatio yhtälöryhmän ratkaisulle vaikka k n. 3.6.5 Pohjustus Iteratiivisten algoritmien konvergenssinopeus riippuu ratkaisevasti myös kerroinmatriisin A häiriöalttiudesta κ(a). Esimerkiksi liittogradienttimenetelmälle on voimassa x (k) x A 2 x x (0) A ( κ(a) 1 κ(a) + 1 ) k, missä A =, A. Pohjustetussa (preconditioned) liittogradienttimenetelmässä sovelletaan edellistä algoritmia modifioituun yhtälöön E 1 AE T y = E 1 b, (3.45) missä y = E T x. Tässä E on jokin kääntyvä matriisi, jolle S = EE T on matriisin A hyvä approksimaatio, s.o. κ(s 1 A) κ(a). Oletuksesta seuraa välittömästi, että matriisi S on myös positiivisesti definiitti. Yhtälöryhmä voidaan korvata yhtälöryhmällä S 1 Ax = S 1 b. (3.46) Matriisi S 1 A ei yleensä ole symmetrinen, mutta se on symmetrinen S-sisätulon x,y S = x,sy suhteen, eli x,sy S = Sx,y S. Siis, korvataan liittogradienttimenetelmässä sisätulo, S-sisätulolla, S, ja sovelletaan algoritmia yhtälöryhmään ÃAx = b, jonka kerroinmatriisina ja oikean puolen vektorina ovat ÃA := S 1 A ja b := S 1 b.
38 LUKU 3. YHTÄLÖRYHMIEN RATKAISEMISESTA Algoritmi 3.7. Pohjustettu liittogradienttimenetelmä r (0) := b Ax (0) g (0) := S 1 r (0) w (0) := g (0) k := 0 do α k := g (k),r (k) / w (k),aw (k) x (k+1) := x (k) + α k w (k) r (k+1) := r (k) α k Aw (k) if r (k+1) τ return g (k+1) := S 1 r (k+1) β k := g (k+1),r (k+1) / g (k),r (k) w (k+1) := g (k+1) + β k w (k) k := k + 1 end do Algoritmin jokaisella iteraatiokierroksella joudutaan ratkaisemaan lineaarinen yhtälöryhmä Sg = r. (3.47) Täten on selvää, että sen ratkaiseminen on oltava helppoa (esim. laskutoimitusten lukumäärä luokkaa O(n)) alkuperäiseen yhtälöön verrattuna, jotta menetelmä olisi tehokas. Jos yhtälöryhmä (3.47) ratkaistaan Choleskyn menetelmällä, tarvitsee hajotelma muodostaa vain kerran, sen jälkeen ratkaiseminen tapahtuu vaivattomasti etenevillä ja takenevilla sijoituksilla. Yleensä valitaan matriisi S siten, että A = B + S (edellyttäen, että S on positiivisesti definiitti). Esimerkiksi matriisi S voi olla matriisin A diagonaali tai tridiagonaaliosa. Usein valitaan A = B + S = B + ˆLˆL T, (3.48) missä matriisissa ˆL on nollasta poikkeavia alkioita vain niissä paikoissa, joissa myös matriisin A alkiot ovat nollasta poikkeavia. Tällöin puhutaan ns. epätäydellisestä Choleskyn hajotelmasta. Liitogradienttimenetelmä sopivalla pohjustimella S varustettuna on tehokkaimpia ratkaisualgoritmeja esim. virtausmekaniikan ja rakenneanalyysin todella suurille ja harvoille positiivisesti definiiteille yhtälöryhmille. 3.7 Suosituksia algoritmien valintaan Lineaarisen yhtälöryhmän ratkaisemiseen on vapaasti saatavissa hyvin testattuja ja tehokkaita implementointeja suorista perusmenetelmistä, joten pyörää ei kannata keksiä uudestaan. Omaan ohjelmistokehitykseen suositeltavin on LAPACK-kirjasto, joka on saatavissa vapaasti esimerkiksi Netlib-kokoelmasta http://netlib.org/. LAPACK-aliohjelmat löytyvät myös kaupallisesta NAG-kirjastosta. Pienehköt tehtävät voi mukavasti ratkaista LAPACK-rutiinien päälle rakennetulla interaktiivisella Matlab (tai Octave) -ohjelmistolla. Tällä hetkellä 1000 1000-yhtälöryhmän ratkaiseminen tavallisella kotimikrolla LA- PACK-kirjaston tiheille matriiseille tarkoitetun LU-aliohjelman avulla kestää noin puoli minuuttia. Eli tämän kokoisten tai pienempien tehtävien ratkaisemisessa ei kannata käyttää monimutkaisempia tietorakenteita tai menetelmiä ellei yhtälöryhmän ratkaisemista tarvitse tehdä useita kertoja peräkkäin. Sen sijaan osittaisdifferentiaaliyhtälöiden diskretisoinnissa syntyvien todella suurten ja harvojen matriisien (n >> 10000, nollasta poikkea-
3.8. EPÄLINEAARISEN YHTÄLÖRYHMÄN RATKAISEMISESTA 39 vien alkioiden suhteellinen osuus alle <<1%) tapauksessa iteratiiviset menetelmät ovat usein ainoa tapa saada tehtävä ratkaistua. 3.8 Epälineaarisen yhtälöryhmän ratkaisemisesta Tarkastellaan epälineaarisen yhtälöryhmän f (x) = 0 (3.49) numeerista ratkaisemista, missä f : R n R n on vektoriarvoinen funktio. Useimmilla yhden yhtälön ratkaisemiseen tarkoitetuilla menetelmillä on analogiat yhtälöryhmien tapauksessa (Newtonin menetelmä, sekanttimenetelmä), kun taas joidenkin menetelmien perusidea toimii vain reaaliakselilla (puolitushaku). 3.8.1 Newtonin menetelmä Yleiskäyttöisimmät epälineaarisen yhtälöryhmän numeeriset ratkaisualgoritmit pyrkivät palauttamaan epälineaarisen yhtälöryhmän jonoksi lineaarisia yhtälöryhmiä. Olkoon x (0) alkuarvaus yhtälöryhmän (3.49) ratkaisulle. Muodostamalla funktion f Taylorin kehitelmä pisteessä x (0), saadaan Tässä f (x (0) + h) = f (x (0) ) + J(x (0) )h + O( h 2 ). J(x) = f 1 (x) x 1 f 2 (x) x 1. f n (x) x 1 f 1 (x) x 2... f 2 (x) f 1 (x) x n f 2 (x) x n x 2........ f n (x) x 2... on funktion f jacobiaani pisteessä x. Asettamalla funktion f lineaarinen approksimaatio f (x (0) )+J(x (0) )h nollaksi saadaan korjausvektorille h laskukaava h = J(x (0) ) 1 f (x (0) ). Uusi approksimaatio yhtälöryhmän ratkaisulle saadaan siten asettamalla f n (x) x n x (1) = x (0) + h = x (0) J(x (0) ) 1 f (x (0) ). (3.50) Tämä on tietenkin yksiulotteisen Newton-askeleen useampiulotteinen analogia, ja sen avulla saadaan algoritmi epälineaarisen yhtälöryhmän (3.49) ratkaisemiseksi. Algoritmi 3.8. Newtonin menetelmä Arvaa x (0) k:=0 do while f (x (k) ) > τ Ratkaise yhtälöryhmä J(x (k) )h = f (x (k) ) x (k+1) := x (k) + h k := k + 1 end do
40 LUKU 3. YHTÄLÖRYHMIEN RATKAISEMISESTA Menetelmälle voidaan todistaa seuraava konvergenssitulos: Lause 3.8. Olkoon x yhtälön f (x) = 0 ratkaisu. Oletetaan, että detj(x ) 0 ja funktion f kaikki toisen kertaluvun osittaisderivaatat ovat jatkuvia. Tällöin on olemassa luku ε > 0 siten, että jos x (0) x ε, niin algoritmin 3.8 generoima vektorijono {x (k) } konvergoi kohti ratkaisua x. Konvergenssin kertaluku on kaksi. Yhtälöryhmien ratkaisemisessa Newtonin menetelmällä on samat ongelmat kuin yhden yhtälönkin tapauksessa: Alkuarvauksen on oltava hyvä, jotta menetelmä konvergoisi. Jacobiaani voi olla numeerisesti singulaarinen jossakin pisteessä. Tämän lisäksi, jos n on suuri, on askel (3.50) kallis. Jos yhtälöryhmän ratkaisuun käytetään LU-hajotelmaa, täytyy hajotelma laskea uudelleen jokaisella Newton-askeleella. Jacobiaania J(x (k) ) voi yrittää approksimoida yksinkertaisemmalla matriisilla. Esimerkiksi J(x (k) ) J(x (0) ) = LU, k = 1,2,... Tässä tapauksessa LU-hajotelma muodostetaan vain kerran. Menetelmän konvergenssiominaisuudet ovat luonnollisestikin huonommat kuin tarkkaa jacobiaania käytettäessä. 3.8.2 Kvasi-Newton -menetelmät Sekanttimenetelmän vastine yhtälöryhmien tapauksessa on kvasi-newton-menetelmät. Osittaisderivaattoja ei tarvitse eksplisiittisesti laskea, vaan jacobiaanin sijaan muodostetaan jono matriiseja B (0),B (1),... siten, että ne toteuttavat kvasi-newton-ehdon B (k) (x (k) x (k 1) ) = f (x (k) ) f (x (k 1) ), k = 1,2,... Tapa, jolla matriisit B (k) valitaan, ei ole yksikäsitteinen. Yleisesti käytetty Broydenin kvasi-newton-menetelmä voidaan esittää seuraavanlaisena algoritmina: Algoritmi 3.9. Broydenin menetelmä Arvaa x (0) B (0) := I k := 0 do while f (x (k) ) > τ Ratkaise yhtälöryhmä B (k) h (k) = f (x (k) ) x (k+1) := x (k) + h (k) y (k) := f (x (k+1) ) f (x (k) ) B (k+1) := B (k) + (y(k) B (k) h (k) )(h (k) ) T k := k + 1 end do (h (k) ) T h (k) Voidaan osoittaa, että tiettyjen lisäoletusten ollessa voimassa menetelmän konvergenssi on superlineaarista. Matriisiksi B (0) voidaan valita identtisen matriisin sijaan esimerkiksi jacobiaanin differenssiapproksimaatio pisteessä x (0). Esitetty algoritmi ei ole robusti siinä mielessä, että matriisin B (k) kääntyvyyttä ei ole mitenkään varmistettu. Huomaa myös, että matriisit B (k) approksimoivat jacobiaania vain matriisi-vektoritulon mielessä B (k) h (k) J(x (k) )h (k) 0, k, eivät alkioittain. Koska jokaisella iteraatiolla ratkaistaan uusi lineaarinen n n-yhtälöryhmä, on yhden iteraation vaativuus O(n 3 ). Menetelmää voidaan modifioida siten, että matriisin B (k) sijaan päivitetään suoraan sen LU-hajotelmaa. Tällöin yhden iteraation vaativuudeksi tulee O(n 2 ).
3.8. EPÄLINEAARISEN YHTÄLÖRYHMÄN RATKAISEMISESTA 41 3.8.3 Kiintopisteiteraatio Kuten yhden yhtälön tapauksessa, voidaan yhtälöryhmienkin tapauksessa joskus löytää helposti suppeneva kiintopisteiteraatio x (k+1) = g(x (k) ), (3.51) missä g : R n R n on vektoriarvoinen iteraatiofunktio. Mikäli funktion g jacobiaanin G spektraalisäteelle on voimassa ρ(g(x )) < 1 ja alkuarvaus x (0) on valittu riittävän läheltä ratkaisuvektoria x, niin funktio g on kutistava ja iteraatio (3.51) konvergoi kiintopisteeseen x = g(x ). Esimerkki 3.5. Tarkastellaan epälineaarista yhtälöryhmää { x1 sinhx 2 = 0 2x 2 coshx 1 = 0. Yhtälöryhmästä saadaan välittömästi johdettua iteraatio [ ] [ ] x (k+1) 1 sinhx (k) x (k+1) = 2. 1 2 2 coshx(k) 1 Alkuarvaus x (0) = (0.6,0.6) T tuottaa konvergoivan jonon: k 2 f 1 (x (k) ) f 2 (x (k) ) 1 0.6366536E+00 0.5927326E+00 0.8598502E-02-0.2413728E-01 5 0.6446704E+00 0.6055687E+00 0.1405438E-02-0.3959848E-02 15 0.6462654E+00 0.6080765E+00 0.1657891E-04-0.4674522E-04 30 0.6462845E+00 0.6081065E+00-0.5617016E-07 0.2316369E-07 x (k) 1 x (k) Esimerkki 3.6. Kvasilineaaristen osittaisdifferentiaaliyhtälöiden diskretisointi differenssitai elementtimenetelmällä tuottaa kvasilineaarisen algebrallisen yhtälöryhmän A(x)x = b, (3.52) missä kerroinmatriisin alkiot ovat tuntemattomien funktioita. Jos matriisi A(x (k) ) on kääntyvä, niin uusi approksimaatio ratkaisulle saadaan kaavasta x (k+1) = [A(x (k) )] 1 b =: g(x (k) ). (3.53) Käänteismatriisia ei tietenkään käytännössä lasketa, vaan iteraatio (3.53) kirjoitetaan muotoon A(x (k) )x (k+1) = b. (3.54) Menetelmää kutsutaan myös Picardin iteraatioksi yhtälöryhmälle (3.52). 3.8.4 Konvergenssin varmistaminen Usein ei ole kovinkaan helppoa löytää konvergenssin tuottavaa alkuarvausta. Erilaisilla vaimennustekniikoilla voidaan usein konvergenssi varmistaa huonostakin alkuarvauksesta. Alirelaksoinnissa uuden likiratkaisun arvoa määrättäessä otetaan myös edellinen likimääräinen ratkaisu huomioon. Esimerkiksi Newtonin menetelmässä otetaan normaalin askeleen sijaan lyhyempi askel, eli uusi approksimaatio ratkaisulle lasketaan kaavasta x (k+1) = x (k) + ωh, missä luku 0 < ω < 1 on relaksaatioparametri. Sopivan relaksaatioparametrin valinta voi vaatia useita kokeiluja. Jos Newtonin menetelmä ohjelmoidaan yleiskäyttöiseksi aliohjelmaksi, kannattaa siihen liittää alirelaksoinnin sijaan viivahaku (line search), s.o. uusi likiratkaisu hyväksytään vain jos se pienentää residuaalin normia. Algoritmi 3.10. Vaimennettu Newtonin menetelmä
42 LUKU 3. YHTÄLÖRYHMIEN RATKAISEMISESTA Arvaa x (0) k:=0 do while f (x (k) ) > τ Ratkaise yhtälöryhmä J(x (k) )h = f (x (k) ) i := min{ j 0 : f (x (k) + h/2 j ) < f (x (k) ) } x (k+1) := x (k) + h/2 i k := k + 1 end do
Luku 4 Ominaisarvotehtävistä Ominaisarvotehtäviin törmätään monilla tieteenaloilla. Esimerkiksi rakenneanalyysissä ominaisarvotehtävän ratkaisu antaa rakenteen ominaisvärähtelytaajuudet. Kvanttifysiikassa puolestaan systeemejä kuvataan Schrödingerin yhtälöllä, jonka ominaisarvot ovat eri tilojen energiat. Tunnetuimpia ominaisarvotehtävien numeerisia ratkaisumenetelmiä ovat mm. potenssiinkorotusmenetelmä, QR-menetelmä ja Lanczosin menetelmä. Tässä luvussa tarkastellaan lyhyesti kahta ensiksi mainittua. Ominaisarvotehtävien ratkaisemiseen on olemassa runsaasti vapaasti saatavia aliohjelmakirjastoja (ks. www.netlib.org), joten menetelmiä ei yleensä kannata itse koodata. 4.1 Algebrallinen ominaisarvotehtävä Skalaari λ on n n-neliömatriisin A ominaisarvo, jos on olemassa vektori x 0, s.e. Ax = λx. (4.1) Vektoria x sanotaan ominaisvektoriksi. Matriisin ominaisarvojen muodostama joukko on matriisin spektri. Ominaisarvot ovat siis ne parametrin λ arvot, joilla yhtälöllä (A λi)x = 0 (4.2) on nollasta poikkeava ratkaisu. Huomaa, että ominaisarvoa vastaava ominaisvektori ei ole yksikäsitteinen: Jos x on ominaisvektori ja α 0 mielivaltainen vakio, niin αx on myös ominaisvektori. Määrittelemällä karakteristinen polynomi p n (λ) := det(a λi), havaitaan että ominaisarvot ovat karakteristisen polynomin nollakohdat. Koska n-asteisella polynomilla on täsmälleen n kompleksista juurta, on ominaisarvojakin n kappaletta. Niitä merkitään yleensä symboleilla λ 1,...,λ n. Huomaa, että reaalisenkin matriisin ominaisarvot voivat olla kompleksisia. Symmetrisen matriisin ominaisarvot ovat kuitenkin aina reaalisia. Ominaisarvon algebrallinen kertaluku kertoo, kuinka moninkertainen karakteristisen polynomin juuri ominaisarvo on. Geometrinen kertaluku on ominaisarvoon liittyvien lineaarisesti riippumattomien ominaisvektoreiden lukumäärä. Jos algebrallinen kertaluku on suurempi kuin geometrinen kertaluku, ominaisarvoa sanotaan defektiiviseksi. 43
44 LUKU 4. OMINAISARVOTEHTÄVISTÄ Esimerkki 4.1. Matriisin 3 1 0 A = 1 2 1 0 1 3 karakteristinen polynomi on 3 λ 1 0 p 3 (λ) = 1 2 λ 1 0 1 3 λ = λ3 + 8λ 2 19λ + 12. Omainaisarvoiksi saadaan siis λ 1 = 1, λ 2 = 3 ja λ 3 = 4. Sijoittamalla λ 1 yhtälöön (4.2), saadaan 2x 1 x 2 = 0 x 1 + x 2 x 3 = 0 x 2 + 2x 3 = 0. Tämän yhtälön ratkaisut ovat muotoa x 1 = (a,2a,a), missä a on mielivaltainen vakio. Vastaavalla tavalla saadaan kaksi muuta ominaisvektoria x 2 = (b,0, b), x 3 = (c, c,c). Ominaisarvojen ja -vektorien numeerinen laskeminen on paljon työläämpää kuin lineaarisen yhtälöryhmän ratkaiseminen. Toisin kuin lineaarisen yhtälöryhmän tapauksessa, yleiset ominaisarvotehtävien ratkaisumenetelmät ovat aina iteratiivisia. Vaikka ominaisarvot voidaan periaatteessa laskea polynomien juurten laskemiseen tarkoitetuilla algoritmeilla, ei näin kannata menetellä juuri koskaan. Päinvastoin, polynomien juuret kannattaa laskea ominaisarvojen laskemiseen tarkoitetuilla algoritmeilla! 4.2 Potenssiinkorotusmenetelmät Olkoon matriisin A ominaisarvoille voimassa λ 1 > λ 2 λ 3... λ n. Oletetaan lisäksi, että ominaisvektorit on normeerattu siten, että v ( j) = 1, j = 1,...,n. Likiarvo itseisarvoltaan suurimmalle ominaisarvolle λ 1 ja sitä vastaavalle ominaisvektorille v (1) voidaan laskea iteratiivisesti seuraavalla tavalla. Olkoon x (0) alkuarvaus v (1) :lle. Muodostetaan jonot {x (k) } ja {c k } seuraavasti: y (k) = Ax (k), (4.3) c k+1 = y (k) j, missä j valittu s.e. y (k) = max j 1 p n { y(k) p } (4.4) x (k+1) = 1 c k+1 y (k). (4.5) Oletetaan, että alkuarvaus x (0) voidaan esittää normeerattujen ominaisvektorien lineaarikombinaationa x (0) = β 1 v (1) + β 2 v (2) +... + β n v (n) siten, että β 1 0. Tällöin x (k) 1 ( = β 1 λ k 1 c 1 c 2...c v(1) + β 2 λ k 2 v(2) +... + β n λ k nv (n)) k = λ k 1 c 1 c 2...c k ( β 1 v (1) + β 2 ( λ2 λ 1 ) k ( ) ) k v (2) λn +... + β n v (n). λ 1
4.3. QR-MENETELMÄ 45 Nyt voidaan osoittaa, että iteraatiolle (4.3) (4.5) on voimassa lim k x(k) = v (1), lim c k = λ 1. k Potenssiinkorotusmenetelmä on yksinkertainen eikä vaadi matriisin A alkioita eksplisiittisesti. Siksi se sopii erinomaisesti harvoille matriiseille. Menetelmän huonona puolena on konvergenssin hidastuminen, jos λ 2 / λ 1 1. Edelleen voi olla vaikea tietää etukäteen, ovatko menetelmän vaatimat oletukset voimassa. Samaa ideaa voidaan käyttää muidenkin ominaisarvojen laskemiseen. Tämä perustuu seuraavaan huomioon: Jos (λ,v) on yksi matriisin A ominaispareista, niin ((λ σ) 1,v) on yksi matriisin (A σi) 1 ominaispareista. Olkoon matriisin A ominaisarvot reaaliset ja olkoon niille voimassa λ 1 > λ 2 >... > λ n. Lukua σ lähimpänä oleva ominaisarvo voidaan laskea siirretyllä käänteisellä potenssimenetelmällä korvaamalla matriisi A kaavassa (4.3) matriisilla (A σi) 1. Käänteismatriisia ei tietenkään muodosteta eksplisiittisesti, vaan tehdään ensin kolmiohajotelma (esim. LU-hajotelma) matriisille A σi ja tätä hajotelmaa käyttäen algoritmin askel (4.3) korvataan askeleella ratkaise LUy (k) = x (k). (4.6) Itseisarvoltaan pienin ominaisarvo λ n, mikäli λ n < λ n 1, saadaan laskettua asettamalla σ = 0. 4.3 QR-menetelmä Olkoon Q kääntyvä matriisi. Tällöin matriiseilla A ja Q 1 AQ on samat ominaisarvot. Jos x on matriisin A ominaisvektori, niin Q 1 x on matriisin Q 1 AQ ominaisvektori. Jos matriisin A ominaisvektorit ovat lineaarisesti riippumattomia, niin ominaisvektorien muodostama matriisi V = [v (1),v (2),...,v (n) ] on kääntyvä. Olkoon Λ diagonaalimatriisi, jonka diagonaalialkiot ovat A:n ominaisarvot. Tällöin AV = V Λ ja edelleen V 1 AV = Λ. Oletetaan jatkossa, että A:n kaikki ominaisarvot ovat reaaliset ja yksinkertaiset. QRmenetelmän ideana on muodostaa jono matriiseja {Q (k) } siten, että tulo (Q (k) ) 1 AQ (k) lähenee yläkolmiomatriisia (tai diagonaalimatriisia, jos A on symmetrinen). Tulomatriisit ovat similaarisia alkuperäisen matriisin kanssa, joten niillä on samat ominaisarvot. Lähtökohta matriisin Q (k) valinnalle on QR-hajotelma. Jokainen matriisi A voidaan esittää ortogonaalimatriisin Q (s.o. Q 1 = Q T ) ja yläkolmiomatriisin R tulona A = QR. (4.7) Muodostetaan sitten uusi matriisi kertomalla tulon tekijät vastakkaisessa järjestyksessä: ÂA = RQ. Tällöin ÂA = Q 1 AQ. Matriisilla ÂA on siis samat ominaisarvot kuin matriisilla A. Sama operaatio voidaan nyt toistaa matriisille ÂA, jne. Lopputuloksena syntyy jono matriiseja A (k) = (Q (k) ) 1 AQ (k), joille on voimassa i > j : lim k a (k) i j = 0. Esimerkki 4.2. Tarkastellaan kuvan 4.1 mukaista jousi massa-systeemiä. Jos jätetään kitka huomiotta, niin massojen m i poikkeamat x i (t) vaakasuuntaan lepotilasta voidaan
46 LUKU 4. OMINAISARVOTEHTÄVISTÄ k 1 m k 2 1 m k 3 2 m 3 Kuva 4.1: Yksinkertainen kitkaton jousi massa-systeemi laskea differentiaaliyhtälöryhmästä (k 1 + k 2 )x 1 (t) k 2 x 2 (t) = m 1 x 1(t) (4.8) k 2 x 1 (t) + (k 2 + k 3 )x 2 (t) = m 2 x 2(t) (4.9) k 3 x 2 (t) + k 3 x 3 (t) = m 3 x 3(t). (4.10) Etsitään tilannetta, jossa kaikki massat värähtelevät samalla (tuntemattomalla) taajuudella ω. Tehdään yrite x i (t) = v i cos(ωt), i = 1,2,3, missä v = (v 1,v 2,v 3 ) on tuntematon vektori. Sijoittamalla yrite yhtälöihin (4.8) (4.10) havaitaan, että ω:n ja v:n on toteutettava yhtälöryhmä k 1 +k 2 k 2 m 1 m 1 0 k 2 k 2 +k 3 k 3 m 2 m 2 m 2 k 0 3 k 3 m 3 m 3 v 1 v 2 v 3 = λ v 1 v 2 v 3, (4.11) missä λ = ω 2. Eli ominaisarvotehtävän ratkaisuksi saadaan jousi massa-systeemin kolme ominaisvärähtelytaajuutta ja ominaismuotoa, jotka vastaavat yhtälön (4.11) kolmea ominaisparia (λ i,v (i) ), i = 1,2,3. Olkoon yksinkertaisuuden vuoksi m i = k i = 1, i = 1,2,3. Lasketaan (4.11):n ominaisarvot QR-menetelmällä. 2.80 0.75 0.00 3.22 0.23 0.00 A (1) = 0.75 1.99 0.16 A (3) = 0.23 1.59 0.00 0.00 0.16 0.21 0.00 0.00 0.20 3.25 0.03 0.00 A (6) = 0.03 1.56 0.00 A (9) = 0.00 0.00 0.20 3.25 0.00 0.00 0.00 1.56 0.00 0.00 0.00 0.20 Ominaisarvojen likiarvot ovat siis λ 1 3.25, λ 2 1.56 ja λ 3 0.20. QR-hajotelman laskeminen täydelle matriisille on melko työläs tehtävä. Siksi QRmenetelmän käytännön toteutuksessa matriisi A muunnetaan similaarimuunnoksilla melkein yläkolmiomatriisiksi. Tällaiselle, ns. Hessenberg-matriisille QR-hajotelman muodostaminen on laskennallisesti edullista. QR-menetelmän huono puoli on siinä, että QR-hajotelma tärvelee matriisin harvuuden. Täten menetelmä ei sovi suurille ja harvoille matriiseille.
Luku 5 Interpolointi ja approksimointi Aina ei välttämättä tunneta funktion f : R R analyyttistä lauseketta, vaan funktion arvoja on taulukoituna tietyissä pisteissä. Haluttaessa funktion arvo pisteessä, jota ei ole taulukoitu, on alkuperäinen funktio korvattava jollakin yksinkertaisemmalla funktiolla ja approksimoitava tällä funktion f arvoa halutussa pisteessä. Interpoloinnissa halutaan approksimoivan funktion p kuvaajan kulkevan taulukoitujen pisteiden (x i,y i ), y i := f (x i ) kautta, ts. p(x i ) = y i, i = 0,...,n. (5.1) Tällöin interpolointi tuottaa funktion (interpolantin) p, joka approksimoi funktiota f muissa pisteissä x x i. Ennen tietokoneita mm. trigonometristen funktioiden arvot saatiin interpoloimalla taulukoista. Useat numeeriset menetelmät perustuvat interpoloinnin käyttöön (numeerinen integrointi, differentiaaliyhtälöiden numeeriset ratkaisumenetelmät, tietokonegeometria,... ). Usein puhutaan interpoloinnista vain jos piste x, jossa approksimaatio halutaan, on joidenkin havaintopisteiden x i1 ja x i2 välissä. Jos taas piste x on havaintojen ulkopuolella (x < min{x i } tai x > max{x i }), niin puhutaan ekstrapoloinnista. Interpolantti valitaan yleensä jostakin yksinkertaisesta funktioluokasta, jotta se olisi helppo konstruoida. Yleisesti käytettyjä ovat polynomit, rationaalifunktiot ja paloittaiset polynomit. Yleisesti interpolantilla ei välttämättä ole jatkuvia ensimmäisen tai korkeamman kertaluvun derivaattoja. Tässä esityksessä rajoitutaan tapauksiin, joissa interpolantit ovat polynomeja tai paloittain polynomeja. Yleisessä käyränsovituksessa ei vaadita pisteittäistä osuvuutta, vaan tarkastellaan yleisemmin osuvuutta koko tarkasteluvälillä, ja etsitään funktiota p siten, että p f jollakin sopivalla normilla mitattuna (esim. PNS-sovitus). 5.1 Polynomi-interpolaatio Olkoon annettu n + 1 kappaletta datapisteitä (x i,y i ), i = 0,...,n siten, että x i x j, kun i j. Etsitään interpolanttia p lineaarikombinaationa annetuista kantafunktioista ϕ 0,...,ϕ n, eli funktio p on muotoa n p(x) = a j ϕ j (x), (5.2) j=0 47
48 LUKU 5. INTERPOLOINTI JA APPROKSIMOINTI missä kertoimet a 0,...,a n ovat vapaita parametreja, Koska funktion p tulee toteuttaa interpolaatioehto (5.1), saadaan kertoimet a 0,...,a n lineaarisesta yhtälöryhmästä Yhtälöryhmä (5.3) voidaan kirjoittaa matriisimuodossa n a j ϕ j (x i ) = y i, i = 0,...,n. (5.3) j=0 Xa = y, (5.4) missä X = (ϕ j (x i )) n i, j=0, a = [a 0,a 1,...,a n ] T ja y = [y 0,y 1,...,y n ] T. 5.1.1 Vandermonden ja Lagrangen interpolaatiopolynomit Suoraviivainen valinta kantafunktioiksi ϕ j on monomit ϕ j (x) = x j, j = 0,...,n, jolloin funktio p on n-asteinen polynomi. Matriisi X on tässä tapauksessa muotoa 1 x 0 x0 2 x0 3... x0 n 1 x 1 x1 2 x1 3... x n 1 X = (5.5). 1 x n xn 2 xn 3... xn n ja sitä sanotaan Vandermonden matriisiksi. Olkoon x 0,x 1,...,x n erisuuria reaali- (tai kompleksi-) lukuja ja y 0,y 1,...,y n vastaavat funktion arvot. Tutkitaan nyt sellaisen polynomin olemassaoloa, jolle on voimassa interpolaatioehto (5.1). Lause 5.1. Olkoon annettu n + 1 datapistettä (x 0,y 0 )...,(x n,y n ), missä kaikki luvut x i ovat erisuuria. Tällöin on olemassa enintään astetta n oleva polynomi p, joka on interpolaatiotehtävän (5.1) ratkaisu. Tämä polynomi on yksikäsitteinen korkeintaan astetta n olevien polynomien joukossa. Todistus. Olkoon X pisteistöön liittyvä Vandermonden matriisi. Jos Xz = 0 jollekin z R n+1, niin polynomi, jonka kertoimet ovat z i, i = 0,...,n, on korkeintaan astetta n ja sillä on ainakin n + 1 nollakohtaa x i, i = 0,...n. Siten vektoria z vastaavan polynomin täytyy olla identtisesti nolla, jolloin myös z = 0. Täten matriisi X on kääntyvä ja yhtälöryhmällä (5.4) on yksikäsitteinen ratkaisu. Olkoon q mielivaltainen korkeintaan n-asteinen polynomi, joka toteuttaa ehdon (5.1). Olkoon r := p q, jolloin r on enintään n-asteinen polynomi ja r(x i ) = p(x i ) q(x i ) = y i y i = 0, i = 0,...,n. Koska polynomilla r on n + 1 nollakohtaa, niin r(x) 0. Siis p = q. Interpolaatiopolynomia ei yleensä muodosteta Vandermonden matriisia kolmioimalla. Vandermonden matriisi on häiriöaltis, koska monomit x j alkavat muistuttaa liikaa toisiaan, kun n on suuri. Käyttämällä muita polynomikantoja monomien sijaan, voidaan
5.1. POLYNOMI-INTERPOLAATIO 49 interpolaatiopolynomi konstruoida suoraan ilman lineaarisen yhtälöryhmän kolmiointia. Lauseen 5.1 mukaan päädytään aina samaan polynomiin kannasta riippumatta. Interpolaatiopolynomin Lagrangen muoto saadaan valitsemalla kantafunktioiksi n- asteiset polynomit l j (x) = n k=0 k j ( x xk x j x k ), j = 0,...,n. (5.6) Koska l j (x i ) = δ i j, niin matriisi X = I ja yhtälöryhmän (5.4) ratkaisu on triviaalisti a = y, joten interpolaatiopolynomi saa muodon p(x) = n y j l j (x). (5.7) j=0 Esimerkki 5.1. Yleiset ensimmäisen ja toisen asteen Lagrangen interpolaatiopolynomit: p 1 (x) = x x 1 x 0 x 1 y 0 + x x 0 x 1 x 0 y 1, p 2 (x) = (x x 1)(x x 2 ) (x 0 x 1 )(x 0 x 2 ) y 0 + (x x 0)(x x 2 ) (x 1 x 0 )(x 1 x 2 ) y 1 + (x x 0)(x x 1 ) (x 2 x 0 )(x 2 x 1 ) y 2. Toisen asteen interpolaatiopolynomi, joka kulkee pisteiden (0, 1), ( 1, 2) ja (1, 3) kautta: p 2 (x) = (x + 1)(x 1) (x 0)(x 1) (x 0)(x + 1) 1 + 2 + (0 + 1)(0 1) ( 1 0)( 1 1) (1 0)(1 + 1) 3 = 1 + 1 2 x + 3 2 x2. Huomautus 5.1. Interpolaatiopolynomin olemassaolo tai konstruointi tässä luvussa esitettävillä menetelmillä ei vaadi datapisteiden järjestämistä siten, että x i < x j, kun i < j. Tätä voidaan hyödyntää esimerkiksi silloin kun datapisteitä lisätään myöhemmin interpolaation tarkkuuden parantamiseksi. Toisaalta tarpeeton epäjärjestys voi hämätä esimerkiksi dataa visualisoitaessa tai ohjelmaa debugattaessa. 5.1.2 Newtonin muoto interpolaatiopolynomille Lagrangen interpolaatiopolynomin tapauksessa kertoimien a j laskeminen oli triviaalia, mutta kantafunktioiden l j lausekkeet olivat melko monimutkaisia. Parempi tasapaino kertoimien ja kantafunktioiden vaatiman laskennan välillä saadaan käyttämällä Newtonin kantafunktiota { 1, j = 0, π j (x) = j 1 k=0 (x x (5.8) k), j = 1,...,n. Tällöin yhtälöryhmän (5.4) kerroinmatriisi on alakolmiomatriisi, koska selvästikin π j (x i ) = 0, kun i < j. Esimerkiksi tapauksessa n = 2, matriisi on muotoa 1 0 0 X = 1 x 1 x 0 0. (5.9) 1 x 2 x 0 (x 2 x 0 )(x 2 x 1 )
50 LUKU 5. INTERPOLOINTI JA APPROKSIMOINTI Interpolaatiopolynomi voidaan siis esittää muodossa p n (x) = a 0 + a 1 (x x 0 ) + a 2 (x x 0 )(x x 1 ) + + a n (x x 0 )(x x 1 )...(x x n 1 ) (5.10) ja sen arvo annetussa pisteessä t lasketaan tehokkaasti seuraavalla algoritmilla: Algoritmi 5.1. Laske Newtonin interpolaatiopolynomin arvo p := a n do i = n 1,n 2,...,0 p := a i + (t x i ) p end do Newtonin muotoon interpolaatiopolynomille päädytään seuraavan päättelyn tuloksena. Konstruoidaan n-asteinen interpolaatiopolynomi n 1-asteisen interpolaatiopolynomin avulla lisäämällä siihen sopiva korjaustermi: p n (x) = p n 1 (x) +C(x). (5.11) Tällöin korjaustermi C on enintään n-asteinen polynomi. Koska sekä p n että p n 1 interpoloivat dataa n:ssä ensimmäisessä pisteessä, niin C(x i ) = p n (x i ) p n 1 (x i ) = y i y i = 0, i = 0,...,n 1. Täten polynomi C on muotoa Koska p n (x n ) = y n, niin C(x) = a n (x x 0 )(x x 1 )...(x x n 1 ). a n = y n p n 1 (x n ) (x n x 0 )...(x n x n 1 ). (5.12) Tätä kerrointa a n sanotaan funktion f kertalukua n olevaksi Newtonin jaetuksi differenssiksi ja merkitään f [x 0 ] := a 0 = f (x 0 ), f [x 0,x 1,...,x n ] := a n, n 1. (5.13) Interpolaatiopolynomille saadaan siten muoto p n (x) = p n 1 (x) + (x x 0 )...(x x n 1 ) f [x 0,...,x n ]. (5.14) Yhtälön (5.14) nojalla voidaan nyt kirjoittaa Newtonin muoto interpolaatiopolynomil- p 0 (x) = f [x 0 ], p 1 (x) = f [x 0 ] + (x x 0 ) f [x 0,x 1 ],. (5.15) le: p n (x) = f [x 0 ] + (x x 0 ) f [x 0,x 1 ] + (x x 0 )(x x 1 ) f [x 0,x 1,x 2 ] +... + (x x 0 )...(x x n 1 ) f [x 0,...,x n ].
5.1. POLYNOMI-INTERPOLAATIO 51 Lause 5.2. Jaetuille differensseille on voimassa ( j 1,i = 0,..., j 1): f [x i,x i+1,...,x j ] = f [x i+1,...,x j ] f [x i,...,x j 1 ] x j x i. (5.16) Todistus. Olkoon p k enintään k-astetta oleva polynomi, joka interpoloi dataa pisteissä x 0,...,x k. Olkoon q enintään n 1-asteinen polynomi, joka interpoloi dataa pisteissä x 1,...,x n. Tällöin on voimassa p n (x) = q(x) + x x n x n x 0 [q(x) p n 1 (x)]. (5.17) Tämä seuraa siitä, että yhtälön (5.17) molemmat puolet ovat enintään n-asteisia polynomeja ja saavat samat arvot pisteissä x 0,...,x n. Täten molempien polynomien täytyy olla identtiset. Vasemman puoleisessa polynomissa p n termin x n kerroin on f [x 0,x 1,...,x n ] ja oikeanpuoleisessa 1 x n x 0 f [x 1,x 2,...,x n ] 1 x n x 0 f [x 0,x 1,...,x n 1 ]. Koska kertoimien pitää olla samoja, niin päädytään yhtälöön (5.16). Seuraava taulukkoesitys havainnollistaa jaettujen differenssien konstruointia (tässä f [x i ] = f (x i ),i = 0,...,n): x 0 f [x 0 ] f [x 0,x 1 ] f [x 0,x 1,x 2 ] f [x 0,x 1,x 2,x 3 ] x 1 f [x 1 ] f [x 1,x 2 ] f [x 1,x 2,x 3 ] x 2 f [x 2 ] f [x 2,x 3 ] x 3 f [x 3 ] Taulukon sarakkeet muodostetaan vasemmalta oikealle. Ylin rivi antaa polynomin muodostamisessa tarvittavat kertoimet. Interpolaatiopolynomin arvon laskemista varten tarvitaan ainoastaan jaettujen differenssien taulun ylin rivi, joka voidaan tietokonetoteutuksessa tallentaa yhteen vektoriin d = [d 0,d 1,...,d n ]. Jos alustetaan d i := f (x i ), i = 0,1,...,n, niin seuraava algoritmi korvaa vektorin d jaetuilla differensseillä siten, että d i = f [x 0,...,x i ]. Algoritmi 5.2. Jaettujen differenssien muodostaminen do i = 1,2,...,n do j = n,n 1,...,i d j := (d j d j 1 )/(x j x j i ) end do end do Esimerkki 5.2. Muodostetaan esimerkin 5.1 dataa interpoloiva polynomi jaettujen differenssien avulla. Jaettujen differenssien tauluksi saadaan tässä tapauksessa -1 2 0 1 1 3 1 2 0 ( 1) = 1 2 ( 1) 1 ( 1) = 3 2 3 1 1 0 = 2
52 LUKU 5. INTERPOLOINTI JA APPROKSIMOINTI ja ensimmäisen rivin differenssien avulla saadaan interpolaatiopolynomiksi p 2 (x) = 2 + ( 1) (x + 1) + 3 2 (x + 1)(x 0) = 3 2 x2 + 1 2 x + 1. Esimerkki 5.3. Lasketaan funktio f (x) = sinx pisteissä 0, π 4, π 2, 3π 4,π ja muodostetaan funktiota f näissä pisteissä interpoloiva neljännen asteen interpolaatiopolynomi p 4. Konstruoidaan ensiksi dataa vastaava jaettujen differenssien taulu: x i f (x i ) f [x i,x i+1 ] f [x i,x i+1,x i+2 ] f [x i,...,x i+3 ] f [x i,...,x i+4 ] 0.0000000 0.0000000 0.9003163-0.3357489-0.05902388 0.03757577 0.7853981 0.7071067 0.3729232-0.4748206 0.05902388 1.5707963 1.000000-0.3729232-0.3357489 2.3561944 0.7071067-0.9003163 3.1415927 0.000000 Tämän taulun avulla voidaan muodostaa interpolaatiopolynomi p 4, jolle esimerkiksi p 4 (1) = 0.8417364 ja p 4 (2) = 0.9095358, funktion f arvojen ollessa f (1) = 0.8414709 ja f (2) = 0.9092974. 5.1.3 Etenevät ja takenevat differenssit Jos funktio f on taulukoitu välillä [a,b] tasavälisessä pisteistössä x j = a + jh, j = 0,...,n, h = b a n, (5.18) niin Newtonin muoto interpolaatiopolynomille voidaan muodostaa hiukan yksinkertaisemmin. Määritelmä 5.1. Olkoon annettu kaavan (5.18) mukaiset pisteet x j ja olkoon f j = f (x j ). Etenevä differenssi i f j on luku { i f j, i = 0 f j = i 1 f j+1 i 1 (5.19) f j, i > 0. Tasavälisessä pisteistössä jaettu differenssi voidaan esittää etenevän differenssin avulla. On näet helppo osoittaa, että kaikille ei-negatiivisille kokonaisluvuille i on voimassa f [x k,...,x k+i ] = 1 i!h i i f k. (5.20) Täten Newtonin interpolaatiopolynomi tasavälisessä pisteistössä saadaan kaavasta p n (x 0 + sh) = n i=0 i f 0 ( si ), (5.21) ( ) si missä s = (x x 0 )/h R ja on binomifunktio ( ) 1, i = 0, si i 1 = s l l + 1, i > 0. (5.22) Välittömästi todetaan, että l=0 p n (x 0 + sh) = p n 1 (x 0 + sh) + n f 0 ( sn ). (5.23)
5.1. POLYNOMI-INTERPOLAATIO 53 Esimerkki 5.4. Lasketaan kaavan (5.23) avulla muutamia interpolaatiopolynomeja: p 0 (x 0 + sh) = f 0, p 1 (x 0 + sh) = f 0 + f 0 ( s1 ) = f 0 + ( f 1 f 0 )s, p 2 (x 0 + sh) = f 0 + ( f 1 f 0 )s + 2 f 0 ( s2 ) = f 0 + ( f 1 f 0 )s + 1 2 ( f 2 2 f 1 + f 0 )s(s 1). Usein (esimerkiksi differentiaaliyhtälöiden ratkaisun yhteydessä) tarvitaan mahdollisuutta lisätä interpolaatiopisteitä taaksepäin. Takeneva differenssi i f j on luku { fn i j, i = 0, f n j = i 1 f n j i 1 f n j 1, i > 0. Tällöin Newtonin interpolaatiopolynomi voidaan esittää takenevien differenssien avulla muodossa n ( ) p n (x) = p n (x n sh) = i f s + i 1 n i, missä s = (x n x)/h. i=0 5.1.4 Interpolaatiovirheestä Jos funktio f korvataan interpolaatiopolynomilla p n, niin yleensä f (x) p n (x), jos x ei ole interpolaatiopiste. Interpolaatiovirhettä voidaan arvioida seuraavan lauseen avulla. Lause 5.3. Olkoon f C (n+1) ([a,b]) ja olkoon p n P n interpolaatiopolynomi siten, että p n (x i ) = f (x i ), i = 0,...,n, missä a x 0 < x 1 <... < x n b. Tällöin jokaiselle x ]a,b[ on olemassa ξ x ]a,b[ siten, että 1 f (x) p n (x) = (n + 1)! f (n+1) (ξ x ) n i=0 (x x i ). (5.24) Todistus. Olkoon w(x) := (x x 0 )(x x 1 )...(x x n ). Valitaan mielivaltainen piste t [a,b]. Nyt on olemassa vakio K siten, että funktio F(x) := f (x) p n (x) Kw(x) häviää pisteessä t. Tällöin funktiolla F on n + 2 nollakohtaa välillä [a, b]. Vastaavasti derivaatalla F on ainakin n+1 nollakohtaa, jne. Erityisesti derivaatalla F (n+1) on ainakin yksi nollakohta ξ x, jossa siis sillä p (n+1) n ja edelleen = 0. Siis F (n+1) (ξ x ) = f (n+1) (ξ) K (n + 1)! = 0, K = f (n+1) (ξ) (n + 1)! f (t) p n (t) = f (n+1) (ξ x ) (n + 1)! w(t), koska oletuksen mukaan F(t) = 0.
54 LUKU 5. INTERPOLOINTI JA APPROKSIMOINTI Tasaväliselle pisteistölle edellinen lause voidaan esittää myös seuraavassa muodossa. Lause 5.4. Olkoon a = x 0 < x 1 < < x n = b tasavälinen pisteistö, h = x i+1 x i ja f C (n+1) ([a,b]). Silloin f (x) p n (x) M n 4(n + 1) hn+1, x [a,b], (5.25) missä M n = max f (n+1) (x). x [x 0,x n ] Todistus. Olkoon t [a,b] kiinnitetty ja olkoon k siten, että t [x k,x k+1 ]. Tällöin w(t) = (t x 0 )...(t x k 1 ) (t x k ) (t t k+1 ) (t x k+2 )...(t x n ) Siis w(t) n! 4 hn+1. (k + 1)!h k h2 4 (n k)!hn k 1. Esimerkki 5.5. Olkoon f (x) = sinx, x 0 = 0 ja x n = π. Tällöin max f (x) p n(x) 1 h n+1, x [x 0,x n ] joten polynomi p n suppenee tasaisesti kohti funktiota f välillä [0,π], kun interpolaatiopisteiden lukumäärää n kasvatetaan rajatta. Epäyhtälöä (5.25) on käytettävä varoen, sillä vakio M n yleensä riippuu myös interpolaatiopolynomin asteesta n. Lisäksi vakion M n laskeminen mielivaltaiselle funktiolle f on käytännössä aivan liian työlästä. Funktion f sileys ja datapisteiden paljous ei takaa pientä interpolaatiovirhettä, kuten seuraava klassinen Rungen esimerkki osoittaa. Esimerkki 5.6. Olkoon interpoloitava funktio f (x) = (1 + x 2 ) 1. Olkoon p n interpolaatiopolynomi, joka interpoloi funktiota f tasavälisissä pisteissä välillä [ 5,5]. Silloin voidaan osoittaa, että lim max f (x) p n(x) =. n x [ 5,5] Siis datapisteiden lisääminen lisää maksimi interpolaatiovirhettä. Kuvassa 5.1 on havainnollistettu interpolaatiopolynomin p 10 käyttäytymistä. Voidaan osoittaa, että tasavälisiin pisteistöihin liittyvät interpolaatiopolynomit p n suppenevat tasaisesti kohti funktiota f vain jos f on ns. analyyttinen funktio koko kompleksitasossa. Rungen funktio ei ole tällainen, koska sillä on singulariteetit kompleksitason pisteissä z = ±i. Mikäli interpolaatiopisteiden paikat voidaan itse valita, niin tasavälinen pisteistö ei yleensä ole optimaalinen. Pyritään seuraavassa valitsemaan interpolaatiopisteet erikoistapauksessa [a,b] = [ 1,1] siten, että epäyhtälössä (5.24) esiintyvän termin n i=0 (x x i) itseisarvon maksimi minimoituu.
5.1. POLYNOMI-INTERPOLAATIO 55 2 f.dat p10.dat 1.5 1 0.5 0-0.5-4 -2 0 2 4 Kuva 5.1: Oskilloiva interpolaatiopolynomi Eräs ns. ortogonalisten polynomien luokka on Tšebyševin polynomit, ja ne voidaan määritellä rekursiivisesti T 0 (x) = 1, T 1 (x) = x, T n+1 (x) = 2xT n (x) T n 1 (x), n 1. (5.26) Välillä [ 1,1] polynomit T n voidaan lausua myös trigonometristen funktioiden avulla Esityksestä (5.27) nähdään välittömästi, että T n (x) = cos(n arccosx), n 0. (5.27) T n (x) 1, x 1, (5.28) ( )) 2i + 1 T n (cos 2n π = 0, i = 0,...,n 1. (5.29) Nyt voidaan osoittaa, että jos interpolaatiopisteiksi valitaan Tšebyševin polynomin T n+1 juuret ( ) 2i + 1 x i = cos 2n + 2 π, i = 0,...,n, niin f (x) p n (x) 1 2 n (n + 1)! max t 1 f (n+1) (t), x 1. (5.30) Yleiseen väliin [a,b] liittyvät Tšebyševin interpolaatiopisteet { x i } saadaan välin [ 1,1] interpolaatiopisteistä {x i } affiinimuunnoksella x i = 1 2 (a + b) + 1 2 (b a)x i.
56 LUKU 5. INTERPOLOINTI JA APPROKSIMOINTI 1.2 1 cheby10.dat cheby20.dat 0.8 0.6 0.4 0.2 0-0.2-4 -2 0 2 4 Kuva 5.2: Rungen funktiota Tšebyševin pisteissä interpoloivat polynomit p 10 ja p 20 Esimerkki 5.7. Kuvassa 5.2 on esitetty Rungen funktiota välillä [ 5,5] interpoloivat polynomit p 10 ja p 20, kun interpolaatiopisteinä on käytetty Tšebyševin interpolaatiopisteitä. Tässä tapauksessa p n f tasaisesti, kun interpolaatiopisteiden lukumäärä n kasvaa rajatta. 5.2 Hermiten interpolointi Interpolaatioehdon (5.1) toteuttavaa polynomia sanotaan yleisesti Lagrangen interpolaatiopolynomiksi. Jos interpolaatioehto sisältää funktion arvon lisäksi myös derivaattojen arvoja, sanotaan ehdon toteuttavaa polynomia Hermiten interpolaatiopolynomiksi. Käytännössä taulukoidusta funktiosta ei tunneta ensimmäisen saatika korkeamman kertaluvun derivaattoja. Hermiten interpolaatiota käytetäänkin yleensä osana muita laskennallisia menetelmiä (differentiaaliyhtälöt, visualisointi). Rajoitutaan seuraavassa tapaukseen, jossa interpolaatioehto kohdistuu funktion ja sen ensimmäisen derivaatan arvoihin interpolaatiopisteissä: p(x i ) = y (0) i, p (x i ) = y (1) i, i = 0,...,n. (5.31) Esimerkki 5.8. Tarkastellaan Hermiten interpolaation erikoistapausta p(x 0 ) = y (0) 0, p (x 0 ) = y (1) 0, p(x 1) = y (0) 1, p (x 1 ) = y (1) 1. (5.32) Koska vapaita parametreja on neljä, niin etsitään muotoa p(x) = α + β(x x 0 ) + γ(x x 0 ) 2 + δ(x x 0 ) 2 (x x 1 ) olevan kolmannen asteen polynomin kertoimet siten, että ehto (5.32) on voimassa. Kertoimien määräämistä varten tarvitaan luonnollisestikin myös polynomin p derivaatan lauseke p (x) = β + 2γ(x x 0 ) + 2δ(x x 0 )(x x 1 ) + δ(x x 0 ) 2.
5.3. PALOITTAINEN INTERPOLOINTI 57 Interpolaatioehdosta (5.32) saadaan lineaarinen yhtälöryhmä α = y (0) 0 β = y (1) 0 α + β(x 1 x 0 ) + γ(x 1 x 0 ) 2 = y (0) 1 β + 2γ(x 1 x 0 ) + δ(x 1 x 0 ) 2 = y (1) 1 ja sen ratkaisuksi α = y (0) y(0) 0, β = y(1) 0, γ = 0 + (x 1 x 0 )y (1) 0 y (0) 1 (x 1 x 0 ) 2, δ = 2y(0) 0 2y (0) 1 + (x 1 x 0 )(y (1) 0 + y (1) 1 ) (x 1 x 0 ) 3. Etsitään nyt yleisen interpolaatiotehtävän (5.31) ratkaisua lineaarikombinaationa p(x) = n a (0) n j ϕ j (x) + a (1) j ψ j (x). (5.33) j=0 j=0 Kantafunktiot ϕ j,ψ j voidaan konstruoida esimerkiksi pisteistöön {x i } liittyvien Lagrangen kantafunktioiden {l j } avulla seuraavasti: ϕ j (x) = [ 1 2(x x j )l j(x) ] l 2 j(x), ψ j (x) = (x x j )l 2 j(x), j = 0,...,n. j = 0,...,n Tällöin kantafunktiot ϕ j ja ψ j ovat astetta 2n+1 olevia polynomeja. Lagrangen kantafunktioiden ominaisuuksista seuraa, että { { ϕ j (x i ) = δ i j ψ j (x i ) = 0 ϕ j(x i ) = 0 ψ (5.34) j(x i ) = δ i j. Interpolaatioehdosta (5.31) ja yhtälön (5.34) perusteella saadaan polynomin p kehitelmän kertoimille a (k) j suoraan arvot a (0) j = y (0) j, a (1) j = y (1) j, j = 0,...,n. Samaan tapaan kuin Lagrangen interpolaation tapauksessa voidaan myös Hermiten interpolaatiolle johtaa virhearvio. Lause 5.5. Jos f C (2n+2) ([a,b]) ja polynomi p P 2n+1 toteuttaa ehdon (5.31), niin jokaiselle x [a,b] on olemassa ξ x ]a,b[ siten, että f (x) p(x) = f (2n+2) (ξ x ) (2n + 2)! n i=0 (x x i ) 2. 5.3 Paloittainen interpolointi Kuten edellä havaittiin, jono interpolaatiopolynomeja ei välttämättä lähesty interpoloitavaa sileää funktiota, kun interpolaatiopisteitä lisätään. Tasavälinen pisteistö ja korkeaasteinen interpolaatiopolynomi aiheuttavat usein voimakasta oskillointia, vieläpä sitä voimakkaammin mitä korkeamman asteen polynomia käytetään. Näistä ikävistä ominaisuuksista päästään eroon jakamalla havaintoväli osaväleihin havaintopisteiden avulla ja käyttämällä osaväleillä paloittaisia, matala-asteisia polynomeja. Edelleen vaaditaan, että osaväleiltä yhdistetty funktio on sileä. Sileimpiä tällaisia funktioita ovat splinit, jotka määritellään seuraavasti:
58 LUKU 5. INTERPOLOINTI JA APPROKSIMOINTI Määritelmä 5.2. Olkoon väli I = [a,b] jaettu n:ään osaväliin pisteillä a = t 0 < t 1 <... < t n 1 < t n = b. Funktio s : I R on k-asteinen splini, jos seuraavat ehdot ovat voimassa: 1. Jokaisella osavälillä I i = [t i 1,t i ], i = 1,...n, funktio s on korkeintaan k-asteinen polynomi. 2. Funktiolla s on välillä I jatkuvat derivaatat kertalukuun k 1 asti. Pisteitä t i sanotaan splinin solmuiksi. Yksinkertaisin, ensimmäisen asteen splini on paloittain lineaarinen funktio, joka ei ole vielä kovinkaan sileä. Toisen asteen splini on paloittain kvadraattinen funktio; lisäksi sen derivaatta on jatkuva koko välillä I. Matala-asteiset splinit sopivat erinomaisesti interpolaatiotehtäviin, koska niillä ei ole taipumusta oskillointiin. Yleisimmin käytetty splini on kolmannen asteen splini eli kuutiosplini, koska se on käytännössä riittävän sileä, mutta samalla helpohkosti konstruoitava. Splinien käyttömahdollisuudet eivät rajoitu vain interpolaatioon. Yleisempi funktion approksimaatio, numeerinen integrointi ja differentiaaliyhtälöiden ratkaiseminen voidaan tehdä splinien avulla. Myös tietokonegrafiikassa käytetään usein splinejä sileiden käyrien ja pintojen muodostamiseen. 5.3.1 Kuutiosplinin käyttö interpolaatiotehtävässä Tarkastellaan seuraavassa yksityiskohtaisesti interpoloinnin toteutusta kuutiosplinin avulla. Olkoon annettu datapisteistö (t i,y i ), i = 0,...,n ja merkitään Splinin tulee nyt toteuttaa interpolointiehto h i := t i t i 1, i = 1,2,...,n. (5.35) s(t i ) = y i, i = 0,...,n. (5.36) Kuutiosplinin määritelmän perusteella s, s ja s ovat jatkuvia välillä I. Koska s on paloittain kuutiollinen polynomi, on s paloittain kvadraattinen polynomi ja s paloittain lineaarinen polynomi. Siten jokaisella osavälillä I i splini voidaan kirjoittaa muodossa s (x) = M i 1 t i x h i joillakin tuntemattomilla vakioilla M i, joille on itse asiassa + M i x t i 1 h i, x I i (5.37) s (t i ) = M i, i = 0,...,n. (5.38) Integroimalla (5.37) kahdesti saadaan välillä I i s(x) = M i 1 (t i x) 3 6h i + M i (x t i 1 ) 3 6h i + c i (t i x) + d i (x t i 1 ). (5.39)
5.3. PALOITTAINEN INTERPOLOINTI 59 Seuraavaksi määrätään vakiot c i,d i asettamalla interpolointiehto s(t i 1 ) = y i 1 ja s(t i ) = y i. Saadaan (t i x) 3 (x t i 1 ) 3 s(x) = M i 1 + M i 6h i 6h ( i + y i 1 M i 1h 2 ) ( i ti x + y i M ih 2 ) i x ti 1 (5.40) 6 h i 6 h i taas välillä I i,i = 1,...,n. Derivoimalla (5.40) saadaan s (t i x) 2 (x t i 1 ) 2 (x) = M i 1 + M i + y i y i 1 2h i 2h i h i ja erityisesti välin I i päätepisteessä t i saadaan toispuoleisiksi derivaatoiksi s (t i ) = h i 6 M i 1 + h i 3 M i + y i y i 1 h i, s (t + i ) = h i+1 3 M i h i+1 6 M i+1 + y i+1 y i h i+1. M i M i 1 h i (5.41) 6 Koska s on jatkuva välillä I, on oltava s (t i ) = s (t + i ), i = 1,...,n 1, joten saadaan yhtälöt h i 6 M i 1 + h i + h i+1 M i + h i+1 3 6 M i+1 = y i+1 y i y i y i 1, i = 1,...,n 1. (5.42) h i+1 h i Täten käytössä on n 1 yhtälöä kertoimien M 0,...,M n määräämiseksi. Yksikäsitteiseen ratkeavuuteen tarvitaan kuitenkin vielä kaksi lisäehtoa. Määritellään merkintöjen yksinkertaistamiseksi luvut σ i := y i y i 1 h i, λ i := h i+1 h i + h i+1, µ i := 1 λ i, d i := 6(σ i+1 σ i ) h i + h i+1. Tällöin saadaan yhtälöt (5.42) yksinkertaisempaan muotoon µ i M i 1 + 2M i + λ i M i+1 = d i, i = 1,...,n 1. Esitetään tarvittavat kaksi lisäehtoa muodossa 2M 0 + λ 0 M 1 = d 0, µ n M n 1 + 2M n = d n, missä λ 0,d 0,µ n,d n ovat myöhemmin määrättäviä vakioita. Nyt splinin kertoimien määrääminen on siis palautunut tridiagonaalisen yhtälöryhmän 2 λ 0 M 0 d 0 µ 1 2 λ 1 M 1 d 1 µ 2 2 λ 2 M 2 d 2.... =. (5.43) µ n 2 2 λ n 2 M n 2 d n 2 µ n 1 2 λ n 1 M n 1 d n 1 µ n 2 M n d n
60 LUKU 5. INTERPOLOINTI JA APPROKSIMOINTI ratkaisemiseen. Kun sen jälkeen kertoimet M i tunnetaan, niin splinin arvo s(x) voidaan laskea lausekkeesta (5.40). Yhtälöryhmälle (5.43) saadaan yksikäsitteinen ratkaisu, jos asetetaan jokin seuraavista ehdoista: Luonnollinen kuutiosplini, s.o. s (a) = s (b) = 0, saadaan kun yllä valitaan λ 0 = d 0 = µ n = d n = 0. Tällöin siis M 0 = M n = 0. Derivaattaehto s (a) = y 0, s (b) = y n, saadaan kun valitaan λ 0 = µ n = 1, d 0 = 6 ( ( y1 y 0 y 0 ), d n = 6hn y n y ) n y n 1. h 1 h 1 h n Not a knot -ehto saadaan asettamalla vain välin I sisäsolmut t i, i = 1,...,n 1 splinin määritteleviksi solmuiksi ja vaatimalla s(a) = y 0, s(b) = y n. Tällöin tulee yhtälöitä kaksi kappaletta vähemmän ja vakiot λ 1,d 1,µ n 1,d n 1 saadaan sijoittamalla kaavaan (5.40) x = t 0 ja x = t n. Näin ollen tässä vaihtoehdossa lisäehtoja ei tarvita. Selvästikin 0 < λ i < 1, 0 < µ i < 1, i = 1,...,n 1. Jos nyt lisäksi λ 0 < 2, µ n < 2, niin kerroinmatriisi on diagonaalisti dominantti, ja yhtälöryhmällä (5.43) on yksikäsitteinen ratkaisuvektori, joka sisältää splinin vapausasteiden arvot. Esimerkki 5.9. Olkoon annettu datapisteistö (1,1), (2, 2 1), (3, 1 3 ), (4, 1 4 ). Konstruoidaan tähän pisteistöön liittyvä luonnollinen kuutiosplini. Koska M 0 = M 3 = 0 saadaan yhtälöryhmäksi [ 2 1/2 1/2 2 ][ M1 M 2 ] = josta M 1 = 1/2 ja M 2 = 0. Splinin lauseke on siten [ ] 1 1/4 1 12 x3 1 4 x2 1 3 x + 3 2, 1 x 2 s(x) = 1 12 x3 + 3 4 x2 7 3 x + 17 6, 2 x 3 1 12 x + 7 12, 3 x 4. Kuutiosplinin voidaan ajatella syntyvän kun suora, hoikka ja taipuisa metallitanko pakotetaan kulkemaan datapisteiden kautta. Tangon taivutusenergia on 1 2 ba [s (x)] 2 dx, missä s(x) on tangon poikkeama lepotilasta pisteessä x. Seuraavassa osoitetaan, että luonnollinen kuutiosplini minimoi taivutusenergian lausekkeen. Lause 5.6. Jos luonnollinen kuutiosplini s interpoloi funktiota f C (2) ([a,b]) pisteissä a = t 0 < t 1 <... < t n = b, niin b a [s (x)] 2 dx b a [ f (x)] 2 dx. (5.44)
5.3. PALOITTAINEN INTERPOLOINTI 61 Todistus. Olkoon g := f s. Tällöin g(t i ) = 0, i = 0,...,n ja b a ( f ) 2 dx = b a (s ) 2 dx + b a (g ) 2 dx + 2 b a s g dx. Väite seuraa, kun osoitetaan, että b a s g dx 0. Koska s on paloittain vakio, niin merkitään lyhyesti c i := s ]ti 1,t i [. Tällöin saadaan b a s g dx = = n i=1 n = ti s g dx t i 1 [ (s g )(t i ) (s g )(t i 1 ) i=1 n ti = i=1 n i=1 t i 1 s g dx = n ti c i i=1 c i [g(t i ) g(t i 1 )] = 0. Edellä käytettiin hyväksi myös tietoa s (t 0 ) = s (t n ) = 0. ] s g dx t i 1 ti t i 1 g dx Kuutiosplinillä voidaan interpoloida turvallisesti myös tasavälisessä pisteistössä. Kohtuullisen sileän funktion interpolantit (ja niiden derivaatat) suppenevat tasaisesti pisteiden lukumäärää kasvatettaessa. Lause 5.7. Olkoon f C (2) ([a,b]), y i := f (t i ) ja h = maxh i. Jos luonnollinen kuutiosplini s on interpolaatiotehtävän (5.36) ratkaisu, niin interpolaatiovirheelle saadaan arviot missä max f (x) s(x) h 3 2 E( f ) (5.45) a x b max a x b f (x) s (x) h 1 2 E( f ), (5.46) b E( f ) = a [ f (x)] 2 dx. Huomautus 5.2. Vaikka splini-interpolantti käyttäytyykin hyvin välillä I, ei sitä kannata käyttää extrapolaatioon, eli funktion f approksimoimiseen välin I ulkopuolella. Kuten splinin lausekkeesta (5.40) nähdään, esimerkiksi tekijä (x t n 1 ) 3 kasvaa voimakkaasti välin I ulkopuolelle, jolloin interpolaatiovirhe kasvaa myös hyvin voimakkaasti. Tästä syystä ekstrapolaatiota on syytä välttää tai ainakin rajoituttava ekstrapoloimaan mahdollisimman lähellä annettua datapisteistöä. 5.3.2 B-splinit interpolaatiotehtävissä Luvussa 5.3.1 kuutiosplini-interpolantin konstruoinnissa ei noudatettu samaa tekniikkaa kuin polynomi-interpolaation tapauksessa. Kuitenkin myös splinit voidaan esittää lineaarikombinaationa sopivista yksinkertaisista kantafunktioista. Tarkastellaan seuraavassa kannan muodostamista spliniavaruudelle B-splinien avulla. B-splinienkään käyttö ei rajoitu vain interpolaatioon, vaan niitä käytetään useilla eri numeriikan osaalueilla.
62 LUKU 5. INTERPOLOINTI JA APPROKSIMOINTI 1 B 0 i (x) t i t i+1 x Kuva 5.3: Kantafunktion B 0 i (x) kuvaaja Määritelmä 5.3. Olkoon annettu reaaliakselilla ääretön joukko solmupisteitä < t 2 < t 1 < t 0 < t 1 < t 2 <..., (5.47) joille lim i ± t i = ±. Tähän solmupistejoukkoon liittyvä 0-asteinen B-splini on funktio { B 0 i (x) = 1, ti x < t i+1 0, muualla. (5.48) B-splini B 0 i on oikealta jatkuva porrasfunktio ja sen kuvaaja on esitetty kuvassa 5.3. Solmupistejoukkoon (5.47) liittyvät korkeamman asteen B-splinit määritellään rekursiivisesti splinistä B 0 i lähtien: Määritelmä 5.4. Astetta k oleva B-splini B k i, k 1, i Z, on funktio B k i (x) = x t i Bi k 1 (x) + t i+k+1 x B k 1 i+1 (x). (5.49) t i+k t i t i+k+1 t i+1 Merkintöjen lyhentämiseksi määritellään funktiot Vi k (x) = x t i, t i+k t i jolloin kaava (5.49) voidaan kirjoittaa muodossa B k i = V k i Bi k 1 + (1 V k i+1)b k 1 i+1. (5.50) Esimerkki 5.10. Konstruoidaan ensimmäisen asteen B-splini B 1 i : 0, x t i+2 tai x t i B 1 i (x) = x t i B 0 i (x) + t i+2 x x t i B 0, t i < x < t i+1 t i+1 t i t i+2 t i+1(x) = t i+1 t i i+1 t i+2 x, t i+1 x < t i+2. t i+2 t i+1 Tämän kuvaaja on esitetty kuvassa 5.4. Havaitaan, että B 1 i on jatkuva kaikkialla ja derivoituva pisteitä t i,t i+1 ja t i+2 lukuunottamatta. Huomaa, että B-splinit eivät ole symmetrisiä solmun t i suhteen! B-splineillä on joukko hyödyllisiä ominaisuuksia, joista tärkeimmät on listattu seuraavaan lauseeseen: Lause 5.8. B-splinille B k i on voimassa: 1. Jos k 1 ja x ]t i,t i+k+1 [, niin B k i (x) = 0. 2. Jos k 0 ja x ]t i,t i+k+1 [, niin B k i (x) > 0.
5.3. PALOITTAINEN INTERPOLOINTI 63 1 B 1 i (x) t x i t i+1 t i+2 Kuva 5.4: Ensimmäisen asteen B-splinin B 1 i kuvaaja 3. Kaikille k 1 on voimassa i= c i B k i = 4. Kaikille k 0 on voimassa 5. Jos k 1, niin B k i C(k 1) (R). i= [c i Vi k + c i 1 (1 V k i )]B k 1 i. (5.51) B k i (x) = 1. (5.52) i= 6. Jos k 2, niin B-splinin derivaatta voidaan laskea kaavasta ( ) ( ) d k dx Bk i (x) = B k 1 k i (x) B k 1 i+1 (x). (5.53) t i+k t i t i+k+1 t i+1 Kaava on voimassa myös tapauksessa k = 1 pisteitä t i,t i+1 ja t i+2 lukuunottamatta 7. B-splinin määrätty integraali voidaan laskea kaavasta x B k i (s)ds = ( ti+k+1 t i k + 1 ) B k+1 j (x). (5.54) j=i 8. Jokainen k-asteinen splini s : [t 0,t n ] R voidaan esittää yksikäsitteisesti k- asteisten B-splinien lineaarikombinaationa s(x) = n 1 i= k a i B k i (x), a i R. (5.55) Esimerkki 5.11. Olkoon funktio g : [1, 6] R pisteiden (1, 2), (3, 1), (4, 3), (6, 3) kautta kulkeva jatkuva, paloittain lineaarinen polynomi eli ensimmäisen asteen splini. Esitetään splini g ensimmäisen asteen B-splinien lineaarikombinaationa. B-splinejä varten määritellään solmupistejoukko {t 1,t 0,t 1,t 2,t 3,t 4 } = {0,1,3,4,6,7}, missä ylimääräisten pisteiden t 1 ja t 4 paikat on mielivaltaisesti valittu. Tällöin funktio g on splinin s : R R, rajoittuma välille [t 0,t 3 ]. s(x) = 2 B 1 0(x) + 1 B 1 1(x) + 3 B 1 2(x) + 3 B 1 3(x) Seuraavaksi selvitetään kuinka B-splinejä voidaan käyttää interpolointitehtävissä. On siis löydettävä kertoimet a i esitykseen s(x) = i= a i B k i k (x) (5.56) siten, että saatu splini interpoloi annettua dataa solmupisteissä, eli s(t i ) = y i, i = 0,...,n. (5.57)
64 LUKU 5. INTERPOLOINTI JA APPROKSIMOINTI 0.6 0.4 0.2 1 2 3 4 5 6 7 8 Kuva 5.5: Funktioiden B 3 0 (x), B3 1 (x), B3 2 (x) ja B3 3 (x) kuvaajat Ensimmäisen asteen (k = 1) interpoloiva splini saadaan lineaarikombinaationa s(x) = n i=0 y i B 1 i 1(x). Tässä tapauksessa interpolointiehto (5.57) määräsi kertoimet a 0,...,a n yksikäsitteisesti. Korkeamman asteen splineillä jää lisäksi vapaasti asetettavia vapausasteita. Kuutiosplinin tapauksessa (k = 3) esityksessä s(x) = n 1 i= 3 a i B 3 i (x) on n + 3 tuntematonta kerrointa. Interpolaatioehto tuottaa n + 1 yhtälöä j 1 a i B 3 i (t j ) = y j, j = 0,...,n. (5.58) i= j 3 Tarvitaan siis jälleen kaksi lisäyhtälöä. Derivaattaehto antaa lisäyhtälöt s (t j ) = j 1 i= j 3 a i d dx B3 i (t j ) = y j, j = 0,n. (5.59) Luonnollinen kuutiosplini saadaan puolestaan asettamalla lisäehdot s (t j ) = j 1 i= j 3 a i d 2 dx 2 B3 i (t j ) = 0, j = 0,n. (5.60) Jos pisteistö on tasavälinen t i+1 t i = h, niin yhtälöissä (5.58) (5.60) esiintyvät kertoimet saadaan taulukosta 5.1. t i t i+1 t i+2 t i+3 t i+4 B 3 i (x) 0 1/6 2/3 1/6 0 d dx B3 i (x) 0 1/2h 0 1/2h 0 d 2 B 3 dx 2 i (x) 0 1/h2 2/h 2 1/h 2 0 Taulukko 5.1: Matriisin B alkiot Derivaattaehdon tapauksessa ratkaistavana on siten lineaarinen yhtälöryhmä Ba = y, (5.61)
5.3. PALOITTAINEN INTERPOLOINTI 65 missä 3 3 h 0 h 1 4 1 0 0 1 4 1 0 0 B = 1................ 6............................. 0 1 4 1 0 0 0 1 4 1 3 3 h 0 h on melkein tridiagonaalinen matriisi ja a = [a 3, a 2,..., a n 2, a n 1 ] T, y = [y 0, y 0, y 1,..., y n 1, y n, y n] T. Vastaavasti luonnollisen kuutiosplinin tapauksessa kerroinmatriisi ja oikea puoli ovat muotoa 6 12 6 h 2 h 2 h 2 1 4 1 0 0 B = 1. 0............ 6.......................... 0 0 0 1 4 1 ja y = [0, y 0, y 1,..., y n, 0] T. 6 12 6 h 2 h 2 h 2 Esimerkki 5.12. Ratkaistaan esimerkin 5.9 interpolaatiotehtävä B-splinien avulla. Koska h = 1, saadaan lineaarinen yhtälöryhmä 6 12 6 B = 1 1 4 1 3 0 1 4 1 2 1 a 1 6 1 4 1 1/2 0 = 1 4 1 a 1 1/3. (5.62) 2 1/4 6 12 6 0 Tämän ratkaisuksi saadaan a = [19/12, 1, 5/12, 1/3, 1/4, 1/6] T. Sijoittamalla nämä kertoimet esitykseen s(x) = 2 i= 3 a i B 3 i (x) saadaan tulokseksi sama palapolynomi kuin esimerkissä 5.9. Tarkastellaan lopuksi kuinka lineaarikombinaation s(x) = i= C k i B k i (x) (5.63) arvo pisteessä x lasketaan tehokkaasti, kun solmupisteet {t i } ja kertoimet Ci k on annettu. Esityksestä (5.63) nähdään, että jos x [t m,t m+1 [, niin ainoastaan k + 1 kerrointa Cm, k Cm 1 k,..., Ck m k tarvitaan luvun s(x) laskemiseksi. Määritellään funktiot Ci k 1 (x) := Ci k (x)vi k (x) +Ci 1(x)[1 k Vi k (x)],
66 LUKU 5. INTERPOLOINTI JA APPROKSIMOINTI missä funktiot Ci k ovat annettuja (ja yleensä vakioita). Tällöin kaavan (5.50) avulla saadaan i= C k i B k i = = i= i= C k i [V k i Bi k 1 C k i V k i B k 1 + (1 V k i+1)b k 1 i+1 ] i + i= C k i 1(1 V k i )B k 1 i = i= C k 1 i (x)b k 1 (x). i (5.64) Kaavassa (5.64) palautettiin siis lineaarikombinaatio B-splineistä B k i lineaarikombinaatioon astetta alhaisemmista B-splineistä B k 1 i. Toistamalla tätä k 1 kertaa saadaan i= C k i (x)b k i (x) = i= C 0 i (x)b 0 i (x). Jos nyt x [t m,t m+1 [, niin s(x) = Cm. 0 Kertoimen Cm 0 laskemiseen tarvittavat kertoimet saadaan palautuskaavasta C j 1 i C j 1 i ja ne voidaan esittää kolmiomuotoisena taulukkona = C j i (x t i) +C j i 1 (t i+ j x) t i+ j t i (5.65) Cm k Cm 1 k C k 1 Cm 1 k 1... m... C 0 m.. Cm k k Taulukon ensimmäinen sarake sisältää tunnetut kertoimet. Loppu taulukosta voidaan muodostaa sarake kerrallaan vasemmalta oikealle. 5.4 Funktion approksimointi Tarkastellaan seuraavaksi interpolaatiota yleisempää funktion approksimointia. Tavoitteena on etsiä annettua funktiota f yksinkertaisempi funktio p siten, että p f jossakin mielessä. Olkoon annettu normiavaruus V (esimerkiksi jatkuvat funktiot välillä [a, b], ts. V = C([a,b]) ) ja sen (äärellisulotteinen) aliavaruus Ṽ (esimerkiksi n-asteiset polynomit). Tavoitteena on etsiä annetulle f V approksimaatio p Ṽ siten, että f p f q kaikilla q Ṽ. Lause 5.9. Olkoon V normiavaruus ja Ṽ sen äärellisulotteinen aliavaruus. Tällöin jokaiselle alkiolle f V on olemassa ainakin yksi paras approksimaatio p Ṽ. Todistus. Olkoon f V mielivaltainen. Jos p Ṽ on ehdokas parhaaksi approksimaatioksi, on sen oltava vähintään yhtä hyvä kuin nolla-alkion, eli f p f 0 f. Siten riittää etsiä parasta approksimaatiota joukosta K = {q Ṽ q f f }.
5.4. FUNKTION APPROKSIMOINTI 67 Joukko K on suljettu ja rajoitettu. Koska Ṽ on äärellisulotteinen, niin K on kompakti. Kuvaus q f q on jatkuva, realiarvoinen kuvaus. Täten sillä on minimipiste p K. 5.4.1 Tasainen polynomiapproksimaatio Tarkastellaan seuraavaksi polynomiapproksimaation p konstruointia jatkuvalle funktiolle f siten, että virheen maksiminormi f p = max f (x) p(x) a x b on mahdollisimman pieni. Tällaista approksimaatiota sanotaan tasaiseksi approksimaatioksi tai minimax-approksimaatioksi ja sitä tarvitaan tilanteissa, joissa on tärkeää, että approksimaatiovirhe saadaan pidettyä pienenä koko välillä [a, b]. Esimerkiksi tietokoneen liukulukuprosessorissa on trigonometriset funktiot implementoitu näiden tasaisten polynomiapproksimaatioiden avulla. Parasta tasaista polynomiapproksimaatiota karakterisoi maksimivirheen alternointi: Lause 5.10. Funktiolla f C([a,b]) on täsmälleen yksi minimax-polynomi p n P n. Polynomi p n P n on f :n tasainen approksimaatio välillä [a,b], jos ja vain jos on olemassa n + 2 pistettä a x 0 <... < x n+1 b siten, että ( 1) i [ f (x i ) p n (x i )] = σ f p n, i = 0,...,n + 1, (5.66) missä σ = sign( f (x 0 ) p n (x 0 )). Jos f C (n+1) ([a,b]) ja f (n+1) ei vaihda merkkiä välillä [a,b], niin a = x 0 ja b = x n+1. Esimerkki 5.13. Muodostetaan funktiolle f (x) = cos x ensimmäisen asteen minimax-polynomiapproksimaatio p 1 (x) = c 0 + c 1 x välille [0, π 2 ]. Lausetta 5.10 soveltamalla saadaan epälineaarinen yhtälöryhmä c 0 + c 1 0 cos0 = d c 0 + c 1 x 1 cosx 1 = d π c 0 + c 1 2 cos π 2 = d (5.67) c 1 + sinx 1 = 0. Tämä ratkaisemalla saadaan minimax-polynomiksi p 1 (x) = 1.10526 0.63662x. Funktio f ja polynomi p 1 on esitetty kuvassa 5.6. Maksimivirhe d = 0.105257 saavutetaan välin päätepisteissä ja pisteessä x 1 = 0.690107. Yleisessä tapauksessa minimax-polynomin konstruointi on mutkikkaampaa, mutta se onnistuu esimerkiksi Remezin algoritmilla, jossa iteroidaan pisteitä x i ja maksimivirhettä d kunnes ehto (5.66) on voimassa. Melkein minimax-polynomi saadaan toisaalta helposti muodostamalla välille [a, b] interpolaatiopolynomi Tšebyševin interpolaatiopisteitä käyttäen.
68 LUKU 5. INTERPOLOINTI JA APPROKSIMOINTI 1.2 1 cos(x) 1.10526-0.63662*x 0.8 0.6 0.4 0.2 0 0 0.2 0.4 0.6 0.8 1 1.2 1.4 Kuva 5.6: Funktio cosx ja sen ensimmäisen asteen minimax-approksimaatio 5.4.2 Pienimmän neliön approksimointi Yleinen approksimaatiotehtävä johtaa epälineaarisen algebrallisen yhtälöryhmän ratkaisemiseen. Tarkastellaan seuraavassa approksimaation erikoistapausta, pienimmän neliön approksimointia, joka palautuu lineaarisen yhtälöryhmän ratkaisemiseen. Olkoon funktioavaruus V varustettu sisätulolla,. Pienimmän neliön approksimaatiossa etsitään funktiota p aliavaruudesta Ṽ siten, että normi on mahdollisimman pieni. f p := f p, f p 1 2 Lause 5.11. Olkoon V sisätuloavaruus, Ṽ sen aliavaruus ja f V. Tällöin funktio p Ṽ on funktion f pienimmän neliön approksimaatio, jos ja vain jos f p,v = 0 kaikille v Ṽ. (5.68) Todistus. Olkoon funktio p Ṽ funktion f V paras approksimaatio. Olkoon q Ṽ ja λ > 0 mielivaltaiset. Tällöin p λq Ṽ ja Edelleen f p 2 f (p λq) 2 = f p + λq 2. 0 f p + λq 2 f p 2 = f p 2 + 2λ f p,q + λ 2 q 2 f p 2 = λ[2 f p,q + λ q 2 ]. Jakamalla puolittain vakiolla λ, saadaan f p,q λ 2 q 2. (5.69)
5.4. FUNKTION APPROKSIMOINTI 69 Koska λ oli mielivaltainen, niin epäyhtälöstä (5.69) seuraa f p,q 0. (5.70) Epäyhtälön (5.70) täytyy olla voimassa myös funktiolle q Ṽ, joten f p,q 0 eli Jos f p,q = 0 kaikille q Ṽ, niin f p,q = 0. f q 2 = ( f p) + (p q) 2 = f p 2 + 2 f p, p q + p q 2 f p 2. } {{ } =0 Siten funktio p on funktion f paras approksimaatio. Lauseen todistuksesta seuraa myös, että pienimmän neliön approksimaatio on tässä tapauksessa yksikäsitteinen. Funktion f pienimmän neliön approksimaation konstruointi on (periaatteessa) suoraviivaista. Jos {ϕ 1,...,ϕ n } on aliavaruuden Ṽ kanta, niin p = n j=1 c jϕ j. Nyt riittää vaatia, että yhtälö (5.68) on voimassa kantafunktioille {ϕ i }. Tällöin f n c j ϕ j,ϕ i = 0, j=1 i = 1,...,n eli tuntemattomien kertoimien {c j } määräämiseksi saadaan lineaarinen yhtälöryhmä joka voidaan kirjoittaa lyhyesti matriisimuodossa Matriisia A sanotaan Gramin matriisiksi. n c j ϕ j,ϕ i = f,ϕ i, i = 1,...,n, (5.71) j=1 Ac = f. (5.72) Esimerkki 5.14. Muodostetaan funktiolle f (x) = sinx muotoa p(x) = c 1 x + c 2 x 3 + c 3 x 5 oleva pienimmän neliön approksimaatio välillä [ 1,1] sisätulon u,v = 1 1 u(x)v(x) dx (5.73) määräämän normin v = v,v 1/2 mielessä. Gramin matriisin ja vastaavan oikean puolen vektorin alkiot saadaan nyt laskettua kaavoilla a i j = f i = 1 1 1 1 x 2i 1 x 2 j 1 dx = 1 1 x 2i 1 sinxdx, i = 1,2,3. x 2i+2 j 2 dx = 2, i, j = 1,2,3, 2i + 2 j 1
70 LUKU 5. INTERPOLOINTI JA APPROKSIMOINTI jolloin A = 2 3 2 5 2 7 2 5 2 7 2 9 2 7 2 9 2 11, f = Yhtälöryhmän (5.72) ratkaisuna saadaan kertoimet 2sin1 2cos1 10cos1 6sin1 130sin1 202cos1 c 1 0.9999842124, c 2 0.1665241811, c 3 0.008018110365. Koska joukko {ϕ 1,...,ϕ n } on kantana lineaarisesti riippumaton, niin Gramin matriisi on kääntyvä. Tämä ei kuitenkaan takaa numeerisesti stabiilia laskentaa. Esimerkiksi edellisen esimerkin matriisin häiriölttius on κ(a) 850. Jos kehitelmään otettaisiin enemmän termejä, niin hyvin pian vastaava Gramin matriisi olisi numeerisesti singulaarinen. Paremmin käyttäytyvä Gramin matriisi saadaan, jos kannaksi valitaan ortonormaali systeemi {ϕ 1,...,ϕ n }, jolle ϕ i,ϕ j = δ i j. (5.74) Tällöin Gramin matriisi on identtinen matriisi ja lineaariseksi yhtälöryhmäksi tulee siten. c i = f,ϕ i, i = 1,...,n. Sisätuloavaruuden äärellisulotteiselle aliavaruudelle Ṽ voidaan tuottaa ortonormaali kanta Gramin ja Schmidtin algoritmilla. Jos {v 1,v 2,...,v n } on aliavaruuden Ṽ kanta, niin määritellään i 1 ũ i = v i j=1 Tällöin {u 1,...,u n } on aliavaruuden Ṽ ortonormaali kanta. v i,u j u j, u i = ũi, i = 1,2,...,n. (5.75) ũ i Esimerkki 5.15. Ratkaistaan esimerkin 5.14 approksimaatiotehtävä normeerattujen Legendren polynomien ˆϕ 1 (x) = 1 x, ˆϕ 2 (x) = 1 (5x 3 1 3x), ˆϕ 3 (x) = (63x 5 70x 3 + 15x) 2/3 8/7 128/11 avulla. Paras approksimaatio on nyt muotoa ˆp(x) = ĉ 1 ˆϕ 1 + ĉ 2 ˆϕ 2 + ĉ 3 ˆϕ 3, missä ĉ 1 = ĉ 2 = ĉ 3 = 1 1 1 1 1 1 ˆϕ 1 sinxdx = 0.7377095899, ˆϕ 2 sinxdx = 0.03369954077, ˆϕ 3 sinxdx = 0.0004341503171. Huomaa, että lineaarikombinaation kertoimet riippuvat kantafunktioiden valinnasta. Polynomit p ja ˆp ovat kuitenkin samat.
5.4. FUNKTION APPROKSIMOINTI 71 5.4.3 Pienimmän neliösumman approksimaatio Pienimmän neliösumman approksimaatiossa oletetaan, että funktio f tunnetaan vain etukäteen kiinnitetyissä havaintopisteissä x k, k = 1,...,m, jolloin funktio f samastetaan vektoriin ˆf R m. Tehtävänä on löytää kertoimet {c j } kehitelmään p(x) = n j=1 c jϕ j (x) siten, että f p on mahdollisimman pieni, kun normi on diskreetin sisätulon u,v := m u(x k )v(x k ) k=1 määräämä, ts. f p = { m k=1[ f (x k ) p(x k )] 2 } 1 2. Paras approksimaatio saadaan jälleen laskettua ortogonaalisuusehdon f p,ϕ i = m k=1 [ f (x k ) p(x k )]ϕ i (x k ) = 0, i = 1,...,n (5.76) avulla. Yhtälöryhmä (5.76) voidaan esittää lyhyesti matriisimuodossa Ac = f, missä Gramin matriisin ja oikean puolen vektorin alkiot ovat a i j = ϕ i,ϕ j = f i = f,ϕ i = m k=1 ϕ i (x k )ϕ j (x k ), m f (x k )ϕ i (x k ), k=1 i, j = 1,...,n i = 1,...,n. Kerroinmatriisi A ja oikea puoli f voidaan esittää myös muodossa A = B T B, f = B T ˆf, missä matriisin B R m n ja vektorin ˆf alkiot ovat b i j = ϕ j (x i ), ˆf i = f (x i ). Jos havaintopisteitä on yhtä monta kuin tuntemattomia parametreja (m = n), niin tehtävä palautuu interpolaatiotehtäväksi. Yleensä pienimmän neliösumman approksimaatiota käytetään tilanteissa, joissa funktion arvot sisältävät epävarmuutta, kuten normaalijakautuneita mittausvirheitä. Tällöin halutaan sovittaa yksinkertainen malli suureen määrään mittaustuloksia, eli m > n. Esimerkki 5.16. Sovitetaan pienimmän neliösumman mielessä toisen asteen polynomi p 2 (x) = c 1 + c 2 x + c 3 x 2 pisteistöön x k 1 2 3 3 4 f (x k ) 2 2 3 5 6
72 LUKU 5. INTERPOLOINTI JA APPROKSIMOINTI 8 7 6 5 4 3 2 1 0.5 1 1.5 2 2.5 3 3.5 4 4.5 Kuva 5.7: Datapisteet ja toisen asteen pienimmän neliösumman polynomi Matriisiksi B ja vektoriksi ˆf saadaan tässä tapauksessa 1 1 1 2 1 2 4 B = 1 3 9 1 3 9, 2 ˆf = 3 5, 1 4 16 6 jolloin tuntemattomat kertoimet {c j } voidaan ratkaista yhtälöryhmästä 5 13 39 c 1 18 13 39 127 c 2 = 54. 39 127 435 c 3 178 Pienimmän neliösumman polynomiksi saadaan siten (viiden numeron tarkkuudella) p 2 (x) = 2.2581 0.83871x + 0.45161x 2 (kts. kuva 5.7). Edellisessä esimerkissä matriisin A = B T B häiriöalttius on suuri. Suositeltavampi tapa laskea pienimmän neliösumman approksimaatio on muodostaa QR- tai singulaariarvohajotelma matriisille B. Näiden tekniikkojen kuvaus sivuutetaan kuitenkin tässä yhteydessä.
Luku 6 Numeerisesta integroinnista ja derivoinnista 6.1 Johdanto Tarkastellaan yksiulotteisen Riemannin integraalin b a f (x)dx laskemista. Analyysin peruslauseen mukaan b f (x)dx = F(b) F(a) (6.1) a jollekin f :n antiderivaatalle F. Yleisessä tapauksessa ei välttämättä löydetä F:ää suljetussa muodossa (esim. f (x) = e x2 ). Toisaalta f :n analyyttistä lauseketta ei ole välttämättä käytettävissä. Sen arvoja voi olla taulukoituna ennalta määrätyissä pisteissä (mittaustulokset) tai f :n arvo saadaan jonkin iteratiivisen prosessin tuloksena. Mikäli integraalin laskeminen kaavalla (6.1) ei jostakin edellä mainituista syistä ole mahdollista, niin tällöin voidaan approksimoida integraalia numeerisesti. Usein numeerista integrointia käytetään myös siinä tapauksessa, että antiderivaatan F lauseke olisikin käytettävissä, erityisesti kun laskettavia integraaleja on suuri määrä ja työ halutaan automatisoida. Jatkossa pyritään löytämään (hieman yleisemmälle) integraalille b a w(x) f (x)dx likiarvo kaavan b w(x) f (x)dx = A 1 f (x 1 ) + + A p f (x p ) + E[ f ] (6.2) a avulla. Tällaisia kaavoja kutsutaan numeerisiksi integroimiskaavoiksi eli kvadratuureiksi. Luvut x k ja A k ovat integrointipisteet ja painokertoimet. Termi E[ f ] on integrointikaavan virhe. Positiivista funktiota w kutsutaan painofunktioksi ja usein w 1. Määritelmä 6.1. Kaavan (6.2) tarkkuusaste on d, jos se on tarkka (E[ f ]=0) kaikilla polynomeilla, joiden asteluku d, ja jos on olemassa d + 1 -asteinen polynomi, jolle se ei ole tarkka. Lause 6.1. Jos on annettu pisteistö a x 1 < x 2 <... < x k b, niin on olemassa kertoimet A 1,...,A k siten, että kaavan b a w(x) f (x)dx = k i=1 73 A i f (x i ) + E[ f ] (6.3)
74 LUKU 6. NUMEERISESTA INTEGROINNISTA JA DERIVOINNISTA tarkkuusaste on vähintään k 1. Todistus. Kaava (6.3) on tarkka monomeille f (x) = x m, m = 0,1,...,k 1, jos seuraavat yhtälöt ovat voimassa: k i=1 A i x m i = b a w(x)x m dx, m = 0,1,...,k 1. (6.4) Yhtälöt (6.4) muodostavat lineaarisen yhtälöryhmän, jossa on k yhtälöä ja k tuntematonta kerrointa A i. Koska kaikki x i :t ovat erisuuria, niin determinantti 1 1... 1 x 1 x 2... x k k i 1 =.. (x i x j ) 0, (6.5) x1 k 1 x2 k 1... xk k 1 i=2 j=1 eli yhtälöryhmällä (6.4) on yksikäsitteinen ratkaisu. Koska integrointi on lineaarinen operaatio, niin kaava (6.3) on tarkka kaikille monomien lineaarikombinaatioille a 0 + a 1 x + + a k 1 x k 1. Merkitään seuraavassa P m := { f : [a,b] R f on enintään m-asteinen polynomi}. Integrointipisteitä x i vastaavat painokertoimet A i voidaan laskea Vandermonden systeemin (6.4) ratkaisemisen sijaan suoraankin. Tarkastellaan Lagrangen kantafunktiota l j (x) = k m=1 m j x x m x j x m. Koska l j P k 1, niin se voidaan integroida tarkasti kaavalla (6.3). Täten kerroin A j saadaan laskettua kaavasta b a l j (x)w(x)dx = k i=1 A i l j (x i ) = 6.2 Newtonin ja Cotesin kaavat k i=1 A i δ i j = A j. (6.6) Tarkastellaan integraalin I = b a f (x)dx laskemista. Olkoon annettu tasavälinen pisteistö x i = x 0 + ih (i = 0,1,...,k), missä a = x 0, b = x k ja h = (b a)/k. Integraalia I approksimoidaan nyt integraalilla b p k (x)dx, (6.7) missä p k on enintään astetta k oleva interpolaatiopolynomi, jolle a p k (x i ) = f (x i ) =: f i, i = 0,1,...,k.
6.2. NEWTONIN JA COTESIN KAAVAT 75 Tekemällä muuttujanvaihto x = x 0 + sh ja kehittämällä p k etenevien differenssien avulla, saadaan b k p k (x)dx = p k (x 0 + sh)hds a = h 0 k 0 [ f 0 + f 0 s + 1 2! 2 f 0 s(s 1) + + 1 ] k! k f 0 s(s 1)...(s k + 1) ds. Tämä integraali on helppo laskea ja k:ta muuttamalla saadaan erilaisia integraalikaavoja, ns. suljettuja Newtonin ja Cotesin kaavoja. Lause 6.2. Olkoon f (k+1) ja f (k+2) jatkuvia välillä [a,b]. Tällöin h k+3 k (k + 2)! f (k+2) (x 0 + ξh) s 2 (s 1)...(s k)ds, k parillinen 0 E[ f ] = h k+2 k (k + 1)! f (k+1) (x 0 + ξh) s(s 1)...(s k)ds, k pariton, ja missä ξ ]0,k[. 0 (6.8) Todistus. Virhetermi E[ f ] saadaan integroimalla interpolaatiovirhe f p k. Tarkastellaan todistusta vain tapauksessa k = 1. Tällöin integraalilaskennan väliarvolausetta käyttämällä saadaan b b b f (x)dx p k (x)dx = ( f (x) p 1 (x))dx a a = a b a f (ξ x ) (x a)(x b)dx = f (η) b (x a)(x b)dx 2! 2 a = f (η) 12 (b a)3, η ]a,b[. f (x) a Kuva 6.1: Puolisuunnikassääntö Esimerkki 6.1. Edellisen todistuksen tapaus k = 1 tunnetaan puolisuunnikassäännön nimellä (kuva 6.1). Integraalin likiarvolle saadaan tässä tapauksessa seuraavanlainen yksinkertainen kaava: b 1 f (x)dx h ( f 0 + f 0 s)ds a 0 = h f 0 + h 1 0 b x ( f 1 f 0 )sds = h 2 ( f 0 + f 1 ). Lauseen 6.2 mukaan kaava on tarkka, jos f 0 eli f on ensimmäisen asteen polynomi.
76 LUKU 6. NUMEERISESTA INTEGROINNISTA JA DERIVOINNISTA Esimerkki 6.2. Valinta k = 2 tuottaa Simpsonin kaavan b a f (x)dx = h 3 ( f 0 + 4 f 1 + f 2 ) h5 90 f (4) (η), η ]a,b[ ja valinta k = 3 tuottaa puolestaan Simpsonin 3/8-kaavan b a f (x)dx = 3h 8 ( f 0 + 3 f 1 + 3 f 2 + f 3 ) 3h5 80 f (4) (η), η ]a,b[. Molempien kaavojen tarkkuusaste on sama, eli ne ovat tarkkoja korkeintaan astetta 3 oleville polynomeille. Menetelmävirheen kertaluokka on kummassakin O(h 5 ). Simpsonin 3/8-kaava vaatii kuitenkin yhden pisteen enemmän. Edellä esitettyjä Newtonin ja Cotesin kaavoja sanotaan suljetuiksi, koska interpolaatiopolynomi interpoloi f :ää välin [a, b] päätepisteissä. Toinen mahdollisuus on approksimoida f :ää polynomilla, joka interpoloi f :ää vain välin [a, b] sisäpisteissä. Merkitään sisäpisteitä x i = x 0 +ih (i = 0,1,...,k), missä x 0 = a+h, x k = b h ja h = (b a)/(k+2). Asetetaan lisäksi x 1 = a ja x k+1 = b. f 0 f k f 1 f k 1 f (x) a = x 1 x 0 x 1... x k 1 x k x k+1 = b Kuva 6.2: Funktion f interpolointi sisäpisteissä Integraalia I approksimoidaan nyt kaavalla b a p k (x)dx = h k+1 1 [ f 0 + f 0 s + + 1 ] k! k f 0 s(s 1)...(s k + 1) ds, (6.9) missä p k on korkeintaan astetta k oleva polynomi, jolle p k (x i ) = f (x i ), Kaavoja (6.9) kutsutaan avoimiksi Newtonin ja Cotesin kaavoiksi. i = 0,1,...,k. Lause 6.3. Olkoon f (k+1) ja f (k+2) jatkuvia välillä [a,b]. Tällöin avointen Newton-Coteskaavojen menetelmävirheelle pätee h k+3 k+1 (k + 2)! f (k+2) (x 0 + ξh) s 2 (s 1)...(s k)ds, k parillinen 1 E[ f ] = h k+2 (6.10) k+1 (k + 1)! f (k+1) (x 0 + ξh) s(s 1)...(s k)ds, k pariton, ja missä ξ ] 1,k + 1[. 1
6.3. INTEGROIMISVÄLIN JAKAMINEN OSAVÄLEIHIN 77 Esimerkki 6.3. Valitsemalla k = 0 saadaan b a 1 f (x)dx = h f 0 ds + h3 1 1 2! f (x 0 + ξh) s 2 ds = 2h f 0 + h3 1 3 f (η), η ]a,b[. Tämä kaava tunnetaan keskipistesäännön nimellä (kuva 6.3). f0 f (x) a = x 1 x 0 b = x 1 Kuva 6.3: Keskipistesääntö Huomautus 6.1. Tarkastelemalla avointen ja suljettujen Newtonin ja Cotesin kaavojen virhetermejä, havaitaan että kiinteällä k avointen ja suljettujen kaavojen menetelmävirhe on samaa kertaluokkaa. 6.3 Integroimisvälin jakaminen osaväleihin Edellä esitetyt matala-asteiset Newtonin ja Cotesin kaavat antavat epätarkkoja tuloksia, jos integroimisväli [a, b] on liian pitkä. Toisaalta korkeasteisten interpolaatiopolynomien käyttö tasavälisellä pisteistöllä ei ole järkevää näiden oskillointitaipumusten vuoksi. Matalaasteisia kaavoja voidaan käyttää tehokkaasti, jos integroimisväli jaetaan osaväleihin, joissa integrointi suoritetaan erikseen. Esimerkki 6.4. Jaetaan väli [a,b] n:ään h:n pituiseen osaväliin [x i,x i+1 ], missä x i = x 0 + ih (i = 0,1,...,n), x 0 = a, x n = b ja h = (b a)/n. Tällöin b a f (x)dx = Soveltamalla puolisuunnikassääntöä jokaiselle osavälille, saadaan b a f (x)dx = h 2 ( f 0 + 2 f 1 + 2 f 2 + + 2 f n 1 + f n ) n 1 xi+1 f (x)dx. (6.11) i=0 x i h3 [ f (x 0 + ξ 0 h) + f (x 1 + ξ 1 h) + + f (x n 1 + ξ n 1 h) ], 12 ja missä ξ i ]0,1[. Näin saadun numeerisen integrointikaavan virhetermiä voidaan arvioida seuraavasti: E[ f ] h3 12 n max f (x) = h2 x [a,b] 12 (b a) max x [a,b] f (x). (6.12)
78 LUKU 6. NUMEERISESTA INTEGROINNISTA JA DERIVOINNISTA Esimerkki 6.5. Tarkastellaan integraalin π 0 sinxdx laskemista puolisuunnikassäännöllä, kun integroimisväli [0, π] on jaettu n:ään osaväliin. Taulukossa 6.1 on esitetty approksimaatioita integraalille eri n:n arvoilla sekä E[ f ] :n ja virheen ylärajan (6.12) arvot. Havaitaan, että tässä tapauksessa (6.12):aa voitaisiin käyttää arvioitaessa tarvittavien osavälien lukumäärää halutun tarkkuuden saavuttamiseksi. Sen sijaan jos integroitava funktio käyttäytyy hyvin eri tavoin integroimisvälin eri osissa, ei virhearviolla (6.12) ole käyttöä sen globaalin luonteen johdosta. Tällöin osaväleihin jako on suoritettava funktion käyttäytymistä mukaillen adaptiivisesti. n integraali abs.virhe virheraja 1 0.00000000 2.00000000 2.58385639 2 1.57079633 0.42920367 0.64596410 4 1.89611890 0.10388110 0.16149102 8 1.97423160 0.02576840 0.04037276 16 1.99357034 0.00642966 0.01009319 32 1.99839336 0.00160664 0.00252330 64 1.99959839 0.00040161 0.00063082 128 1.99989960 0.00010040 0.00015771 Taulukko 6.1: Integraalin π 0 sinxdx approksimointi puolisuunnikassäännöllä Esimerkki 6.6. Jaetaan väli [a,b] 2n:ään h:n pituiseen osaväliin [x i,x i+1 ], missä x i = x 0 + ih (i = 0,1,...,2n), x 0 = a, x 2n = b ja h = (b a)/2n. Jakamalla integraali osiin b a f (x)dx = x2 x 0 f (x)dx + x4 x 2 f (x)dx + + x2n x 2n 2 f (x)dx ja soveltamalla jokaiseen osaväliin Simpsonin kaavaa, saadaan b f (x)dx h [ f 0 + 4 f 1 + 2 f 2 + 4 f 3 + + 2 f 2n 2 + 4 f 2n 1 + f 2n ]. (6.13) 3 a Virhetermille saadaan nyt arvio E[ f ] (b a)h4 180 6.4 Gaussin integrointimenetelmät max f (4) (x). (6.14) x [a,b] Newtonin ja Cotesin kaavoja johdettaessa oli pisteistö x 1,...,x k, jossa funktion arvot laskettiin, etukäteen kiinnitetty ja tasavälinen. Johdetaan seuraavaksi yleinen integrointikaava b a f (x)w(x)dx = k i=1 A i f (x i ) + E[ f ], (6.15) missä sekä kertoimet A i että integrointipisteet x i ovat vapaita parametreja. Koska 2k 1- asteisessa polynomissa on 2k kappaletta kertoimia, niin paras tarkkuusaste, mikä kaavalla (6.15) voidaan saavuttaa, on 2k 1.
6.4. GAUSSIN INTEGROINTIMENETELMÄT 79 Lause 6.4. Olkoon w positiivinen painofunktio ja olkoon 0 q P k polynomi, joka toteuttaa ortogonaalisuusehdon b q(x)p(x)w(x)dx = 0 kaikille p P k 1. (6.16) a Jos x 1,x 2,...,x k ovat polynomin q nollakohdat ja kertoimet A i laskettu kaavasta (6.6), niin kaava b on tarkka kaikille funktioille f P 2k 1. a f (x)w(x)dx k i=1 A i f (x i ) (6.17) Todistus. Olkoon f P 2k 1. Jaetaan polynomi f polynomilla q, jolloin f = qp+r, missä p P k 1 on osamäärä ja r P k 1 on jakojäännös. Koska integrointipisteet ovat polynomin q nollakohdat, niin f (x i ) = r(x i ), i = 1,...,k. Ottamalla huomioon ortogonaalisuusehto (6.16), saadaan b a f wdx = b a qpwdx + b a rwdx = b a rwdx. Koska kertoimet A i oli valittu siten, että kaava (6.15) on tarkka kaikille k 1-asteisille polynomeille, niin b a rwdx = k i=1 A i r(x i ) = k i=1 A i f (x i ). Tärkeä erikoistapaus on Gaussin ja Legendren integrointikaava, missä w 1 ja integroimisväli [a, b] = [ 1, 1]. Tällöin ortogonaalisuusehto (6.16) määrittelee Legendren polynomit. Legendren polynomit voidaan määritellä rekursiokaavalla L 0 (x) = 1, L 1 (x) = x, L m+1 (x) = 2m + 1 m + 1 xl m(x) m m + 1 L m 1(x), m = 1,2,... Polynomien juuret ovat reaalisia, yksinkertaisia ja välillä ] 1,1[. Esimerkki 6.7. Lasketaan muutamien Gaussin ja Legendren kaavojen integrointipisteitä ja painokertoimia: Tapaus k = 1: Polynomin L 1 (x) = x juuri on x 1 = 0. Painokertoimeksi saadaan A 1 = 1 1 l 1 (x)dx = 1 1 1dx = 2. Tapaus k = 2: Polynomin L 2 (x) = 1 2 + 3 2 x2 juuret ovat x 1,2 = ±α, missä α := 1 3. Vastaavat painokertoimet ovat A 1 = A 2 = 1 1 1 1 l 1 (x)dx = l 2 (x)dx = 1 1 1 1 x α dx = 1, α α x + α dx = 1. α + α
80 LUKU 6. NUMEERISESTA INTEGROINNISTA JA DERIVOINNISTA Tapaus k = 3: Polynomin L 3 (x) = 3 2 x + 2 5x3 juuret ovat x 1 = 0, x 2,3 = ±β, missä β :=. Painokertoimiksi saadaan 3 5 A 1 = A 2 = A 3 = 1 1 1 1 1 1 (x β)(x + β) (0 β)(0 + β) dx = 8 9, (x 0)(x + β) (β 0)(β + β) dx = 5 9, (x 0)(x β) ( β 0)( β β) dx = 5 9. Esimerkki 6.8. Lasketaan integraali I = 1 1 e x dx yksi- ja kaksipisteisillä Gaussin ja Legendren integrointikaavoilla: I 2 e 0 = 2 I 1 e 1/ 3 + 1 e 1/ 3 2.3427. Integraalin tarkka arvo viiden numeron tarkkuudella on I 2.3504. Se, että tarkasteltiin integroimisväliä [ 1, 1], ei tietenkään ole mikään rajoite, sillä siihen päästään aina muuttujanvaihdolla b a f (x)dx = b a 2 1 1 f ( b a 2 z + a + b )dz. (6.18) 2 Esimerkiksi integraalin 2 0 e x dx likiarvo lasketaan kaksipisteisellä Gaussin ja Legendren kaavalla seuraavasti: 2 1 e x dx = e z 1 dz 1 e 1/ 3 1 + 1 e 1/ 3 1 0.86183. 0 1 Integraalin tarkka arvo viiden numeron tarkkuudella on 0.86467. 6.5 Automaattiset integrointialgoritmit Edellä numeerisen integroinnin tarkkuus riippui käytetyn menetelmän tarkkuusasteesta ja käytetystä osavälin pituudesta. Oikean menetelmän valinta halutun tarkkuuden saavuttamiseksi on usein hankala tehtävä, ainakin asiaan vihkiytymättömälle. Yleisen ja helppokäyttöisen integrointiohjelman tulisi täten itse pystyä valitsemaan tehtävään sopiva integrointialgoritmi. Käyttäessään aliohjelmakirjastojen automaattisia integroimisohjelmia, käyttäjä määrittelee välin [a, b], tekee aliohjelman, joka laskee funktion f arvoja ja asettaa tarkkuusvaatimuksen ε. Integrointialiohjelma yrittää laskea suureen Q siten, että jompikumpi tai molemmat ehdoista b Q b f (x)dx ε, b Q f (x)dx ε f (x)dx. (6.19) a a a toteutuvat. Ohjelma päättää, onko tarkkuusvaatimus saavutettavissa, suorittaa laskun vähintäänkin pyydetyllä tarkkuudella, ja palauttaa tietoa saavutetusta tarkkuudesta.
6.5. AUTOMAATTISET INTEGROINTIALGORITMIT 81 6.5.1 Rombergin menetelmä Rombergin menetelmä on ekstrapolaatiomenetelmä, jossa integraali lasketaan ensin mielivaltaisella osavälin pituudella h ja sen jälkeen tämän puolikkaalla. Tämän jälkeen käytetään Richardsonin ekstrapolaatiota, jolloin muodostetaan lineaarikombinaatio edellä saaduista likiarvoista. Seuraavassa tarkastellaan Rombergin menetelmää puolisuunnikassääntöön sovellettuna. Lause 6.5. Jos f C (2m) ([a,b]), niin puolisuunnikassääntö voidaan esittää muodossa I := b a f (x)dx = h 2 ( n 1 ) m f 0 + f n + 2 f i + α j h 2 j, (6.20) i=1 j=1 missä h = (b a)/n, a = x 0, b = x n, x i = x 0 + ih, i = 1,2,...,n 1. Kertoimet α j eivät riipu h:sta. Todistus. Tulos perustuu Eulerin ja McLaurinin kaavaan: Jos f C (2m) ([0,1]), niin olemassa η 0 ]0,1[ siten, että 1 f (t)dt = 1 m 1 0 2 ( f (0) + f (1)) + A 2k [ f (2k 1) (0) f (2k 1) (1)] A 2m f (2m) (η). k=1 (6.21) Kertoimet A k eivät riipu f :stä. Soveltamalla kaavaa (6.21) funktioon g(t) = f (x i + ht), saadaan xi+1 1 f (x)dx = h g(x i + ht)dt 0 x i = h m 1 2 [ f (x i)+ f (x i+1 )]+ A 2k h 2k [ f (2k 1) (x i ) f (2k 1) (x i+1 )] A 2m h 2m+1 f (2m) (ξ i ), k=1 missä ξ i ]x i,x i+1 [. Summaamalla saadaan b a f (x)dx = h 2 n 1 i=0 m 1 + j=1 [ f (x i ) + f (x i+1 )] A j h 2 j [ f (2k 1) (a) f (2k 1) (b)] A m (b a)h 2m f (2m) (ξ), ξ [a,b[. Olkoon T k,0, k = 0,1,2,..., puolisuunnikassäännön antama approksimaatio I:lle, kun väli [a,b] on jaettu 2 k :hon osaväliin, jolloin osavälin pituus h k := (b a)/2 k. Lauseen 6.5 mukaan on nyt I = T k,0 + α 1 h 2 k + α 2h 4 k + α 3h 6 k +... (6.22) Jos nyt puolitetaan jokainen osaväli, niin I = T k+1,0 + α 1 ( hk 2 ) 2 + α2 ( hk 2 ) 4 ( hk ) 6 + α3 +... 2 = T k+1,0 + 1 4 α 1h 2 k + 1 16 α 2h 4 k + 1 64 α 3h 6 k +... (6.23)
82 LUKU 6. NUMEERISESTA INTEGROINNISTA JA DERIVOINNISTA eli Kertomalla yhtälö (6.23) 4:lla ja vähentämällä siitä yhtälö (6.22) saadaan 3I = 4T k+1,0 T k,0 3 4 α 2h 4 k 15 16 α 3h 6 k... I = 4 3 T k+1,0 1 3 T k,0 1 4 α 2h 4 k 5 16 α 3h 6 k... (6.24) Lukua T k+1,1 := 4 3 T k+1,0 1 3 T k,0 sanotaan ensimmäiseksi Rombergin ekstrapolaatiksi. Yhtälöstä (6.24) nähdään, että se on O(h 4 )-approksimaatio I:lle, kun taas T k+1,0 ja T k,0 ovat vain O(h 2 )-approksimaatioita. Ekstrapolaatioprosessia voidaan nyt jatkaa. Yhtälöstä (6.24) seuraa, että Puolittamalla jälleen h k saadaan Eliminoimalla β 1 h 4 k saadaan I = T k,1 + β 1 h 4 k + β 2h 6 k +... (6.25) I = T k+1,1 + 1 16 β 1h 4 k + 1 64 β 2h 6 k +... mikä on O(h 6 )-approksimaatio I:lle. Prosessia voidaan edelleen jatkaa, jolloin saadaan missä I 16 15 T k+1,1 1 15 T k,1, (6.26) I = T k+1, j+1 + O(h 2 j+4 ), (6.27) T k+1, j+1 = 4 j+1 T k+1, j T k, j 4 j+1. (6.28) 1 Rombergin ekstrapolaatit kirjoitetaan usein taulukkomuotoon T 0,0 T 1,0 T 1,1 T 2,0 T 2,1 T 2,2. (6.29) Taulukko muodostetaan riveittäin. Uusi puolisuunnikasapproksimaatio T k,0 lisätään ensimmäiseen sarakkeeseen ja aikaisemmin laskettuja arvoja (k 1):nnellä rivillä käytetään arvojen T k,1,t k,2,...,t k,k laskemiseen. Prosessin lopetuskriteerinä voidaan käyttää esimerkiksi ehtoa T k,k T k 1,k 1 ε T k,k. (6.30)
6.5. AUTOMAATTISET INTEGROINTIALGORITMIT 83 Huomautus 6.2. Rombergin menetelmä voidaan johtaa toisella tavalla, josta käy paremmin ilmi, miksi menetelmää sanotaan ekstrapolaatiomenetelmäksi. Olkoon T (h) puolisuunnikassäännön antama integraalin approksimaatio. Tällöin T (h) = a 0 + a 1 h 2 + a 2 h 4 + O(h 6 ), missä T (0) = a 0 on integraalin tarkka arvo. Approksimoidaan funktiota T : [0, [ R neljännen asteen polynomilla ˆT jättämällä O(h 6 )-termit pois. Laskemalla ˆT (h) kolmella eri askelpituudella, saadaan lineaarinen yhtälöryhmä kertoimien a 0,a 1,a 2 määräämiseksi: [ 1 (h/4) 2 (h/4) 4 ][ a0 a 1 a 2 ] [ T (h/4) T (h/2) T (h) 1 (h/2) 2 (h/2) 4 =. 1 h 2 h 4 Ratkaisemalla tästä yhtälöryhmästä a 0 saadaan ekstrapoloiduksi integraalin likiarvoksi T (0) ˆT (0) = a 0 = 1 45 [T (h) 20T (h/2) + 60T (h/4)] = T 2,2. ] Esimerkki 6.9. Lasketaan integraalin π 0 sinxdx likiarvo Rombergin menetelmällä käyttäen lopetuskriteerin parametrille arvoa ε = 0.5 10 5. Taulukossa 6.2 on listattu puolisuunnikassäännön antamat likiarvot (ensimmäinen sarake) ja niiden avulla lasketut ekstrapoloidut likiarvot. Automaattinen integrointi voitaisiin toteuttaa pelkästään puolisuunnikassäännön avulla, mutta näin saatu menetelmä ei ole erityisen tehokas. Tässä esimerkissä vasta T 15,0 olisi yhtä hyvä likiarvo kuin ekstrapoloitu arvo T 4,4. 0.00000000 1.57079633 2.09439510 1.89611890 2.00455975 1.99857073 1.97423160 2.00026917 1.99998313 2.00000555 1.99357034 2.00001659 1.99999975 2.00000002 1.99999999 Taulukko 6.2: Rombergin menetelmällä lasketut likiarvot 6.5.2 Adaptiiviset integrointialgoritmit Adaptiivinen integrointialgoritmi käyttää yhtä tai useampaa alkeellista integrointikaavaa ja määrää automaattisesti osavälien pituudet siten, että tulos täyttää ennalta asetetun tarkkuusvaatimuksen. Erilaisia askelpituuksia käytetään integroimisalueen eri osissa: pitkä askel, missä integroitava funktio on tasainen ja lyhyempi askel muualla. Tällä tavalla pyritään saamaan haluttu tarkkuus mahdollisimman vähällä laskentatyöllä. 6.5.3 Yksinkertainen adaptiivinen integrointialgoritmi Väli [a,b] jaetaan osaväleihin [x i,x i+1 ], h i = x i+1 x i. Kullakin osavälillä käytetään kahta eri integroimissääntöä. Olkoon tulokset P i ja Q i, jotka siis approksimoivat integraalia I i = xi+1 x i f (x)dx. (6.31)
84 LUKU 6. NUMEERISESTA INTEGROINNISTA JA DERIVOINNISTA Approksimaatioita P i ja Q i vertaamalla saadaan arvio näiden tarkkuudelle. Jos tarkkuus on hyväksyttävissä, otetaan näistä toinen integraalin arvoksi tällä osavälillä. Jos tarkkuus ei ole hyväksyttävä, osaväli puolitetaan edelleen ja prosessi toistetaan osavälin puolikkaissa. Oletetaan, että I i P i Ch p+1 i, missä p on tunnettu ja C on tuntematon vakio. Lasketaan Q i soveltamalla P i :n laskemiseksi käytettyä sääntöä kahteen osaväliin, joiden pituus on h i /2. Tällöin I i Q i C2 p h p+1 i ja eliminoimalla C saadaan P i :n ja Q i :n virheille yhteys Edelleen Osaväli on tarpeeksi lyhyt, jos on voimassa I i Q i 1 2 p (I i P i ). (6.32) Q i I i 1 2 p 1 (P i Q i ). (6.33) 1 2 p 1 P i Q i h i ε. (6.34) b a Jos koko väli [a,b] on jaettu n:ään osaväliin, jolla tämä on voimassa, on I := b a f (x)dx Q = n i=1 Q i. (6.35) Lisäksi Q I = n i=1 1 2 p 1 (Q i I i ) n i=1 n i=1 Q i I i P i Q i 1 2 p 1 2p n 1 b a ε h i = ε. i=1 6.5.4 Simpsonin sääntöön perustuva adaptiivinen menetelmä Simpsonin säännössä virhe yhdellä osavälillä on muotoa h 5 f (4) (η)/90, η ]x 0,x 2 [. Annetaan alkuarvo osavälin pituudelle h 0 = (b a)/4n ja tarkkuudelle ε. Määrätään integraalin a+4h0 f (x) dx (6.36) arvo Simpsonin säännöllä. Määrätään likiarvo derivaatalle etenevän differenssin avulla Tässä siis 4 f 0 = f 4 4 f 3 + 6 f 2 4 f 1 + f 0 ja f i = f (x i ). Nyt a f (4) (a + 2h 0 ) 4 f 0 h 4. (6.37) 0 virhe 2 1 90 h 0 4 ε f 0 (b a)/4h 0
6.6. EPÄOLEELLISET INTEGRAALIT 85 eli 4 f 0 180ε b a. (6.38) Jos (6.38) on voimassa, on tarkkuus välillä [a,a + 4h 0 ] riittävä. Asetetaan a := a + 4h 0. Jos (6.38):n vasen puoli on alle 1/16 oikea puoli, asetetaan h 0 := 2h 0. Jos (6.38) ei ole voimassa, asetetaan h 0 := h 0 /2 ja uusitaan integrointi välillä [a,a + 4h 0 ]. Näin jatketaan kunnes koko väli [a,b] on integroitu. 6.6 Epäoleelliset integraalit Jos integroimisväli tai integroitava funktio eivät ole rajoitettuja, sanotaan Riemannin integraalia epäoleelliseksi. Edellä esitetyt numeeriset integrointikaavat eivät suoraan sovellu epäoleellisille integraaleille. Ennen numeerisen ratkaisun etsimistä on tehtävä analysoitava ja varmistuttava siitä, että integraali on äärellinen. Täten epäoleellisen integraalin laskemiseen ei voi luoda täysin yleiskäyttöistä musta laatikko -tyyppistä automaattista algoritmia. 6.6.1 Integrointivälin katkaiseminen Rajoittamaton integroimisväli voidaan korvata melko lyhyelläkin äärellisellä välillä, mikäli integroitava funktio vähenee riittävän nopeasti. Tarkastellaan esimerkkinä epäoleellista integraalia 0 e x2 dx = M 0 e x2 dx + e x2 dx = I 1 (M) + I 2 (M). M Jälkimmäistä termiä I 2 (M) voidaan arvioida seuraavasti: I 2 (M) e Mx = e M2 M M. Jos M = 4, niin integroimisvälin katkaisusta aiheutuva absoluuttinen virhe on I I 1 (4) 10 7. Likiarvo integraalille kuuden desimaalin tarkkuudella saadaan siten laskemalla tavallinen integraali I 1 (4) numeerisesti jollakin aiemmin esitetyllä menetelmällä. 6.6.2 Singulariteetin eliminointi Muokkaamalla integroitavan funktion algebrallista lauseketta, voidaan integraali joskus jakaa kahteen osaan, joista toinen on helppo epäoleellinen integraali ja toinen vaikea tavallinen Riemannin integraali. Esimerkiksi integraali I = 1 0 cosx x dx on epäoleellinen, koska integroitava funktio on singulaarinen origossa. Integraali voidaan kuitenkin kirjoittaa muodossa missä funktio I = 1 0 1 1 2 x2 x dx + 1 = 9 1 5 + g(x)dx = 9 5 + I 2, 0 g(x) = 0 cosx 1 + 1 2 x2 x 0, x = 0 cosx 1 + 1 2 x2 x, x ]0,1] dx
86 LUKU 6. NUMEERISESTA INTEGROINNISTA JA DERIVOINNISTA on jatkuva välillä [0,1]. Integraali I 2 voidaan laskea siten numeerisesti tavallisena Riemann-integraalina. 6.6.3 Muuttujanvaihto Rajoittamaton integroimisväli tai integroitava funktio voidaan joskus saada rajoitetuksi sopivalla muttujanvaihdolla. Muuttujanvaihdon seurauksena integroitava funktio saattaa muuttua hyvinkin hankalannäköiseksi, mutta sillä ei ole numeerisen integroinnin yhteydessä suurtakaan merkitystä. Tarkastellaan integraalia I = 1 0 x 1/m f (x)dx, m 2. Tekemällä muuttujanvaihto t m = x integraali saadaan muotoon I = m 1 0 f (t m )t m 2 dt. Muuttujanvaihdolla x = e t saadaan puoliakseli [0, [ muunnettua väliksi [0,1[: 0 f (t)dt = 1 0 f ( lnx) dx = x 1 0 g(x) x dx. Jos g(x)/x on rajoitettu origon ympäristössä, oikeanpuoleinen integraali on oleellinen. Jos integroitava funktio f pysyy rajoitettuna, kun x, voidaan koko realiakseli muuntaa suljetuksi väliksi käyttäen muuttujavaihtoa x = tant. Esimerkiksi I = π dx x 2 + x + 2 = 2 π 2 π dt (tan 2 t + tant + 2)(cos 2 t) = 2 π 2 g(t) dt. Oikeanpuolimmainen integraali on tavallinen Riemannin integraali, kun määritellään g(± π 2 ) = 1. Kolmipisteisellä Gaussin ja Legendren kaavalla laskettu likiarvo integraalille on I G3 2.3996 tarkan arvon ollessa I 2.3748. 6.6.4 Gaussin kaavat epäoleellisille integraaleille Tietynlaisille epäoleellisille integraaleille voidaan johtaa optimaalisia Gaussin integrointikaavoja samaan tapaan kuin tavallisille integraaleille. Tällöin rajoittamaton integroimisväli tai singulariteetti käsitellään sopivan painofunktion avulla. Gaussin ja Tšebyševin integrointikaavan 1 1 f (x)dx 1 x 2 = π k k f (x i ) + i=1 2π 2 2k (2k)! f (2k) (ξ), ξ ] 1,1[. integrointipisteet x i = cos ( 2i 1 2k π) ovat k-asteisen Tšebyševin polynomin juuret. Gaussin ja Laguerren integrointikaavan 0 e x f (x)dx = k i=1 A i f (x i ) + (k!)2 (2k)! f (2k) (ξ), integrointipisteet x i ovat k-asteisen Laguerren polynomin juuret. Gaussin ja Hermiten integrointikaavan e x2 f (x)dx = k i=1 ξ [0, [. A i f (x i ) + k! π 2 k (2k)! f (2k) (ξ), ξ ], [. integrointipisteet x i ovat k-asteisen Hermiten polynomin juuret.
6.7. MONIULOTTEINEN INTEGROINTI 87 Esimerkki 6.10. Lasketaan numeerisesti integraali e x I = 0 2x + 100 dx nelipisteisellä Gaussin ja Laguerren kaavalla, jonka painokertoimet ja integrointipisteet on esitetty alla: A i 6.031541043416336E-01 3.574186924377998E-01 3.888790851500539E-02 5.392947055613273E-04 x i 3.225476896193923E-01 1.745761101158346E+00 4.536620296921128E+00 9.395070912301133E+00 Tulokseksi saadaan I = 0.009807554964988007, jossa on ainakin 10 oikeaa merkitsevää numeroa. 6.7 Moniulotteinen integrointi Numeerinen integrointi suoritetaan useammassa ulottuvuudessa periaatteessa samalla tavoin kuin yhdessäkin ulottuvuudessa. Joukko, jonka yli integroidaan, voi kuitenkin olla hyvin monimutkainen jo kahdessakin ulottuvuudessa. Käytännössä approksimointi tapahtuu kahdessa vaiheessa. Integrointialue Ω korvataan ensin yksinkertaisemmalla alueella (esim. monikulmio) Ω ja integroidaan tämän alueen yli otettu integraali numeerisesti: Ω f (x 1,...,x n )dx 1...dx n Ω f (x 1,...,x n )dx 1...dx n Integrointipisteiden ja painokertoimien arvot määrää alue Ω. 6.7.1 Yksinkertaisia kaavoja kolmiolle k i=1 A i f (x (i) 1,...,x(i) n ). Tarkastellaan lyhyesti integrointia joidenkin yksinkertaisten tason monikulmioiden yli. Monimutkaista tasoaluetta voidaan yleensä helposti approksimoida kolmioilla. Olkoon µ(k) kolmion K pinta-ala ja G kolmion painopiste. Tällöin integrointikaava f (x,y)dxdy µ(k) f (G) (6.39) K on tarkka ensimmäisen asteen polynomeille. Jos A,B ja C ovat kolmion sivujen keskipisteet, on kaava f (x,y)dxdy µ(k) ( f (A) + f (B) + f (C)) (6.40) K 3 tarkka toisen asteen polynomeille. 6.7.2 Tulointegraalit Moniulotteinen integraali voidaan laskea soveltamalla yksiulotteisia menetelmiä peräkkäin kullekin dimensiolle. Esimerkiksi yksiulotteisen k-pisteisen Gaussin ja Legendren kaavan vastine R 2 :ssa on 1 1 1 1 f (x,y)dxdy k i=1 A i [ 1 1 ] f (x i,y)dy k k i=1 j=1 A i A j f (x i,x j ), (6.41) missä (A i,x i ) ovat yksiulotteisen kaavan painokertoimet ja integrointipisteet. Kaava on tarkka (2k 1)-asteisille polynomeille. Kaavaa sanotaan tulokaavaksi, koska siinä funktio f lasketaan k k pisteessä.
88 LUKU 6. NUMEERISESTA INTEGROINNISTA JA DERIVOINNISTA Tulokaavoja on helppo johtaa. Kun avaruuden dimensio suurenee, integrointipisteiden määrä kasvaa kuitenkin nopeasti. Jos kolmipisteistä Gaussin ja Legendren kaavaa sovelletaan 10-ulotteiseen integraaliin, on funktion f arvo laskettava 3 10 = 59049 pisteessä. Jos avaruus on 20-ulotteinen, pisteitä tarvitaan yli 10 9 kappaletta! 6.7.3 Monte Carlo -menetelmät Täysin erilaisen lähestymistavan numeeriseen integrointiin tuovat Monte Carlo - menetelmät, jotka ovat käyttökelpoisia silloin kun integroidaan useampiulotteisen alueen yli, joka saattaa olla hyvinkin monimutkainen. Jos integraalia I = 1 0 f (x)dx approksimoidaan suorakaidemenetelmällä, saadaan I 1 N N f (x i ). (6.42) i=1 Approksimaatio on siis funktion arvojen keskiarvo. Keskiarvoajattelu johtaakin tilastotieteen ja todennäköisyyslaskennan menetelmiin. Todennälöisyyslaskennasta tutun suurten lukujen lain perusteella saadaan seuraava lause: Lause 6.6. Olkoon x 1,x 2,...,x N satunnaispisteitä väliltä [0,1]. Tällöin Pr ( lim N N 1 N f (x i ) = I i=1 ) = 1. Edellä kuvattu yksinkertaisin Monte Carlo -integrointialgoritmi voidaan helposti yleistää useampaan ulottuvuuteen ja mielivaltaiseen (rajoitettuun) integrointialueeseen. Olkoon f : Ω R s R sileä funktio, ja olkoon laskettavana integraali I = Ω f (x)dx. Asetetaan { g(x) = f (x), x Ω 0, x Ω. (6.43) Suljetaan integroimisalue Ω suorakulmaisen s-ulotteisen särmiön S sisään. Tällöin f (x)dx = g(x) dx. Ω Muunnetaan seuraavaksi S yhdensuuntaissiirroilla ja mittakaavojen muutoksilla yksikkökuutioksi V = [0,1] s. Tällöin g(x)dx = g(x) dx, S joten approksimaatio integraalille I saadaan arpomalla riippumattomat satunnaisvektorit z 1,...,z N V ja asettamalla I MC = 1 N S V N g(z i ). (6.44) i=1 Koska Monte Carlo -menetelmä on stokastinen menetelmä, niin likiarvon I MC virheelle ei ole eksplisiittistä lauseketta. Voidaan kuitenkin osoittaa, että integrointivirheelle pätee asymptoottinen tulos I I MC = O(N 1 2 ). Huomaa, että virhearvio on riippumaton avaruuden dimensiosta s. Esimerkki 6.11. Olkoon laskettavana integraali V f (x)dx, missä f : Rs R on sileä funktio ja V on s-ulotteisen avaruuden yksikkökuutio. Käytetään puolisuunnikassäännöstä 1 m g(x)dx A i g( i m ), 0 i=0
6.8. NUMEERINEN DERIVOINTI 89 missä A 0 = A m = 1 2m, A i = 1 m, i = 1,...,m 1, johdettua tulokaavaa m m f (z 1,...,z s )dz 1...dz s I PS =... A i1...a is f ( i 1 m,..., i s ). (6.45) m V i 1 =0 i s =0 Kaava (6.45) vaatii N = (m + 1) s funktion laskua, ja sen tarkkuus on I I PS = O(m 2 ) = O(N 2/s ). Jos avaruuden dimensio s > 4, on Monte Carlo -menetelmän vaatimien funktion laskujen määrä asymptoottisesti pienempi. Monte Carlo -menetelmä on siis käyttökelpoinen vain kun avaruuden dimensio on iso. Menetelmät selviytyvät myös hyvin moniulotteisten avaruuksien singulariteeteista, jotka voivat olla käyriä tai pintoja. 6.8 Numeerinen derivointi Numeerisella derivoinnilla tarkoitetaan likiarvon laskemista funktion f : R R derivaatalle f ilman derivaatan analyyttistä lauseketta. Jos funktion f arvo tunnetaan vain ennaltamäärätyissä pisteissä, voidaan f :ää interpoloida esimerkiksi splini-funktiolla ja derivoida interpolantin analyyttinen lauseke. Tämä tapa sopii erityisesti silloin, kun pisteitä, joissa derivaatan arvo halutaan, on paljon, tai pisteistö ei ole tasavälinen. Jos f :n analyyttinen lauseke on käytettävissä on analyyttinen derivointi periaatteessa mekaaninen toimenpide. Numeerinen derivointi (toisin kuin numeerinen integrointi) on sen sijaan hankalaa, koska yksinkertaiset numeeriset derivointikaavat ovat numeerisesti epästabiileja. 6.8.1 Derivaattojen yksinkertaiset differenssiapproksimaatiot Olkoon funktion f arvot tunnettu pisteissä x h, x ja x + h. Jos f on äärettömän monta kertaa derivoituva pisteessä x, niin f :lle voidaan muodostaa Taylorin kehitelmät f (x + h) = f (x) + f (x)h + 1 2 f (x)h 2 + 1 6 f (x)h 3 + 1 24 f (4) (x)h 4 +... (6.46) f (x h) = f (x) f (x)h + 1 2 f (x)h 2 1 6 f (x)h 3 + 1 24 f (4) (x)h 4... (6.47) Jättämällä kehitelmästä (6.46) pois h:n korkeampia potensseja sisältävät termit saadaan derivaatalle etenevä differenssiapproksimaatio f (x) f (x + h) f (x) h =: D + (h). (6.48) Vastaavasti kehitelmästä (6.47) saadaan takeneva differenssiapproksimaatio f (x) f (x) f (x h) h =: D (h). (6.49)
90 LUKU 6. NUMEERISESTA INTEGROINNISTA JA DERIVOINNISTA Vähentämällä kehitelmästä (6.46) kehitelmä (6.47) ja jättämällä h:n korkeammat potenssit sisältävät termit pois, saadaan keskeisdifferenssiapproksimaatio f f (x + h) f (x h) (x) =: D 0 (h). (6.50) 2h Vastaavasti voidaan approksimoida korkeamman kertaluvun derivaattoja. Esimerkiksi toiselle derivaatalle saadaan keskeisdifferenssiapproksimaatio f f (x + h) 2 f (x) + f (x h) (x) h 2. (6.51) Differenssiapproksimaatioiden katkaisuvirheelle saadaan seuraavanlaiset arviot: D + (h) f (x) = 1 2 f (x)h + 1 6 f (x)h 2 +... = 1 2 f (ξ)h, (6.52) D 0 (h) f (x) = 1 6 f (x)h 2 + 1 120 f (5) h 4 +... = 1 6 f (ξ 1 )h 2, (6.53) missä ξ ]x,x + h[ ja ξ 1 ]x h,x + h[. Näistä arvioista nähdään, että katkaisuvirhe on etenevälle differenssille luokkaa O(h) ja keskeisdifferenssille O(h 2 ). Analogisesti voidaan johtaa virhearviot korkeammankin kertaluvun derivaattojen differenssiapproksimaatioille: f (x + h) 2 f (x) + f (x h) h 2 f (x) = c 1 h 2 + c 2 h 4 + c 3 h 6 +... = O(h 2 ), missä kertoimet c i eivät riipu h:sta. Jos differenssiapproksimaation katkaisuvirhettä merkitään e h (x):llä, edellä olevista virhearvioista seuraa, että e h (x) 0, kun h 0. Tietokonetoteutuksessa on kuitenkin otettava huomioon pyöristysvirheet. Tarkastellaan keskeisdifferenssiä D 0 (h) = f (x + h) f (x h). 2h Funktion f arvoa ei tunneta tarkasti, ainoastaan sen approksimaatio ˆf, siten että Differenssiapproksimaation virhe on nyt ˆf (x ± h) f (x ± h) ε. ˆD 0 (h) D 0 (h) = ˆf (x + h) ˆf (x h) f (x + h) + f (x h) 2h ˆf (x + h) f (x + h) + ˆf (x h) f (x h) ε 2h h. Kokonaisvirhe on siten ˆD 0 (h) f (x) ˆD 0 (h) D 0 (h) + D 0 (h) f (x) ε h + h2 6 f (ξ), eli yleensä ˆD 0 (h) f (x), kun h 0. Paras h löydetään minimoimalla funktio h:n suhteen. E(h) := ε h + 1 6 f (ξ) h 2 (6.54)
6.8. NUMEERINEN DERIVOINTI 91 6.8.2 Richardsonin ekstrapolaatiomenetelmä Tarkastellaan keskeisdifferenssiä D 0 (h) = f (x + h) f (x h) 2h = f (x) + b 1 h 2 + O(h 4 ). (6.55) Kerrointa b 1 ei käytännössä tunneta, mutta se ei riipu h:sta. Puolittamalla h saadaan D 0 ( h 2 ) = f (x) + b 1 ( h 2 )2 + O(h 4 ) = f (x) + 1 4 b 1h 2 + O(h 4 ). (6.56) Eliminoimalla vakio b 1 yhtälöiden (6.55) ja (6.56) avulla saadaan D R (h) := 4 3 D 0( h 2 ) 1 3 D 0(h) = f (x) + O(h 4 ). (6.57) Näin on saatu f (x):lle O(h 4 )-approksimaatio. Prosessia voitaisiin jatkaa edelleen samaan tapaan kuin Rombergin integroinnissa. Esimerkki 6.12. Olkoon f (x) = lnx. Lasketaan likiarvo f (2):lle eri h:n arvoilla käyttäen yksinkertaista tarkkuutta: h D + (h) D (h) D 0 (h) D R (h) 0.2 0.476551 0.526803 0.501677 0.499997 0.1 0.487901 0.512933 0.500417 0.499999 0.05 0.493852 0.506356 0.500104 0.500001 0.01 0.498754 0.501251 0.500003 0.500014 0.001 0.499845 0.500143 0.499994 0.499954 0.0001 0.499487 0.500083 0.499785 0.500182 Minimoimalla funktio E(h) = ε h + 1 6 f (2)h 2, missä ε = 10 7, saadaan keskeisdifferenssille (melkein) optimaaliseksi h:n arvoksi h 0.011. Tämä on myös sopusoinnussa yllä olevan taulukon kanssa. Huomaa, että liian pienellä h pyöristysvirheet dominoivat keskeisdifferenssin virhettä eikä niitä voi kompensoida ekstrapolaatiolla.
92 LUKU 6. NUMEERISESTA INTEGROINNISTA JA DERIVOINNISTA
Luku 7 Tavallisten differentiaaliyhtälöiden numeriikasta Tarkastellaan ensimmäisen kertaluvun tavallista differentiaaliyhtälöryhmää y ( 1(t) = f 1 t,y1 (t),y 2 (t),...,y m (t) ), y ( 2(t) = f 2 t,y1 (t),y 2 (t),...,y m (t) ),. y ( m(t) = f m t,y1 (t),y 2 (t),...,y m (t) ), (7.1) missä t R on riippumaton muuttuja, funktiot y 1,y 2,...,y m : R R ovat tuntemattomia ja funktiot f 1, f 2,..., f m : R m+1 R ovat annettuja. Yhtälöryhmän (7.1) ratkaisu saadaan yksikäsitteiseksi, kun asetetaan alkuehdot y 1 (a) = ŷ 0 1, y 2 (a) = ŷ 0 2, (7.2). y m (a) = ŷ 0 m, missä a R ja ŷ 0 1,ŷ0 2,...,ŷ0 m R ovat annettuja. Ottamalla käyttöön vektorimerkinnät voidaan (7.1) ja (7.2) kirjoittaa lyhyesti ja y (t) = f ( t,y(t) ) (7.3) y(a) = ŷy 0, (7.4) missä y = (y 1,y 2,...,y m ), f = ( f 1, f 2,..., f m ) ja ŷy 0 = (ŷ 0 1,ŷ0 2,...,ŷ0 m). Differentiaaliyhtälön (7.3) ja alkuehdon (7.4) muodostamaa systeemiä kutsutaan alkuarvotehtäväksi. Esimerkki 7.1. Lenkkeilijän (tunnettu) paikka hetkellä t on x(t) = (x 1 (t),x 2 (t)). Hetkellä t = 0 koira on paikassa ŷy 0 ja hetkellä t > 0 paikassa y(t) = (y 1 (t),y 2 (t)). Koira juoksee vakiovauhdilla w = y (t) kohti lenkkeilijää eli koiran nopeusvektori on muotoa v(t) = y (t) = λ(x(t) y(t)), 93
94 LUKU 7. TAVALLISTEN DIFFERENTIAALIYHTÄLÖIDEN NUMERIIKASTA josta saadaan vakiolle λ lauseke λ = w x(t) y(t). Koiran kulkema reitti (s.o. funktiot y 1 ja y 2 ) saadaan ratkaisemalla differentiaaliyhtälöryhmä y x(t) y(t) (t) = w x(t) y(t) y(0) = ŷy 0. Tarkoituksena on nyt etsiä sellainen funktio y, joka toteuttaa yhtälön (7.3) ja ehdon (7.4). Voidaan todistaa seuraava tulos: Lause 7.1. Oletetaan, että alueessa D R m+1 funktio f on jatkuva ja toteuttaa Lipschitzehdon f (t,y) f (t,ȳy) L y ȳy, L 0. Olkoon alkuarvo (a,ŷy 0 ) D annettu. Silloin tehtävällä (7.3) (7.4) on yksikäsitteinen, jatkuvasti differentioituva ratkaisu y. Huomautus 7.1. Jatkossa ei tehdä eroa differentiaaliyhtälön (m = 1) ja differentiaaliyhtälöryhmän (m > 1) välillä, vaan käytetään aina alkuarvotehtävän lyhyempää muotoa (7.3) (7.4). Se, että tarkastellaan vain ensimmäisen kertaluvun yhtälöitä, ei ole mikään rajoitus, sillä korkeamman kertaluvun tavalliset differentiaaliyhtälöt voidaan aina palauttaa edellä esitettyyn muotoon sijoittamalla y 1 = y, y 2 = y, y 3 = y, jne. Esimerkiksi tavallinen differentiaaliyhtälö y (m) = f (t,y,y,y,y,...,y (m 1) ) voidaan palauttaa differentiaaliyhtälöryhmäksi y 1 = y 2 y 2 = y 3. y m 1 = y m y m = f (t,y 1,y 2,...,y m ). Alkuarvotehtävien numeerisessa ratkaisemisessa määrätään funktiolle y likiarvot pisteissä t j = a + jh ( j = 0,1,2,...), missä h on sopiva askelpituus. Jatkossa käytetään merkintöjä y j = y(t j ) ja f j = f (t j,y j ). 7.1 Rungen ja Kuttan menetelmät Rungen ja Kuttan menetelmien periaate on seuraava: Tunnetaan funktion y arvo pisteessä t n. Määrätään sen arvo pisteessä t n+1 kaavalla y n+1 = y n + r i=1 w i k i,
7.1. RUNGEN JA KUTTAN MENETELMÄT 95 missä k 1 = h f (t n,y n ), i 1 k i = h f (t n + c i h,y n + j=1 a i j k j ), 1 < i r. Kertoimet w i, c i ja a i j voidaan johtaa kehittämällä y ja f Taylorin sarjoiksi eri pisteissä ja vertaamalla saatujen kehitelmien eri termejä. Tavoitteena on määrätä kertoimet siten, että virhetermi olisi suuruusluokkaa h p+1 jollain kokonaisluvulla p. Yhdellä askeleella tehdään siis suuruusluokkaa O(h p+1 ) oleva paikallinen virhe. Jotta päästään pisteestä t = a pisteeseen t = b, niin tarvitaan (b a)/h askelta. Siten pahimmassa tapauksessa kokonaisvirhe on kertaluokkaa O(h p+1 ) (b a)/h = O(h p ). Siksi sanotaan, että menetelmän kertaluku on p. Rungen ja Kuttan menetelmien etuna on se, että ne ovat melko yksinkertaisia ja helppoja ohjelmoida. Lisäksi ne ovat ns. yksiaskelmenetelmiä, ts. niissä voidaan lähteä liikkeelle suoraan alkuarvosta y 0 = y(a) toisin kuin ns. moniaskelmenetelmissä, jotka täytyy käynnistää. Toisaalta haittana on se, että funktion f arvoja joudutaan laskemaan myös muualla kuin vain pisteissä t j. Edelleen näitä funktionkehityksiä tarvitaan varsinkin korkeamman kertaluvun menetelmissä melko runsaasti. Ehkä tunnetuin Rungen ja Kuttan menetelmä on klassinen neljännen kertaluvun menetelmä, joka on muotoa k 1 = h f (t n,y n ), k 2 = h f (t n + h 2,y n + k 1 2 ) k 3 = h f (t n + h 2,y n + k 2 2 ), k 4 = h f (t n + h,y n + k 3 ) y n+1 = y n + k 1 6 + k 2 3 + k 3 3 + k 4 6 + O(h5 ). Esimerkki 7.2. Ratkaistaan alkuarvotehtävä y (t) = sin(y(t)), y(0) = 1 neljännen kertaluvun Rungen ja Kuttan menetelmällä pisteessä t = 2 eri askelpituuksilla h. Kuten allaolevasta taulukosta havaitaan, pienenee virhe 1/16 osaan, kun askelpituus puolitetaan. h y h (2) y h (2) y(2) 2 2.635343 0.02056734 1 2.650943 0.00496781 0.5 2.655638 0.00027299 0.25 2.655895 0.00001595 0.125 2.655910 0.00000096 7.1.1 Askelpituuden säätämisestä Oletetaan, että tarkasteltavan differentiaaliyhtälön ratkaisu on kuvassa 7.1 esitetyn muotoinen. On luonnollista ajatella, että kaukana pisteestä t = a, missä ratkaisu on on lähes
96 LUKU 7. TAVALLISTEN DIFFERENTIAALIYHTÄLÖIDEN NUMERIIKASTA y(t) a b Kuva 7.1: Alkuarvotehtävän ratkaisun käyttäytyminen vakio, voitaisiin käyttää pitkää askelpituutta virheen oleellisesti kasvamatta. Toisaalta pisteen t = a lähellä saatetaan tarvita hyvinkin pientä askelpituutta. Miten askelpituus olisi valittava? Voitaisiinko askelpituus ehkä määrätä adaptiivisesti? Rungen ja Kuttan menetelmissä paikallisen menetelmävirheen arviointi on yleensä hyvin hankalaa. Seuraavassa esitetään yksinkertainen arviontimenetelmä, jota voidaan käyttää käytännön laskuissa. Olkoon menetelmän kertaluku p. Silloin yhden askeleen menetelmävirhe on T (t, h) Ch p+1. Olkoon y = y(t) tarkka ratkaisu. Oletetaan, että arvo y n on tarkka. Lasketaan ensin y n+1 = y (h) n+1 käyttäen askelpituutta h, jolloin Sitten lasketaan y n+1 = y (h/2) n+1 Yhdistämällä nämä saadaan y(t n+1 ) y (h) n+1 Chp+1. suorittamalla kaksi askelta askelpituudella h/2, jolloin y(t n+1 ) y (h/2) n+1 2C(h 2 )p+1. y (h/2) n+1 y(h) n+1 Chp+1 (1 1 2 p ). Siten paikallista menetelmävirhettä voidaan arvioida kaavalla T (t n,h) y(h/2) n+1 y(h) n+1 1 2 p. Jotta pisteestä t n päästään pisteeseen t = b, tarvitaan (b t n )/h askelta. Virhe y (h) (b) y(b) on alle toleranssin ε, jos T (t n,h) εh/(b t n ). Mikäli ehto ei ole voimassa, niin askelpituutta pitää pienentää. Vastaavasti askelpituutta voidaan kasvattaa, mikäli paikallinen virhe on liian pieni, koska tällöin vältetään turhaa laskentaa. 7.2 Lineaariset moniaskelmenetelmät Yleisen lineaarisen moniaskelmenetelmän periaate on seuraava: Oletetaan, että tunnetaan funktion y arvot y n,y n+1,...,y n+k 1, missä k on menetelmän askelluku. Määrätään arvo
7.2. LINEAARISET MONIASKELMENETELMÄT 97 y n+k ratkaisemalla se yhtälöstä k k α j y n+ j + h β j f n+ j = 0, (α k 0), (7.5) j=0 j=0 missä α j ja β j ovat tunnettuja kertoimia. Voidaan erotella kaksi eri tapausta. (Jatkossa oletetaan yksinkertaisuuden vuoksi, että kerroin α k = 1.) Jos β k = 0, sanotaan menetelmää eksplisiittiseksi. Tällöin y n+k voidaan ratkaista yhtälöstä (7.5) suoraan: y n+k = k 1 k 1 α j y n+ j + h β j f n+ j. j=0 j=0 Jos taas β k 0, sanotaan menetelmää implisiittiseksi. Tällöin y n+k joudutaan ratkaisemaan epälineaarisesta yhtälöstä y n+k = k 1 k 1 α j y n+ j + h β j f n+ j + hβ k f (t n+k,y n+k ). j=0 j=0 Rungen ja Kuttan menetelmiin verrattuna lineaaristen moniaskelmenetelmien etuna on se, että funktion f arvoja tarvitaan vain pisteissä t j. Siten funktionkehitysten määrä jää pienemmäksi. Toisaalta moniaskelmenetelmiä ei voi käyttää sellaisenaan: alkuarvon y 0 lisäksi tarvitaan k 1 muuta arvoa y 1,y 2,...,y k 1, jotka täytyy määrätä jollain toisella tavalla (esim. Rungen ja Kuttan menetelmällä). Sanotaan, että moniaskelmenetelmät pitää käynnistää. 7.2.1 Moniaskelmenetelmien johto Lineaarisia moniaskelmenetelmiä voidaan johtaa monella eri tavalla. Seuraavassa esitetään kaksi mahdollista tapaa. Luonnollisen lähtökohdan differentiaaliyhtälöiden ratkaisumenetelmille antavat numeeriset integrointikaavat. Käyttämällä esimerkiksi avoimia Newtonin ja Cotesin kaavoja saadaan eksplisiittisiä menetelmiä: Olkoon laskettavana integraali b a u(x)dx. Eräs avoin Newtonin ja Cotesin kaava on b a u(x)dx = 4h 3 (2u 0 u 1 + 2u 2 ) + 14 45 h5 u (ξ), missä h = (b a)/4, u j = u(x j ), x j = a + ( j + 1)h ja ξ ]a,b[. Sovelletaan tätä välillä [t n,t n+4 ] funktioon y = f, jolloin saadaan y n+4 y n = tn+4 Näin on johdettu moniaskelmenetelmä (k = 4) t n y (t)dt 4h 3 (2 f n+1 f n+2 + 2 f n+3 ). y n+4 = y n + 4h 3 (2 f n+1 f n+2 + 2 f n+3 ).
98 LUKU 7. TAVALLISTEN DIFFERENTIAALIYHTÄLÖIDEN NUMERIIKASTA Suljettuja Newtonin Cotesin kaavoja käyttämällä saadaan puolestaan implisiittisiä menetelmiä: Esimerkkinä tarkastellaan integrointikaavaa (Simpsonin sääntö) b a u(x)dx = h 3 (u 0 + 4u 1 + u 2 ) h5 90 u (ξ), missä h = (b a)/2, u j = u(x j ), x j = a + jh ja ξ ]a,b[. Soveltamalla tätä vastaavasti välillä [t n,t n+2 ] funktioon y = f saadaan moniaskelmenetelmä (k = 2) y n+2 = y n + h 3 ( f n + 4 f n+1 + f n+2 ). Toinen tapa johtaa moniaskelmenetelmiä on käyttää interpolointikaavoja. Esimerkkinä tarkastellaan interpolointia Newtonin takenevien differenssien avulla: Tasavälisesti taulukoidun funktion u arvo välillä [a,b] = [x 0,x n ] voidaan interpoloida kaavalla u(x) = u(x n + sh) = n j=0 missä h = (b a)/n, ja takeneva differenssi j u n määritellään 0 u n = u n, s(s + 1) (s + j 1) j u n, (7.6) j! j u n = j 1 u n j 1 u n 1, j > 0. (Tässä kertoimen s(s+1) (s+ j 1)/ j! arvoksi sovitaan 1, kun j = 0.) Sovelletaan tätä välillä [t n,t n+k 1 ] funktioon y = f, jolloin Koska y (t n+k 1 + sh) = k 1 j=0 s(s + 1) (s + j 1) j f n+k 1. (7.7) j! tn+k 1 y n+k = y n+k l + y (t)dt = y n+k l + h y (t n+k 1 + sh)ds, t n+k l 1 l (missä on tehty muuttujanvaihto t = t n+k 1 +sh), niin kaavaa (7.7) käyttäen saadaan joukko eksplisiittisiä menetelmiä: k 1 1 1 y n+k = y n+k l + h j=0 j! j f n+k 1 s(s + 1) (s + j 1)ds. 1 l Antamalla indeksille l eri arvoja saadaan useita erilaisia kaavaryhmiä, esim. arvolla l = 1 saadaan ns. Adamsin ja Bashforthin kaavat sekä arvolla l = 2 ns. Nyströmin kaavat. Kun suoritetaan integrointi muuttujan s:n suhteen, voidaan Adamsin ja Bashforthin kaavat kirjoittaa muotoon ( y n+k = y n+k 1 + h f n+k 1 + 1 2 f n+k 1 + 5 12 2 f n+k 1 + 3 ) 8 3 f n+k 1 +,
7.2. LINEAARISET MONIASKELMENETELMÄT 99 josta saadaan mm. seuraavat kaavat: k = 1 : y n+1 = y n + h f n, k = 2 : y n+2 = y n+1 + h 2 (3 f n+1 f n ), k = 3 : y n+3 = y n+2 + h 12 (23 f n+2 16 f n+1 + 5 f n ). Näistä ensimmäinen tunnetaan paremmin Eulerin menetelmän nimellä. Toisaalta soveltamalla interpolointikaavaa (7.6) välillä [t n+1,t n+k ] saadaan y (t n+k 1 + sh) = y (t n+k + (s 1)h) = k 1 j=0 (s 1)s (s + j 2) j f n+k. (7.8) j! Etenemällä kuten yllä (mutta käyttämällä kaavan (7.7) sijaan kaavaa (7.8)) saadaan joukko implisiittisiä menetelmiä: k 1 1 1 y n+k = y n+k l + h j=0 j! j f n+k (s 1)s (s + j 2)ds. 1 l Indeksi l = 1 antaa ns. Adamsin ja Moultonin kaavat, jotka voidaan kirjoittaa muotoon ( y n+k = y n+k 1 + h f n+k 1 2 f n+k 1 12 2 f n+k 1 ) 24 3 f n+k. Tästä saadaan mm. kaavat k = 1 : y n+1 = y n + h f n+1, k = 2 : y n+2 = y n+1 + h 2 ( f n+2 + f n+1 ), k = 3 : y n+3 = y n+2 + h 12 (5 f n+3 + 8 f n+2 f n+1 ), joista ensimmäistä kutsutaan implisiittiseksi Eulerin menetelmäksi, ja toisesta käytetään nimityksiä Crankin ja Nicholsonin menetelmä, puolisuunnikassääntö tai trapetsikaava. (Huomaa, että tapauksissa k > 1 ovat kertoimet α 0 = β 0 = 0, joten menetelmien askelluku on itse asiassa k 1.) 7.2.2 Implisiittisten kaavojen käyttö iteroimalla Kuten on jo mainittu, implisiittisissä moniaskelmenetelmissä joudutaan ratkaisemaan epälineaarinen yhtälö, mistä johtuen niiden käyttö on hankalampaa kuin eksplisiittisten menetelmien. Yleensä kuitenkin implisiittiset menetelmät ovat käyttökelpoisempia, koska niillä on paremmat stabiliteettiominaisuudet. Implisiittiset moniaskelmenetelmät voidaan kirjoittaa muotoon y n+k = ψ n+k + hβ k f (t n+k,y n+k ),
100 LUKU 7. TAVALLISTEN DIFFERENTIAALIYHTÄLÖIDEN NUMERIIKASTA missä ψ n+k = k 1 k 1 α j y n+ j + h β j f (t n+ j,y n+ j ). j=0 j=0 Silloin y n+k täytyy ratkaista epälineaarisesta yhtälö(ryhmä)stä F(y) = y + hβ k f (t n+k,y) + ψ n+k = 0. (7.9) Hyvä alkuarvaus yhtälön (7.9) ratkaisulle saadaan käyttämällä saman kertaluvun eksplisiittistä menetelmää. Yksinkertainen kiintopisteiteraatio yhtälölle (7.9) on silloin seuraavanlainen: Lähtien eksplisiittisen menetelmän antamasta alkuarvauksesta y [0] n+k lasketaan korjatut arvot kaavalla y [ j+1] n+k = ψ n+k + hβ k f (t n+k,y [ j] n+k ), j = 0,1,... (7.10) Mikäli kiintopisteiteraatiossa (7.10) tehdään vain ennalta määrätty lukumäärä iteraatioita (usein vain yksi), niin menetelmää kutsutaan ennustus-korjaus-menetelmäksi. Esimerkki 7.3. Adamsin ja Bashforthin sekä Adamsin ja Moultonin kaavoja (k = 3) käyttäen saadaan seuraava ennustus-korjaus-menetelmä: 1. Ennusta ȳ n+3 = y n+2 + h 12 (23 f n+2 16 f n+1 + 5 f n ). 2. Laske f n+3 = f (t n+3,ȳ n+3 ). 3. Korjaa y n+3 = y n+2 + h 12 (5 f n+3 + 8 f n+2 f n+1 ). Joissain tapauksissa voi kiintopistemenetelmän suppeneminen olla hyvin hidasta, tai menetelmä ei suppene lainkaan. Tällöin voidaan yrittää yhtälön (7.9) ratkaisemista Newtonin iteraatiolla: Seuraava arvo y [ j+1] n+k lasketaan kaavalla y [ j+1] n+k = y [ j] n+k [ F y (y [ j] n+k )] 1 F(y [ j] n+k ), missä F y on funktion F Jacobin matriisi. Jos merkitään J(y) = f y (t n+k,y) (siis funktion y f (t n+k,y) Jacobin matriisi), saadaan tämä muotoon y [ j+1] n+k = y [ j] n+k + [ I hβ k J(y [ j] n+k )] 1( y [ j] n+k + hβ k f (t n+k,y [ j] n+k ) + ψ n+k). Silloin Newtonin iteraatiota käyttävä menetelmä voidaan kirjoittaa seuraavasti: 1. Määrätään alkuarvo y [0] n+k eksplisiittisellä menetelmällä. Asetetaan j = 0. 2. Muodostetaan Jacobin matriisi J(y [ j] n+k ) ja ratkaistaan z[ j] lineaarisesta yhtälöryhmästä [ I hβk J(y [ j] n+k )] z [ j] = y [ j] n+k + hβ k f (t n+k,y [ j] n+k ) + ψ n+k. 3. Asetetaan y [ j+1] n+k = y [ j] n+k + z[ j]. 4. Jos z [ j] on riittävän pieni, lopetetaan. Muuten asetetaan j := j+1 ja jatketaan askeleesta 2. Jos differentiaaliyhtälöryhmässä on paljon yhtälöitä, niin edellisen algoritmin askel 2 on luonnollisesti työläs. Tässäkin tapauksessa voidaan käyttää erilaisia Newtonin menetelmän variaatioita (vrt. luku 3.8).
7.2. LINEAARISET MONIASKELMENETELMÄT 101 Esimerkki 7.4. Tarkastellaan alkuarvotehtävän y (t) = siny(t), y(0) = 1. ratkaisemista yksinkertaisella kaavaparilla: Ennustin (Euler): y n+1 = y n + h f n Korjain (impl. Euler): y n+1 = y n + h f n+1 Newtonin menetelmä arvon y n+1 laskemiseksi saa tällöin muodon y [0] n+1 = y n + hsiny n y [ j+1] j] n+1 = y[ n+1 y[ j] j] n+1 hsiny[ n+1 y n 1 hcosy [ j], n+1 j = 0,1,2,... 7.2.3 Menetelmävirheestä Olkoon y = y(t) alkuarvotehtävän tarkka ratkaisu. Määritellään paikallinen menetelmävirhe k 1 L[y(t n+k ),h] = y(t n+k ) α j y(t n+ j ) h β j y (t n+ j ). Sijoitetaan tähän Taylorin kehitelmät y(t n+ j ) = y (t n+ j ) = Silloin saadaan missä q i=0 q 1 i=0 ( jh) i i! ( jh) i i! L[y(t n+k ),h] = k 1 C 0 = 1 j=0 j=0 k j=0 y (i) (t n ) + ( jh)q+1 (q + 1)! y(q+1) (ξ j ), ξ j ]t n,t n+ j [, y (i+1) (t n ) + ( jh)q y (q+1) (ζ j ), ζ j ]t n,t n+ j [. q! α j, q i=0 C i = ki k 1 i! j i j=0 i! α j C i h i y (i) (t n ) + O(h q+1 ), k j=0 j i 1 (i 1)! β j, 0 < i q, (7.11) kun sovitaan, että 0! = 1 ja 0 0 = 1. Muodostetaan arvio paikalliselle menetelmävirheelle. Vaaditaan, että C 0 = C 1 = = C p = 0 (jollain p < q). Tällöin sanotaan, että vastaavan lineaarisen moniaskelmenetelmän kertaluku on p. Nämä p + 1 ehtoa antavat yhtälöryhmän menetelmän parametrien määräämiseksi. Nyt on L[y(t n+k ),h] = C p+1 h p+1 y (p+1) (t n ) + O(h p+2 ). Menetelmävirhe on paikallinen seuraavassa mielessä. Oletetaan, että aloitusarvot y n,y n+1,..., y n+k 1 ovat tarkkoja. Silloin k 1 y n+k = j=0 k 1 = j=0 α j y n+ j + h k j=0 k 1 α j y(t n+ j ) + h β j f n+ j j=0 β j y (t n+ j ) + hβ k f (t n+k,y n+k ),
102 LUKU 7. TAVALLISTEN DIFFERENTIAALIYHTÄLÖIDEN NUMERIIKASTA joten L[y(t n+k ),h]:n määritelmän mukaan ( y(t n+k ) y n+k = L[y(t n+k ),h] + hβ k f ( t n+k,y(t n+k ) ) ) f (t n+k,y n+k ). Väliarvolausetta käyttäen saadaan y(t n+k ) y n+k = L[y(t n+k ),h] + hβ k f y (t n+k,ξ n+k ) ( y(t n+k ) y n+k ), missä ξ n+k on pisteiden y(t n+k ) ja y n+k välisellä janalla, ja f y on funktion f osittaisderivaatta toisen argumentin suhteen (vektoritapauksessa Jacobin matriisi). Tällöin L[y(t n+k ),h] = [ I hβ k f y (t n+k,ξ n+k ) ]( y(t n+k ) y n+k ), missä I on identtinen matriisi. (Eksplisiittisissä menetelmissä on kerroin β k = 0, jolloin [I hβ k f y (t n+k,ξ n+k )] = I.) Siten L[y(t n+k ),h] on samaa suuruusluokkaa kuin tehty virhe pisteessä t n+k sillä edellytyksellä, että aikaisemmissa pisteissä ei ole tehty lainkaan virhettä. Tästä tulee termi paikallinen. Edellisestä yhtälöstä seuraa myös (sekä eksplisiittisille että implisiittisille menetelmille) y(t n+k ) y n+k = C p+1 h p+1 y (p+1) (t n ) + O(h p+2 ), (7.12) missä p on siis menetelmän kertaluku. 7.3 Moniaskelmenetelmien stabiilisuudesta Tähän asti on virhetarkasteluissa rajoituttu vain menetelmien paikalliseen virheeseen olettamalla tarkka ratkaisu tunnetuksi pisteessä t = t n. Todellisuudessa kokonaisvirhe koostuu sekä menetelmävirheestä että virheellisestä alkuehdosta johtuvasta virheestä. 7.3.1 Differenssiyhtälöistä Seuraavassa esitetään lyhyesti, miten ratkaistaan lineaarinen vakiokertoiminen differenssiyhtälö. Tarkastellaan aluksi homogeenista yhtälöä n a j y(t + jh) = 0, (7.13) j=0 missä kertoimet a j eivät riipu t:stä. Haetaan sille ratkaisua muodossa y(t) = r t/h. Sijoitetaan tämä yhtälöön (7.13), jolloin saadaan josta jakamalla termillä r t/h seuraa n a j r (t+ jh)/h = 0, j=0 n a j r j = 0. (7.14) j=0 Voidaan osoittaa, että differenssiyhtälön (7.13) yleinen ratkaisu on muotoa y(t) = n j=1 C j r t/h j, missä r 1,r 2,...,r n ovat yhtälön (7.14) juuret edellyttäen, että ne ovat kaikki yksinkertaisia. Jos yhtälöllä on moninkertaisia juuria, on niiden kohdalta ratkaisu eri tyyppiä (esim. jos r 1 = r 2 on kaksinkertainen juuri, tulee ratkaisuun termit C 1 r t/h 1 ja C 2 (t/h)r t/h 1 ). Vakiot C 1,C 2,...,C n voidaan määrätä siten, että ratkaisu toteuttaa annetut alkuehdot.
7.3. MONIASKELMENETELMIEN STABIILISUUDESTA 103 Tarkastellaan sitten epähomogeenista differenssiyhtälöä n a j y(t + jh) = C, (7.15) j=0 missä C on vakio. Tämän yleinen ratkaisu on muotoa y(t) = ȳ(t) + y 0 (t), missä ȳ(t) on homogeenisen yhtälön (7.13) yleinen ratkaisu ja y 0 (t) on yhtälön (7.15) jokin erityisratkaisu. Eräs erityisratkaisu on vakiofunktio y 0 (t) = C/( edellyttäen, että nimittäjä on nollasta eroava. 7.3.2 Menetelmän suppenevuus Luonnollinen vaatimus lineaariselle moniaskelmenetelmälle on, että sen antama likiarvo suppenee kohti alkuarvotehtävän tarkkaa ratkaisua y = y(t), kun askelpituus h lähenee nollaa. Muotoillaan tämä vaatimus seuraavasti: n j=0 a j ), Määritelmä 7.1. Lineaarinen moniaskelmenetelmä on suppeneva, jos lim y n = y(t n ) h 0 nh=t a t [a,b], missä y n on menetelmän antama likiarvo aloitusarvoilla y j = η j (h), joille pätee η j (h) y(a) = ŷ 0, kun h 0, kaikilla j = 0,1,...,k 1. Huomautus 7.2. Tässä n ei ole kiinteä, vaan n +, kun h 0. Määritelmässä ei vaadita, että aloitusarvot y j olisivat tarkkoja, vaan ainoastaan, että ne lähenevät alkuarvoa y(a) = ŷ 0, kun h 0. Ei vaadita edes, että y 0 = y(a). Voidaan osoittaa, että suppeneva moniaskelmenetelmä on välttämättä vähintään ensimmäistä kertalukua, ts. yhtälöt (ks. (7.11)) k 1 1 j=0 α j = 0, k 1 k k jα j β j = 0, j=0 j=0 ovat voimassa. Tällaista menetelmää sanotaan konsistentiksi. Konsistenttisuus ei kuitenkaan ole riittävä ehto suppenevuudelle. 7.3.3 Nollastabiliteetti Tarkastellaan alkuarvotehtävää { y (t) = 0, (7.16) y(0) = 0, jonka ratkaisu on y 0. Käytetyn menetelmän tulee tietenkin toimia myös tällaiselle triviaalille yhtälölle. Näin voidaan johtaa välttämättömiä ehtoja, jotka menetelmän tulee täyttää. Tehtävään (7.16) sovellettuna yleinen lineaarinen moniaskelmenetelmä on muotoa k 1 y n+k = α j y n+ j. j=0 Tämä on lineaarinen vakiokertoiminen differenssiyhtälö, joka voidaan ratkaista käyttäen edellä esitettyjä tuloksia. Olkoot r 1,r 2,...,r k karakteristisen yhtälön k j=0 α j r j = 0, (α k = 1), (7.17)
104 LUKU 7. TAVALLISTEN DIFFERENTIAALIYHTÄLÖIDEN NUMERIIKASTA juuret, jotka aluksi oletetaan kaikki yksinkertaisiksi. Suppenevuuden määritelmän mukaan etsitään sellaista ratkaisua y n, jolle aloitusarvot y j ( j = 0,1,...,k 1) lähenevät alkuarvoa y(0) = 0, kun h 0. Tällainen ratkaisu on muotoa ) ) k y n = y(t n ) = h( C j r t n/h j j=1 k = h( C j r n j j=1 Nyt halutaan, että y n 0, kun h 0 (eli n + ). Olkoon t kiinteä. Silloin lim h 0 nh=t hr n r n j j = t lim n + n = 0 r j 1, joten välttämätön ehto menetelmän suppenemiselle on, että r j 1 kaikilla j = 1,2,...,k. Jos taas karakteristisella yhtälöllä (7.17) on moninkertaisia juuria r j, niin vastaavalla tavalla voidaan osoittaa, että tällaisille juurille pitää olla voimassa r j < 1. Tämän perusteella voidaan esittää seuraava määritelmä: Määritelmä 7.2. Lineaarinen moniaskelmenetelmä on nollastabiili, jos sen kertoimista muodostetun karakteristisen yhtälön (7.17) kaikki juuret ovat itseisarvoltaan 1, ja kaikki sellaiset juuret, joiden itseisarvo = 1, ovat yksinkertaisia. Moniaskelmenetelmän suppenevuudelle voidaan osoittaa seuraava tulos: Lause 7.2. (Dahlqvist) Välttämätön ja riittävä ehto sille, että lineaarinen moniaskelmenetelmä on suppeneva, on että se on konsistentti ja nollastabiili. Huomataan, että jos menetelmä on konsistentti, niin k j=0 α j = 0, joten r = 1 on eräs karakteristisen yhtälön (7.17) juurista. Sovitaan, että se on r 1. Lisäksi, jos menetelmä on nollastabiili, on r 1 yksinkertainen juuri. Esimerkki 7.5. Tarkastellaan moniaskelmenetelmää y n+2 = (1 + a)y n+1 ay n + h 2( (3 a) fn+1 (1 + a) f n ), missä a on annettu vakio. Menetelmää vastaava karakteristinen yhtälö on r 2 + (1 + a)r a = 0, jonka juuret ovat r 1 = 1 ja r 2 = a. Voidaan osoittaa, että menetelmän kertaluku on 3, jos a = 5; muussa tapauksessa kertaluku on 2. Valinta a = 5 antaa siis korkeampaa kertalukua olevan menetelmän, mutta se ei ole nollastabiili. Jotta menetelmä olisi nollastabiili, ja siten suppeneva, tulee olla a < 1 tai a = 1. Yleisessä k-askelmenetelmässä on 2k+1 vapaata kerrointa (kun α k = 1). Yhtälöiden (7.11) mukaan menetelmä voisi periaatteessa olla kertalukua 2k. Käytännössä kuitenkin stabiliteettivaatimus rajoittaa kertalukua pienemmäksi. Lause 7.3. Nollastabiilin lineaarisen k-askelmenetelmän korkein mahdollinen kertaluku on k + 1, kun k on pariton, ja k + 2, kun k on parillinen. 7.3.4 Heikko stabiliteetti Osoittautuu, että nollastabiliteetti ei vielä välttämättä takaa menetelmän moitteetonta toimintaa. Itse asiassa useimmat menetelmät ovat käyttökelpoisia vain tietyillä askelpituuksilla. Olkoon käytetty lineaarinen moniaskelmenetelmä konsistentti ja nollastabiili. Alkuarvotehtävän tarkalle ratkaisulle y = y(t) on silloin voimassa k 1 y(t n+k ) = j=0 α j y(t n+ j ) + h k j=0 β j f ( t n+ j,y(t n+ j ) ) + T n+k, (7.18).
7.3. MONIASKELMENETELMIEN STABIILISUUDESTA 105 missä T n+k = L[y(t n+k ),h] on paikallinen menetelmävirhe. Olkoon ỹ n+k menetelmän antama likiarvo, jolloin k 1 ỹ n+k = j=0 α j ỹ n+ j + h k j=0 β j f (t n+ j,ỹ n+ j ) + R n+k, (7.19) missä R n+k on lukujen äärellisestä esitystavasta johtuva pyöristysvirhe. Ratkaisun kokonaisvirhe pisteessä t n+k on y(t n+k ) ỹ n+k = ẽ n+k. Vähentämällä yhtälöt (7.18) ja (7.19) toisistaan saadaan k 1 ẽ n+k = j=0 α j ẽ n+ j + h k j=0 missä φ n+k = T n+k R n+k. Väliarvolauseen mukaan on β j [ f ( tn+ j,y(t n+ j ) ) f (t n+ j,ỹ n+ j ) ] + φ n+k, f ( t n+ j,y(t n+ j ) ) f (t n+ j,ỹ n+ j ) = f y (t n+ j,ξ n+ j )ẽ n+ j, missä ξ n+ j on pisteiden y(t n+ j ) ja ỹ n+ j välisellä janalla. Oletetaan lisäksi, että f y = λ = vakio ja φ n = φ = vakio. Tällöin saadaan linearisoitu virheyhtälö k 1 ẽ n+k = joka voidaan kirjoittaa muotoon j=0 k j=0 α j ẽ n+ j + hλ k j=0 β j ẽ n+ j + φ, (α j + hλβ j )ẽ n+ j = φ. (7.20) Tämä on jälleen lineaarinen differenssiyhtälö, jonka yleinen ratkaisu on ẽ n = k j=1 C j z n j φ/(hλ k j=0 β j ), ( k j=0 α j = 0), missä z 1,z 2,...,z k ovat stabiliteettiyhtälön (eli karakteristisen yhtälön) k j=0 (α j + hλβ j )z j = 0 (7.21) yksinkertaiset juuret (moninkertaiset juuret käsitellään kuten aikaisemminkin.) Jotta ratkaisumenetelmä olisi käyttökelpoinen, ei virhe ẽ n saa ainakaan kasvaa, kun n kasvaa. Siten on luonnollista esittää seuraava määritelmä: Määritelmä 7.3. Lineaarinen moniaskelmenetelmä on absoluuttisesti stabiili annetulla hλ, jos stabiliteettiyhtälön (7.21) kaikki juuret ovat itseisarvoltaan < 1. Askelpituus h, jolla menetelmä on absoluuttisesti stabiili, riippuu siis vakiosta λ, ja siten ratkaistavasta differentiaaliyhtälöstä. Yleensä on olemassa jokin (kompleksitason) alue, mihin tulon hλ tulee kuulua, jotta absoluuttinen stabiliteetti olisi voimassa. Huomaa, että edellä oleva pätee (pienin merkinnällisin muutoksin) myös vektoritapauksessa, jolloin f y on matriisi (funktion y f (t n+ j,y) Jacobin matriisi). Oletetaan, että f y :n ominaisarvot λ i, i = 1,2,...,m, ovat kaikki erisuuria. Silloin voidaan osoittaa, että yhtälö (7.20) tulee muotoon k j=0 (α j + hλ i β j )( d n+ j ) i = ψ i, i = 1,2,...,m, missä vektorit d n+ j ja ψ saadaan vektoreista ẽ n+ j ja φ kertomalla ne sopivalla matriisilla. Siten d n käyttäytyy täsmälleen samoin kuin ẽ n, kun n kasvaa, joten edellinen
106 LUKU 7. TAVALLISTEN DIFFERENTIAALIYHTÄLÖIDEN NUMERIIKASTA määritelmä pätee edelleen, kunhan λ tulkitaan ominaisarvojen muodostamaksi vektoriksi. Aikaisemmin on jo todettu, että karakteristisella yhtälöllä (7.17) on juuri r 1 = 1. Jos hλ = 0, niin stabiliteettiyhtälöllä (7.21) on tietenkin samat juuret. Siten on olemassa jokin juuri olkoon se z 1 siten, että z 1 1, kun hλ 0. Edelleen voidaan osoittaa, että z 1 on itse asiassa muotoa exp(hλ) + O(h p+1 ), hλ 0, missä p on menetelmän kertaluku. Tällöin z 1 > 1, kun hλ > 0 on tarpeeksi pieni. Siten, jos λ > 0, niin mikään moniaskelmenetelmä ei voi olla absoluuttisesti stabiili pienillä askelpituuksilla. Siitä huolimatta menetelmä voi olla täysin käyttökelpoinen, sillä suhteellinen virhe voi pysyä alhaisena, vaikka absoluuttinen virhe kasvaakin. Esimerkki 7.6. Tarkastellaan alkuarvotehtävää { y (t) = λy(t), y(0) = 1, jonka tarkka ratkaisu on y(t) = exp(λt). Kun yhtälöön sovelletaan lineaarista moniaskelmenetelmää, saadaan yhtälö k 1 y n+k = j=0 α j y n+ j + hλ joka voidaan kirjoittaa differenssiyhtälöksi Tämän yleinen ratkaisu on y n = k j=1 k j=0 k j=0 (α j + hλβ j )y n+ j = 0. C j z n j = z n 1 ( C 1 + k j=2 β j y n+ j, C j (z j /z 1 ) n ), missä z 1,z 2,...,z k ovat yhtälön (7.21) juuret. Kuten edellä todettiin, voidaan osoittaa, että z 1 exp(hλ). Siten ( y n exp(nhλ) C 1 + k j=2 C j (z j /z 1 ) n ). Jos z j /z 1 > 1, niin (z j /z 1 ) n +, kun n +. Tässä tapauksessa siis differenssiyhtälön ratkaisu ei voi lähestyä todellista ratkaisua exp(λt). Jos sen sijaan z j /z 1 < 1 kaikilla j = 2,3,...,k, niin kaikki termit summalausekkeessa lähenevät nollaa. Silloin differenssiyhtälön ratkaisu y n käyttäytyy kuten todellinen ratkaisu. Edellisen esimerkin perusteella voidaan esittää seuraava määritelmä: Määritelmä 7.4. Lineaarinen moniaskelmenetelmä on suhteellisesti stabiili annetulla hλ, jos stabiliteettiyhtälön (7.21) juurille on voimassa z j < z 1, j = 2,3,...,k, missä z 1 1, kun hλ 0. Tämäkin määritelmä pätee myös vektoritapauksessa, kunhan λ tulkitaan Jacobin matriisin f y ominaisarvojen muodostamaksi vektoriksi. Huomaa, että absoluuttisesti stabiilin menetelmän ei tarvitse olla suhteellisesti stabiili. Toisaalta menetelmä, joka ei ole absoluuttisesti stabiili missään, voi olla suhteellisesti stabiili joillain hλ. Esimerkki 7.7. Tarkastellaan moniaskelmenetelmää y n+2 = y n + h 3 ( f n+2 + 4 f n+1 + f n ).
7.4. KANKEAT DIFFERENTIAALIYHTÄLÖT 107 Voidaan osoittaa, että menetelmän kertaluku on 4 (joka on optimaalinen kertaluku kaksiaskelmenetelmille). Menetelmää vastaava stabiliteettiyhtälö on ( 1 + 1 3 hλ)z2 + ( 4 3 hλ)z + (1 + 1 hλ) = 0. 3 Helposti todetaan, että yhtälöllä on kaksi erisuurta reaalista juurta. Näiden lausekkeet ovat kuitenkin melko monimutkaisia, joten ei ratkaista yhtälöä tarkasti. Merkitään z 1 = 1 + hλ ja z 2 = 1 + hλ/3, jolloin ( 1 + 1 3 hλ)z2 1 + ( 4 3 hλ)z 1 + (1 + 1 3 hλ) = (hλ)2 + 1 3 (hλ)3, ( 1 + 1 3 hλ)z2 2 + ( 4 3 hλ)z 2 + (1 + 1 3 hλ) = 1 9 (hλ)2 + 1 27 (hλ)3. Siis z 1 ja z 2 toteuttavat yhtälön tarkkuudella O ( (hλ) 2) ja ovat siten hyviä likiarvoja juurille, kun hλ on pieni. Jos hλ > 0, on z 1 > 1, ja jos hλ < 0, on z 2 > 1. Siten menetelmä ei ole absoluuttisesti stabiili millään hλ R. Toisaalta, jos hλ > 0, on z 2 < z 1, ja jos hλ < 0, on z 2 > z 1. Siten menetelmä on suhteellisesti stabiili positiivisilla hλ. Tämä pätee vain pienillä hλ:n arvoilla, mutta käyttämällä tarkkoja lausekkeita juurille, voitaisiin osoittaa, että suhteellinen stabiilisuus on voimassa kaikilla hλ ]0,+ [. 7.4 Kankeat differentiaaliyhtälöt Tarkastellaan differentiaaliyhtälöryhmää x (t) = y(t), y (t) = 1 ( ) (7.22) x(t) + y(t), ε ja tutkitaan aluksi, miten sen tarkka ratkaisu käyttäytyy. Voidaan osoittaa, että tarkka ratkaisu on x(t) = C 1 exp(λ 1 t) +C 2 exp(λ 2 t), y(t) = C 1 λ 1 exp(λ 1 t) +C 2 λ 2 exp(λ 2 t), missä λ 1 ja λ 2 ovat yhtälön ελ 2 λ 1 = 0 juuret, siis λ 1 = 1 + 1 + 4ε, λ 2 = 1 1 + 4ε. 2ε 2ε Vakiot C 1 ja C 2 voidaan määrätä siten, että tietyt alkuehdot ovat voimassa. Oletetaan, että 1/4 < ε < 0, jolloin molemmat juuret λ 1 ja λ 2 ovat reaalisia (ja negatiivisia). Jos ε on itseisarvoltaan hyvin pieni, on λ 1 1/ε ja λ 2 1. Silloin sekä x:n että y:n lausekkeissa esiintyy termit exp(t/ε) ja exp( t), jotka molemmat lähenevät nollaa, kun t +, mutta täysin eri nopeuksilla. Tästä aiheutuu ongelmia sopivan askelpituuden h valinnassa. Edellä kuvattu käyttäytyminen on tunnusomaista ns. kankeille differentiaaliyhtälöille. Niiden ratkaisuissa on osia, jotka lähenevät nollaa hyvin nopeasti verrattuna toisiin termeihin. Toinen mahdollisuus on, että mukana on värähtelyä, jonka taajuus on suuri verrattuna ratkaisun yleiseen kulkuun. Tutkitaan seuraavaksi yhtälöryhmän (7.22) numeerista ratkaisemista. Käytetään Eulerin menetelmää ja pyritään määräämään sellainen askelpituus h, jolla menetelmä olisi absoluuttisesti stabiili. Yhtälöryhmä voidaan kirjoittaa muotoon [ ] x [ ] (t) [ ] 0 1 x(t) y = (t) 1/ε 1/ε y(t). Huomataan, että edellä mainitut juuret λ 1 ja λ 2 ovat itse asiassa oikealla puolella ole-
108 LUKU 7. TAVALLISTEN DIFFERENTIAALIYHTÄLÖIDEN NUMERIIKASTA van matriisin ominaisarvot. Eulerin menetelmää vastaava stabiliteettiyhtälö on silloin k j=0 (α j + hλ i β j )z j = 1 + hλ i z = 0, i = 1,2, jolla on juuri z = 1 + hλ i. Askelpituus h täytyy nyt valita siten, että 1 + hλ i < 1, i = 1,2. Oletetaan edelleen, että ε on negatiivinen ja itseisarvoltaan hyvin pieni. Tällöin h < min{ 2/λ 1, 2/λ 2 } = 2/λ 1 2ε. Siten askelpituuden tulee olla hyvin pieni, jotta Eulerin menetelmä olisi absoluuttisesti stabiili. Toisaalta pientä askelpituutta käytettäessä askelten lukumäärä on suuri, jolloin pyöristys- ja menetelmävirhettä tulee paljon. Näin ollen Eulerin menetelmä ei ole käyttökelpoinen yhtälölle (7.22). Tarkastellaan seuraavaksi yleisempää differentiaaliyhtälöä y (t) = Ay(t) + φ(t), (7.23) missä A on t:stä riippumaton matriisi, jolla on erisuuret ominaisarvot λ i, i = 1,2,...,m. Voidaan osoittaa, että yhtälön yleinen ratkaisu on y(t) = m i=1 C i exp(λ i t)z i + y 0 (t), missä z i on ominaisarvoa λ i vastaava ominaisvektori, y 0 on yhtälön (7.23) jokin erityisratkaisu ja C 1,C 2,...,C m ovat vakioita. Todetaan, että jos jonkin ominaisarvon reaaliosa Reλ i on positiivinen, ratkaisun vastaava termi lähenee ääretöntä, kun t +. Sovelluksissa tämä ilmentää eitoivottua käyttäytymistä. Siksi oletetaan, että Reλ i < 0 kaikilla i = 1,2,...,m, jolloin ratkaisun kukin termi lähenee nollaa. Olkoot ominaisarvot numeroitu siten, että λ 1 on se, jolla Reλ i on pienin, ja λ m se, jolla Reλ i on suurin. Siten termi, jossa esiintyy λ 1, lähenee nollaa hitaimmin, ja vastaavasti termi, jossa esiintyy λ m, lähenee nollaa nopeimmin. Kun halutaan löytää numeerisesti erityisratkaisu y 0, täytyy ratkaisemisessa edetä niin pitkälle, että kaikki termit exp(λ i t) 0. Tällöin, mitä pienempi on Reλ 1, sitä suurempi on ratkaisuväli. Toisaalta, kuten johdannon esimerkissä todettiin, mitä suurempi on Reλ m, sitä lyhyempää askelpituutta täytyy käyttää, jotta hλ i :t pysyisivät menetelmän stabiilisuusalueella. Siten, jos Reλ m Reλ 1, täytyy käyttää askelpituutta, joka on hyvin lyhyt suhteessa ratkaisuvälin pituuteen. Tämän perusteella esitetään seuraava määritelmä: Määritelmä 7.5. Lineaarista differentiaaliyhtälöä (7.23) sanotaan kankeaksi, jos (i) Reλ i < 0, i = 1,2,...,m, ja (ii) max Reλ i min Reλ i, missä λ i :t ovat matriisin A ominaisarvot. Määritelmä voidaan yleistää epälineaariselle yhtälölle y (t) = f ( t,y(t) ) ; tällöin λ i = λ i (t), i = 1,2,...,m, ovat Jacobin matriisin f y ominaisarvot. Kankeiden yhtälöiden ratkaisemiseen tulisi siis käyttää menetelmiä, jotka ovat stabiileja myös suuremmilla askelpituuksilla. Tällaisia menetelmiä sanotaan A-stabiileiksi: Määritelmä 7.6. Differentiaaliyhtälön ratkaisumenetelmä on A-stabiili, jos se on absoluuttisesti stabiili kaikilla hλ, joille Reλ < 0. Jos menetelmä on A-stabiili, niin silloin edellä mainitut ongelmat häviävät: Olipa Reλ m miten suuri tahansa, stabiilisuusvaatimus ei aiheuta mitään rajoituksia askelpituudelle. A-stabiilisuus voidaan määritellä ekvivalentisti myös seuraavasti: Määritelmä 7.7. Differentiaaliyhtälön ratkaisumenetelmä on A-stabiili, jos sen antamalle testiyhtälön y (t) = λy(t) ratkaisujonolle {y n } pätee y n 0, kun n +, kaikilla hλ, joille Reλ < 0.
7.4. KANKEAT DIFFERENTIAALIYHTÄLÖT 109 A-stabiilisuus on kuitenkin melko suuri rajoitus; voidaan nimittäin osoittaa: Lause 7.4. Mikään eksplisiittinen lineaarinen moniaskelmenetelmä ei voi olla A- stabiili. A-stabiilin lineaarisen moniaskelmenetelmän kertaluku voi olla korkeintaan kaksi. Koska A-stabiilisuus on vaikeasti saavutettavissa, voidaan määritellä hieman lievempiä stabiilisuuden asteita, esimerkiksi: Menetelmä on A(α)-stabiili, missä α ]0,π/2[, jos se on absoluuttisesti stabiili kaikilla hλ, joille π α < argλ < π+α. Voidaan osoittaa, että on olemassa A(α)-stabiileja lineaarisia k-askelmenetelmiä, k = 3 tai 4, joiden kertaluku on p = k.
110 LUKU 7. TAVALLISTEN DIFFERENTIAALIYHTÄLÖIDEN NUMERIIKASTA
Kirjallisuutta [1] K. Atkinson, An introduction to numerical analysis, Wiley (1978) [2] B. Bradie, A friendly introduction to numerical analysis, Pearson/Prentice Hall (2006) [3] S. D. Conte & C. de Boor, Elementary numerical analysis: an algorithmic approach, McGraw-Hill (1980) [4] P. J. Davis & P. Rabinowitz, Methods of Numerical Integration, Academic Press (1984) [5] C. de Boor, Practical Guide to Splines, Springer-Verlag (1978) [6] J. Haataja, J. Käpyaho & J. Rahola, Numeeriset menetelmät, CSC-Tieteellinen laskenta Oy (1993) [7] G. Hämmerlin & K.-H. Hoffmann, Numerical Mathematics, Springer-Verlag (1991) [8] D. E. Knuth, The art of computer programming, Addison-Wesley (1981) [9] M. J. Maron, Numerical analysis : a practical approach, MacMillan (1982) [10] M. Mäkelä & O. Nevanlinna, Numeerinen matematiikka, Gaudeamus (1984) [11] J. H. Mathews & K. D. Fink, Numerical methods using Matlab (4th edition), Pearson/Prentice Hall (2004) [12] W. H. Press et al., Numerical recipes: the art of scientific computing, Cambridge University Press (1986) [13] A. Rahlston & P. Rabinowitz, A first course in numerical analysis, International Series in pure and appl. math. (1978) [14] G. W. Stewart, Afternotes on Numerical Analysis, SIAM (1996) [15] J. Stoer & R. Bulirsh, Introduction to numerical analysis, Springer-Verlag (1980) 111
112 KIRJALLISUUTTA
Liite A Liukulukuaritmetiikasta Tietokoneessa luvut tallennetaan kiinteällä määrällä bittejä. Tallennukseen käytettävien bittien määrä vaihtelee. Numeerisessa laskennassa tarvittavat luvut tallennetaan tietokoneessa kahdella tavalla: kiintolukuina (integer) tai liukulukuina (floating point). Kiintolukuesityksessä luvun esitys on tarkka. Samoin aritmeettiset operaatiot ovat tarkkoja, mikäli pysytään lukualueen sisällä ja jakolasku tulkitaan kokonaislukujakolaskuna. Täten kiintolukuesitys ei kaipaa tässä yhteydessä sen enempää huomiota. A.1 Liukulukuesitys Nollasta poikkeava luku x esitetään B-kantaisessa liukulukuesityksessä muodossa x = ( 1) s M B E, (A.1) missä s {0,1} määrää luvun etumerkin, M R on mantissa ja E Z on eksponentti. Yleensä mantissa on normalisoitu, eli vaaditaan esimerkiksi B 1 M < 1 tai 1 M < B. Tällöin 10-kantainen normalisoitu liukuluku on muotoa x = ( 1) s (0.x 1 x 2 x 3...) 10 10 E, x i {0,...,9}, (0.1 M < 1), ja vastaavasti 2-kantainen normalisoitu liukuluku on muotoa x = ( 1) s (1.b 1 b 2 b 3...) 2 2 E, b i {0,1}, (1 M < 2). Koska tietokoneessa voidaan esittää vain äärellinen määrä informaatiota, niin esityksen (A.1) sijaan käytetään äärellistä likukulukuesitystä, jossa M = 1.b 1 b 2 b 3...b m, E min E E max. (A.2) Vielä 1970-luvulla käytössä oli tusinan verran erilaisia liukulukustandardeja. Useimmissa nykyisissä tietokoneissa käytetään kuitenkin IEEE:n (Institute of Electrical and Electronics Engineers) standardin mukaista 2-kantaista liukulukuesitystä. Kuvassa A.1 on esitetty 32-bittinen IEEE-standardin mukainen liukuluku. Yksi bitti on varattu etumerkille, kahdeksan bittiä eksponentille ja 23 bittiä mantissalle. Tällä esityksellä voidaan esittää 113
114 LIITE A. LIUKULUKUARITMETIIKASTA s }{{} 1 E } {{ } 8 M } {{ } 23 Kuva A.1: IEEE-liukuluvun 32-bittinen esitys suuruusluokkaa 10 38...10 38 olevat luvut noin seitsemän merkitsevän numeron tarkkuudella. Tallennettuun eksponenttiin lisätään aina 127, joten se on aina positiivinen. Lyhintä järjestelmän tarjoamaa liukulukuesitystä kutsutaan yksinkertaiseksi tarkkuudeksi. Kaksinkertaisen tarkkuuden luvut ovat kaksi kertaa pidempiä. IEEE-standardin mukaisessa kaksinkertaisen tarkkuuden liukuluvussa on varattu yksi bitti etumerkille, 11 bittiä eksponentille ja 52 bittiä mantissalle. Tällä esityksellä voidaan esittää suuruusluokkaa 10 307...10 307 olevat luvut noin 15:n merkitsevän numeron tarkkuudella. Mielivaltaista reaalilukua ei tietenkään voida esittää äärellisellä liukulukuesityksellä (A.2). Ensinnäkin eksponentin vaihteluväli on rajoitettu, mikä rajaa itseisarvoltaan liian suuret ja pienet luvut pois; toiseksi mantissalla voidaan esittää vain äärellinen määrä rationaalilukuja väliltä [1,2[. Siten liukulukujen joukolle F on voimassa F Q [x min,x max ], missä Q on rationaalilukujen joukko ja x min,x max esityksen (A.2) mahdollistamat suurin ja pienin luku. Liukuluvut ovat lisäksi keskittyneet lähelle nollaa. Esimerkiksi väleissä [2 128,2 127 ] ja [2 126,2 127 ] on yhtä monta IEEE-standardin mukaista 32-bittistä liukulukua, 2 23 kappaletta. Kun reaalilukua x [x min,x max ] approksimoidaan äärellisellä liukuluvulla, menetetään mantissan bitit b m+1,b m+2,..., koska ne eivät mahdu tallennusmuotoon. Nykyisissä liukulukustandardeissa äärellisen esityksen viimeinen bitti b m määrätään pyöristämällä. Tällöin mantissa M korvataan m-bittisellä mantissalla M r siten, että absoluuttinen virhe M M r minimoituu: 2 m, s > 0, 2 m M + 1 2 M r = 2 m 2 m M 1 2, s < 0. (A.3) Kaava (A.3) näyttää monimutkaiselta, mutta se voidaan implementoida prosessorissa tehokkaasti. Pyöristetyn mantissan absoluuttinen virhe on M M r 1 2 2 m = 2 m 1 =: ε A ja suhteellinen pyöristysvirhe (relative machine precision) M M r M 2 m 1 1 2 = 2 m =: ε R. (A.4) Joissakin vanhemmissa liukulukustandardeissa käytettiin pyöristämisen sijaan katkaisua, eli bitit b m+1,... hylätään eikä mitään biteistä b 1,...,b m muuteta. Katkaisua käytettäessä suhteellinen pyöristysvirhe on ε R = 2 m+1.
A.1. LIUKULUKUESITYS 115 A.1.1 Liukulukuaritmetiikka Tarkastellaan peruslaskutoimituksia x y, missä x,y ovat liukulukuja ja {+,,,/}. Vastaavia liukulukuaritmetiikalla suoritettuja laskutoimituksia merkitään :lla. IEEEstandardin mukaista liukulukuaritmetiikkaa käytettäessä liukulukulaskutoimituksille pätee x y = (x y)(1 + ε), ε ε R. (A.5) Siis liukulukulaskutoimituksen tulos on tarkka tulos x y pyöristettynä käytetyn liukulukuesityksen mukaisesti. Liukulukujen joukko ei ole sama kuin reaalilukujen joukko eikä liukulukulaskutoimituksen tulos ole yleensä sama kuin reaalilukulaskutoimituksen tulos. Täten liukulukuaritmetiikka saattaa aiheuttaa yllätyksiä asiaan perehtymättömälle tai huolimattomalle ohjelmoijalle aivan tavallisiltakin näyttävissä laskutoimituksissa. Liukulukujen joukko F ei ole suljettu laskutoimitusten + ja suhteen. Kun aritmeettinen operaatio tuottaa liukuluvun, jonka eksponentille E > E max, tapahtuu ylivuoto. Esimerkiksi 32-bittisen liukuluvun 10 30 korottaminen toiseen potenssiin aiheuttaa ylivuodon. Samalla tavoin, jos aritmeettinen operaatio tuottaa luvun, jolle E < E min, tapahtuu alivuoto. Vastaavasti 32-bittisen liukuluvun 10 30 korottaminen toiseen potenssiin aiheuttaa alivuodon. Myöskään yhteenlaskun ja kertolaskun liitäntälait sekä kertolaskun osittelulaki eivät ole yleisesti voimassa liukulukuaritmetiikalla. Siten esimerkiksi a (b + c) = (a b) + (a c). ei ole voimassa mielivaltaisilla a, b, c F. Eli liukulukulaskutoimituksen tulos voi riippua laskujärjestyksestä. Ylivuoto on yleensä vakava virhetilanne, ja monissa järjestelmissä se aiheuttaa ohjelman suorituksen keskeytymisen. Alivuoto sen sijaan on yleensä vähemmän vakava, ja laskutoimituksen tulos korvataan yleensä nollalla. IEEE-standardi mahdollistaa ns. nonstop-aritmetiikan. Ylivuodon tapahtuessa ohjelman suoritus jatkuu, mutta laskutoimituksen tulokseksi asetetaan erityinen liukuluku ±Inf. Määrittelemätöntä tulosta, esimerkiksi 0/0, vastaa luku NaN (not a number). Tällöin luvuille ±Inf, NaN on voimassa laskusäännöt 1/Inf = 0, 1/0 = Inf, Inf Inf = NaN, jne. Tarkastellaan lopuksi muutamia esimerkkejä tyypillisistä liukulukuaritmetiikan ongelmatilanteista ja niiden käsittelystä. Esimerkki A.1. Tarkastellaan suureen c = a 2 + b 2 laskemista, kun a = 10 30 ja b = 1. Koska lukua a 2 = 10 60 ei voida esittää yksinkertaisella tarkkuudella, aiheutuu ylivuoto kesken laskutoimituksen. Ongelma voidaan kiertää järjestämällä laskutoimitukset uudelleen muotoon c = σ (a/σ) 2 + (b/σ) 2, missä σ = max{ a, b } = 10 30. Esimerkki A.2. Tarkastellaan suuren ja pienen luvun yhteenlaskua laskemalla yhteen 10- järjestelmän luvut 0.01 ja 7000. Näiden normalisoidut liukulukuesitykset nelinumeroisen mantissan tapauksessa 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
116 LIITE A. LIUKULUKUARITMETIIKASTA Vaikka varsinainen laskutoimitus suoritetaan muistitilaa pidemmässä yksikössä, suoritetaan mantissan pyöristys neljään numeroon tulosta tallennettaessa. Saadaan siis tulos 0.7000 10 4, eli pienemmällä yhteenlaskettavalla ei ollut mitään merkitystä. Vaikka edellä kuvattu informaation menetetys oli täysin luonnollinen seuraus reaalilukujen äärellisestä esityksestä, niin se on potentiaalinen lähde vakaville virhepäätelmille. Tarkastellaan ensin summan s(n) = n i=1 1 n laskemista yksinkertaisen tarkkuuden liukulukuaritmetiikalla muutamilla parametrin n arvoilla: s(65536) = 11.66743 s(262144) = 13.0513 s(1048576) = 14.40368 s(4194304) = 15.40368 s(8388608) = 15.40368 Näiden tulosten perusteella voisi helposti päätyä (täysin virheelliseen) päätelmään lim n s(n) = 15.40368. Vähemmän dramaattinen, mutta kiusallinen tarkkuuden menetys tapahtuu, kun lasketaan likiarvo summalle s = i=1 1 = π2 i 2 6 yksinkertaisen tarkkuuden liukulukuaritmetiikalla kahdella eri tavalla: sum1 = 0.0 sum2 = 0.0 do i=1,n do i=n,1,-1 sum1 = sum1 + 1.0/(i*i) sum2 = sum2 + 1.0/(i*i) end do end do n s 1 s s 1 s 2 s s 2 3000 1.6445947 0.339E-03 1.6446007 0.333E-03 10000 1.6447253 0.208E-03 1.6448340 0.100E-03 300000 1.6447253 0.208E-03 1.6449307 0.334E-05 Havaitaan, että summa kannattaa aina laskea lähtien pienimmistä summattavista. Esimerkki A.3. Kaikkia reaalilukuja ei voida esittää tarkasti äärellisenä liukulukuna. Toisaalta kahden liukuluvun laskutoimituksen tulosta ei myöskään välttämättä voida esittää tarkasti. Siten liukulukujen yhtäsuuruuden testaaminen ei ole mielekästä. Seuraava ohjelmanpätkä jää todennäköisesti tahattomaan päättymättömään silmukkaan: s = 0.0 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.
Liite B Matemaattisia taustatietoja Merkitään jatkossa euklidisen avaruuden R n vektorien sisätuloa symbolilla, ja ja normia symbolilla. Toisin sanoen n x,y = x i y i = x T y, x = xi 2 = x,x = x T x. i=1 n i=1 Määritelmä B.1. Differentioituvan funktion f : R n R gradientti pisteessä x on osittaisderivaattojen muodostama vektori f (x) = [ f (x) x 1 f (x) x 2... f (x) x n ] T. Funktion f suuntaisderivaatta pisteessä x suuntaan v R n on f f (x +tv) f (x) (x;v) = lim = f (x),v. t 0 t Lause B.1. Taylorin lause. Jos f C n+1 ([a,b]), niin kaikille pisteille x,x + h [a,b] on voimassa n h f (x + h) = k k=0 k! f (k) (x) + hn+1 (n + 1)! f (n+1) (ξ). Lause B.2. Integraalilaskennan väliarvolause. Olkoon f,w : [a,b] R jatkuvia ja w(x) 0 (tai w(x) 0) kaikilla x [a,b]. Tällöin on olemassa ξ ]a,b[ siten, että b a b w(x) f (x)dx = f (ξ) w(x) dx. a Lause B.3. Olkoon A R n n reaalinen neliömatriisi. Tällöin seuraavat väittämät ovat ekvivalentteja: 1. Yhtälöryhmällä Ax = b on yksikäsitteinen ratkaisu kaikilla b R n. 2. Ax = 0 x = 0. 3. On olemassa käänteismatriisi A 1. 117
118 LIITE B. MATEMAATTISIA TAUSTATIETOJA 4. det(a) 0. Matriisin A ns. operaattorinormi määritellään vektorinormiin liittyen Ax A = sup x 0 x. Näin määritelty matriisinormi toteuttaa normien yhteensopivuusehdon Ax A x x R n. Määritelmä B.2. Landaun iso O -merkintä. Olkoon {x n } ja {y n } kaksi eri jonoa. Merkintä x n = O(y n ) tarkoittaa, että on olemassa vakio C > 0 ja indeksi n 0 siten, että x n C y n, kun n n 0.