R. Mäkinen NUMEERISET MENETELMÄT



Samankaltaiset tiedostot
Numeeriset menetelmät

Numeeriset menetelmät TIEA381. Luento 3. Kirsi Valjus. Jyväskylän yliopisto. Luento 3 () Numeeriset menetelmät / 45

Numeeriset menetelmät

Numeeriset menetelmät TIEA381. Luento 2. Kirsi Valjus. Jyväskylän yliopisto. Luento 2 () Numeeriset menetelmät / 39

Numeeriset menetelmät

Numeeriset menetelmät

Numeeriset menetelmät

Numeeriset menetelmät TIEA381. Luento 4. Kirsi Valjus. Jyväskylän yliopisto. Luento 4 () Numeeriset menetelmät / 44

Matriisit ja vektorit Matriisin käsite Matriisialgebra. Olkoon A = , B = Laske A + B, , 1 3 3

Numeeriset menetelmät TIEA381. Luento 6. Kirsi Valjus. Jyväskylän yliopisto. Luento 6 () Numeeriset menetelmät / 33

PERUSASIOITA ALGEBRASTA

2 Yhtälöitä ja epäyhtälöitä

Numeeriset menetelmät

Numeeriset menetelmät TIEA381. Luento 5. Kirsi Valjus. Jyväskylän yliopisto. Luento 5 () Numeeriset menetelmät / 28

k=0 saanto jokaisen kolmannen asteen polynomin. Tukipisteet on talloin valittu

(0 desimaalia, 2 merkitsevää numeroa).

FUNKTIONAALIANALYYSIN PERUSKURSSI Johdanto

3 Lineaariset yhtälöryhmät ja Gaussin eliminointimenetelmä

Numeeriset menetelmät TIEA381. Luento 12. Kirsi Valjus. Jyväskylän yliopisto. Luento 12 () Numeeriset menetelmät / 33

jakokulmassa x 4 x 8 x 3x

Funktioiden approksimointi ja interpolointi

Yhtälöryhmät 1/6 Sisältö ESITIEDOT: yhtälöt

x j x k Tällöin L j (x k ) = 0, kun k j, ja L j (x j ) = 1. Alkuperäiselle interpolaatio-ongelmalle saadaan nyt ratkaisu

Kevät Kirsi Valjus. Jyväskylän yliopisto Tietotekniikan laitos

3 Lineaariset yhtälöryhmät ja Gaussin eliminointimenetelmä

MS-C1340 Lineaarialgebra ja

Epälineaaristen yhtälöiden ratkaisumenetelmät

Kompleksianalyysi, viikko 5

Johdatus tekoälyn taustalla olevaan matematiikkaan

Iteratiiviset ratkaisumenetelmät

Ominaisarvot ja ominaisvektorit 140 / 170

BM20A5840 Usean muuttujan funktiot ja sarjat Harjoitus 7, Kevät 2018

Numeeriset menetelmät Pekka Vienonen

Luento 5: Suurten lineaaristen yhtälöryhmien ratkaiseminen iteratiivisilla menetelmillä

IV. TASAINEN SUPPENEMINEN. f(x) = lim. jokaista ε > 0 ja x A kohti n ε,x N s.e. n n

Numeeriset menetelmät TIEA381. Luento 8. Kirsi Valjus. Jyväskylän yliopisto. Luento 8 () Numeeriset menetelmät / 35

. Kun p = 1, jono suppenee raja-arvoon 1. Jos p = 2, jono hajaantuu. Jono suppenee siis lineaarisesti. Vastaavasti jonolle r k+1 = r k, suhde on r k+1

MS-A0104 Differentiaali- ja integraalilaskenta 1 (ELEC2) MS-A0106 Differentiaali- ja integraalilaskenta 1 (ENG2)

Juuri 12 Tehtävien ratkaisut Kustannusosakeyhtiö Otava päivitetty

Numeeriset menetelmät

Matriisi-vektori-kertolasku, lineaariset yhtälöryhmät

MS-A010{3,4} (ELEC*) Differentiaali- ja integraalilaskenta 1 Luento 5: Taylor-polynomi ja sarja

Lineaarialgebra ja matriisilaskenta II. LM2, Kesä /141

Reaalilukuvälit, leikkaus ja unioni (1/2)

Preliminäärikoe Pitkä Matematiikka

Epälineaaristen yhtälöiden ratkaisumenetelmät

Matematiikan tukikurssi

H7 Malliratkaisut - Tehtävä 1

LAUSEKKEET JA NIIDEN MUUNTAMINEN

MS-A0204 Differentiaali- ja integraalilaskenta 2 (ELEC2) Luento 7: Pienimmän neliösumman menetelmä ja Newtonin menetelmä.

MS-A0202 Differentiaali- ja integraalilaskenta 2 (SCI) Luento 4: Ketjusäännöt ja lineaarinen approksimointi

Diplomi-insinööri- ja arkkitehtikoulutuksen yhteisvalinta 2017 Insinöörivalinnan matematiikan koe , Ratkaisut (Sarja A)

PRELIMINÄÄRIKOE. Pitkä Matematiikka

Yhtälön ratkaiseminen

Numeeriset menetelmät

Tyyppi metalli puu lasi työ I II III

Käänteismatriisin ominaisuuksia

MATEMATIIKAN KOE, PITKÄ OPPIMÄÄRÄ HYVÄN VASTAUKSEN PIIRTEITÄ

MS-C1340 Lineaarialgebra ja differentiaaliyhtälöt

Ellipsoidimenetelmä. Samuli Leppänen Kokonaislukuoptimointi. S ysteemianalyysin Laboratorio

Insinöörimatematiikka D

1. LINEAARISET YHTÄLÖRYHMÄT JA MATRIISIT. 1.1 Lineaariset yhtälöryhmät

Harjoitus 7 -- Ratkaisut

Numeeriset menetelmät

Mitään muita operaatioita symbolille ei ole määritelty! < a kaikilla kokonaisluvuilla a, + a = kaikilla kokonaisluvuilla a.

Numeeriset menetelmät

Lineaarialgebra ja differentiaaliyhtälöt Harjoitus 4 / Ratkaisut

1 Matriisit ja lineaariset yhtälöryhmät

infoa Viikon aiheet Potenssisarja a n = c n (x x 0 ) n < 1

Ensimmäisen ja toisen kertaluvun differentiaaliyhtälöistä

Matematiikan tukikurssi

mlnonlinequ, Epälineaariset yhtälöt

PRELIMINÄÄRIKOE PITKÄ MATEMATIIKKA

MS-C1340 Lineaarialgebra ja differentiaaliyhtälöt

Yhtälöryhmä matriisimuodossa. MS-A0004/A0006 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.

13. Taylorin polynomi; funktioiden approksimoinnista. Muodosta viidennen asteen Taylorin polynomi kehityskeskuksena origo funktiolle

Matematiikan tukikurssi, kurssikerta 3

Luku 4. Derivoituvien funktioiden ominaisuuksia.

Lineaarinen yhtälöryhmä

802118P Lineaarialgebra I (4 op)

Osittaistuenta Gaussin algoritmissa: Etsitään 1. sarakkeen itseisarvoltaan suurin alkio ja vaihdetaan tämä tukialkioiksi (eli ko. rivi 1. riviksi).

Kolmannen ja neljännen asteen yhtälöistä

MS-A0004/A0006 Matriisilaskenta

MS-A0003/A0005 Matriisilaskenta Laskuharjoitus 2 / vko 45

Rollen lause polynomeille

Numeeriset menetelmät TIEA381. Luento 11. Kirsi Valjus. Jyväskylän yliopisto. Luento 11 () Numeeriset menetelmät / 37

Numeeriset menetelmät

Viikon aiheet. Funktion lineaarinen approksimointi

6. Toisen ja korkeamman kertaluvun lineaariset

Insinöörimatematiikka D

1 Rajoittamaton optimointi

Tässä dokumentissa on ensimmäisten harjoitusten malliratkaisut MATLABskripteinä. Voit kokeilla itse niiden ajamista ja toimintaa MATLABissa.

Dierentiaaliyhtälöistä

Insinöörimatematiikka D

3 = Lisäksi z(4, 9) = = 21, joten kysytty lineaarinen approksimaatio on. L(x,y) =

5 Differentiaalilaskentaa

BM20A0700, Matematiikka KoTiB2

Matematiikka B2 - Avoin yliopisto

BM20A1501 Numeeriset menetelmät 1 - AIMO

5 Lineaariset yhtälöryhmät

Transkriptio:

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)