Yhtälön ratkaiseminen



Samankaltaiset tiedostot
Numeeriset menetelmät

n. asteen polynomilla on enintään n nollakohtaa ja enintään n - 1 ääriarvokohtaa.

Kun yhtälöä ei voi ratkaista tarkasti (esim yhtälölle x-sinx = 1 ei ole tarkkaa ratkaisua), voidaan sille etsiä likiarvo.

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

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

PRELIMINÄÄRIKOE PITKÄ MATEMATIIKKA

Numeerinen integrointi

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

Matematiikan tukikurssi

mlnonlinequ, Epälineaariset yhtälöt

jakokulmassa x 4 x 8 x 3x

Harjoitus 7 -- Ratkaisut

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

Numeeriset menetelmät

Muutoksen arviointi differentiaalin avulla

Harjoituskokeiden ratkaisut Painoon mennyt versio.

Epälineaaristen yhtälöiden ratkaisumenetelmät

Matematiikan tukikurssi

Ohjelmoinnin perusteet Y Python

Vastausehdotukset analyysin sivuainekurssin syksyn välikokeeseen

Matematiikan tukikurssi

Analyysi III. Jari Taskinen. 28. syyskuuta Luku 1

Matematiikan tukikurssi

Mapu 1. Laskuharjoitus 3, Tehtävä 1

Ratkaisuehdotus 2. kurssikokeeseen

Matematiikan tukikurssi

Numeeriset menetelmät Pekka Vienonen

Mikäli funktio on koko ajan kasvava/vähenevä jollain välillä, on se tällä välillä monotoninen.

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

Ratkaisuehdotus 2. kurssikoe

Kompleksianalyysi, viikko 5

Matematiikan taito 9, RATKAISUT. , jolloin. . Vast. ]0,2] arvot.

Rollen lause polynomeille

4 Yleinen potenssifunktio ja polynomifunktio

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

MATP153 Approbatur 1B Harjoitus 6 Maanantai

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

Maksimit ja minimit 1/5 Sisältö ESITIEDOT: reaalifunktiot, derivaatta

3.1 Väliarvolause. Funktion kasvaminen ja väheneminen

3. Yhtälön numeeristen ratkaisujen etsimisestä

Matematiikan tukikurssi

MAB3 - Harjoitustehtävien ratkaisut:

Helsingin, Itä-Suomen, Jyväskylän, Oulun, Tampereen ja Turun yliopisto Matematiikan valintakoe klo Ratkaisut ja pisteytysohjeet

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

Matematiikan johdantokurssi, syksy 2017 Harjoitus 8, ratkaisuista

Matematiikan tukikurssi, kurssikerta 3

x 7 3 4x x 7 4x 3 ( 7 4)x 3 : ( 7 4), 7 4 1,35 < ln x + 1 = ln ln u 2 3u 4 = 0 (u 4)(u + 1) = 0 ei ratkaisua

Matemaattisen analyysin tukikurssi

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

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

Numeeriset menetelmät

2.2 Neliöjuuri ja sitä koskevat laskusäännöt

5 Differentiaalilaskentaa

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

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

8 Potenssisarjoista. 8.1 Määritelmä. Olkoot a 0, a 1, a 2,... reaalisia vakioita ja c R. Määritelmä 8.1. Muotoa

Yhden muuttujan funktion minimointi

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

2 Raja-arvo ja jatkuvuus

Funktio 1. a) Mikä on funktion f (x) = x lähtöjoukko eli määrittelyjoukko, kun 0 x 5?

MS-A0205/MS-A0206 Differentiaali- ja integraalilaskenta 2 Luento 8: Newtonin iteraatio. Taso- ja avaruusintegraalit

Matematiikan tukikurssi: kurssikerta 12

Kertaus. x x x. K1. a) b) x 5 x 6 = x 5 6 = x 1 = 1 x, x 0. K2. a) a a a a, a > 0

Tee kokeen yläreunaan pisteytysruudukko. Valitse kuusi tehtävää seuraavista kahdeksasta. Perustele vastauksesi!

Lukujonon raja-arvo 1/7 Sisältö ESITIEDOT: lukujonot

Matematiikan tukikurssi: kurssikerta 10

Kannan vektorit siis virittävät aliavaruuden, ja lisäksi kanta on vapaa. Lauseesta 7.6 saadaan seuraava hyvin käyttökelpoinen tulos:

MITEN RATKAISEN POLYNOMIYHTÄLÖITÄ?

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

A-osa. Ratkaise kaikki tämän osan tehtävät. Tehtävät arvostellaan pistein 0-6. Taulukkokirjaa saa käyttää apuna, laskinta ei.

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

MATEMATIIKAN KOE PITKÄ OPPIMÄÄRÄ Merkitään f(x) =x 3 x. Laske a) f( 2), b) f (3) ja c) YLIOPPILASTUTKINTO- LAUTAKUNTA

Differentiaalilaskenta 1.

Ohjelmoinnin perusteet Y Python

MAB3 - Harjoitustehtävien ratkaisut:

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne.

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

2 Funktion derivaatta

Funktioiden approksimointi ja interpolointi

Epälineaaristen yhtälöiden ratkaisumenetelmät

Differentiaali- ja integraalilaskenta 1 Ratkaisut 5. viikolle /

(a) avoin, yhtenäinen, rajoitettu, alue.

Helsingin, Itä-Suomen, Jyväskylän, Oulun, Tampereen ja Turun yliopisto Matematiikan valintakoe klo 10-13

mplperusteet 1. Tiedosto: mplp001.tex Ohjelmat: Maple, [Mathematica] Sievennä lauseke x 1 ( mplp002.tex (PA P1 s.2011)

Matematiikan tukikurssi

MS-C1340 Lineaarialgebra ja

Tekijä MAA2 Polynomifunktiot ja -yhtälöt = Vastaus a)

Numeeriset menetelmät

MAA7 7.1 Koe Jussi Tyni Valitse kuusi tehtävää! Tee vastauspaperiin pisteytysruudukko! Kaikkiin tehtäviin välivaiheet näkyviin!

3.3 Paraabeli toisen asteen polynomifunktion kuvaajana. Toisen asteen epäyhtälö

Matematiikan peruskurssi 2

MATEMATIIKAN JA TILASTOTIETEEN LAITOS Analyysi I Harjoitus alkavalle viikolle Ratkaisuehdoituksia Rami Luisto Sivuja: 5

Johdatus f90/95 ohjelmointiin. H, R & R luvut 1-3

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö

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

PERUSASIOITA ALGEBRASTA

Casion fx-cg20 ylioppilaskirjoituksissa apuna

Transkriptio:

Yhtälön ratkaiseminen Suora iterointi Kirjoitetaan yhtälö muotoon x = f(x). Ensin päätellään jollakin tavoin jokin alkuarvo x 0 ja sijoitetaan yhtälön oikealle puolelle, jolloin saadaan tarkennettu ratkaisu x 1 = f(x 0 ). Jatketaan iterointia, kunnes ratkaisu ei enää muutu vaaditulla tarkkuudella: x 0 =... x 1 = f(x 0 ), x 2 = f(x 1 ),... x n+1 = f(x n ),...

Yhtälössä esiintyvistä tuntemattomista voidaan periaatteessa ratkaista mikä tahansa, joten yhtälö voidaan kirjoittaa vaaditussa muodossa useilla eri tavoilla. Esimerkiksi x 5 x 1 = 0 voidaan esittää muodossa x = x 5 1 tai x = (1 + x) 0.2. Edellinen tuottaa alkuarvolla 0.5 lukusarjan x 0 = 0.5, x 1 = 1.853215, x 2 = 22.85895, x 3 = 6241392, joten lasketut likiarvot eivät suppene. Jälkimmäinen muoto sen sijaan antaa sarjan x 0 = 0.5, x 1 = 1.158242, x 2 = 1.166326, x 3 = 1.167199, x 4 = 1.167293, x 5 = 1.167303, x 6 = 1.167304, x 7 = 1.167304 Yleisesti ottaen polynomimuotoisista yhtälöistä kannattaa ratkaista korkein potenssi. Muunlaisille yhtälöille ei voi antaa samanlaistya ohjetta; yksinkertaisinta on vain kokeilla, mikä valinta tuottaa suppenevan lukujonon.

Välinpuolitusmenetelmä Tarkastellaan edelleen yhtälöä f(x) = x 5 x 1 = 0. Koska f on jatkuva välillä 1 < x < 2 ja f(1) = 1 < 0 ja f(2) = 29 > 0, yhtälöllä on varmasti ainakin yksi ratkaisu tällä välillä. Puolitetaan tätä väliä, ja katsotaan kullakin askeleella, kummassa puoliskossa ratkaisun täytyy olla. f(1.5) = 5.09 > 0, joten polynomi vaihtaa merkkiä välillä 1 < x < 1.5. f(1.25) = 0.802 > 0, joten merkin täytyy vaihtua välillä 1 < x < 1.25. Koska f(1.125) = 0.323 < 0, ratkaisun täytyy olla välillä 1.125 < x < 1.25. f(a) a x b f(b) Välin puolittumisen vuoksi kullakin iteraatiokierroksella saadaan yksi bitti lisäinformaatiota. Yksi desimaaliluku vastaa suunnilleen kolmea bittiä, joten ratkaisun tarkentamiseen yhdellä merkitsevällä numerolla tarvitaan noin kolme iteraatiota. Menetelmä suppenee varmasti (edellyttäen tietenkin, että yhtälössä esiintyvä funktio on jatkuva aluksi valitulla välillä). Suppeneminen on kuitenkin melko hidasta.

program halve implicit none real x x = solve (1.0, 2.0) write(*,*) x, f(x) contains real function f(x) real, intent(in) :: x f = x**5 - x - 1 end function f real function solve (xmin, xmax) real, intent(in) :: xmin, xmax real :: x1, y1, &! valin alkupaa x2, y2, &! valin loppupaa x0, y0! keskikohta x1=xmin; y1=f(x1) x2=xmax; y2=f(x2) x0=(x1+x2)/2 ; y0=f(x0) do if (y1 * y0 < 0) then! ratkaisu valilla (x1,x0) x2=x0 y2=f(x2) else! ratkaisu valilla (x0,x2) x1=x0 y1=f(x1) end if x0=(x1+x2)/2 y0=f(x0) if (abs(y0) < 0.0001) then! tarkkuus saavutettu solve=x0 exit end if end do end function solve end program halve

Regula falsi Yhtälön f(x) = x 5 x 1 = 0 tapauksessa f(1) on itseisarvoltaan paljon pienempi kuin f(2). Tuntuu luonnolliselta, että ratkaisun on oltava lähempänä ykköstä kuin kakkosta. Jos väli on lyhyt, funktiota voidaan approksimoida suoralla. Jos välin päätepisteet ovat a ja b, suoran yhtälö on y = f(a) + f(b) f(a) (x a). b a Tämä leikkaa x-akselin pisteessä b a x = a f(a) f(b) f(a). Iterointia voidaan jatkaa valitsemalla uudeksi väliksi [a,x] tai [x,b] riippuen siitä, kummalla välillä funktio vaihtaa merkkiään. Iterointikaavan voi periaatteessa sieventää muotoon x = af(b) bf(a) f(b) f(a), jossa on yksi liukulukuoperaatio vähemmän. Nimittäjässä esiintyy kuitenkin lähes yhtäsuurten lukujen vähennyslasku, joten tätä muotoa ei pidä koskaan käyttää ohjelmissa.

Sekanttimenetelmä Edellisen menetelmän vikana on hitaanpuoleinen suppeneminen, kun on päästy lähelle juurta. Jos kaksi viimeksi löydettyä approksimaatiota ovat x n ja x n 1, niiden määrittämän suoran yhtälö on y = f(x n ) + f(x n 1) f(x n ) x n 1 x n (x x n ). Tästä ratkaistu uusi nollakohta on x n 1 x n x = x n+1 = x n f(x n ) f(x n 1 ) f(x n ). x n f(x n 1 ) f(x n ) x n 1 x n+1

Tämä menetelmä suppenee usein aikaisempia nopeammin. Yritetään ratkaista yhtälöä f(x) = 1 x 4 1 = 0. Koska f(1/2) > 0 ja f(2) < 0, ratkaisun täytyy olla välillä 1/2 < x < 2. Oletetaan, että tämän välin päätepisteet ovat kaksi ensimmäistä approksimaatiota. x 0 =0.5000, f(x 0 ) = 15, x 1 =2.0000, x 2 =1.9118, x 3 = 8.482. f(x 1 ) = 0.9375, f(x 2 ) = 0.9251, Peräkkäisten approksimaatioiden jono ei suppene ja sekanttimenetelmä ei siis löydä ratkaisua lainkaan. Välinpuolitus- ja regula falsi -menetelmä takaavat, että iteroidut arvot pysyvät koko ajan lyhenevällä välillä. Sekanttimenetelmässä mitään tällaista väliä ei ole, ja iteroitujen arvojen jono saattaa jopa ruveta hajaantumaan.

Newtonin menetelmä Edellä esiintyi kulmakerroin f(x n 1 ) f(x n ) x n 1 x n. Kun väli lyhenee, tämä kulmakerroin lähenee funktion derivaattaa. Arvioidaan tätä lauseketta derivaatan avulla, jolloin iteraatioaskel tulee muotoon x n+1 = x n f(x n) f (x n ). Tämä iteraatio, jossa käytetään myös funktion derivaatan arvoja, on Newtonin tai Newtonin ja Raphsonin menetelmä. Derivaatan on oltava laskettavissa. Käytännössä tämä tarkoittaa, että funktiolla on analyyttinen lauseke. Sekanttimenetelmän ongelma koskee myös Newtonin menetelmää. Jos funktion derivaatta on pieni, menetelmä ei enää suppene. Seuraava lause antaa ehdon menetelmän suppenemiselle: Olkoon f derivoituva välillä [a,b], f(a)f(b) < 0, f (x) 0 ja f (x) samanmerkkinen koko välillä. Newtonin menetelmä suppenee mielivaltaiselle alkuarvolle x 0 [a,b], jos f(a) f (a) < b a, ja f(b) f (b) < b a.

Polynomiyhtälön juuret Edellä esitetyt menetelmät löytävät yhtälön yhden yksittäisen ratkaisun. Usein se riittääkin, ja mahdolliset muut ratkaisut voidaan etsiä käyttämällä eri alkuarvoja. Erikoistapaus ovat muotoa P n (x) = 0 olevat yhtälöt, missä P n on n-asteinen polynomi. Algebran peruslauseen yhtälöllä on n ratkaisua, joista tosin jotkin voivat olla samoja. Tämän tyyppisille yhtälöille on myös menetelmiä, jotka löytävät automaattisesti kaikki juuret ilman, että sopivia alkuarvoja tarvitsee erikseen etsiä. Seuraavassa esitetään Q-D-menetelmänä (Quotient Difference eli osamäärä erotus-menetelmä) tunnettu keino polynomiyhtälön ratkaisujen etsimiseksi. Menetelmän johtaminen on kuitenkin sen verran mutkikas, ettemme puutu siihen. Olkoon meillä yhtälö P n (x) = a 0 + a 1 x + a 2 x 2 +... + a n x n = 0. Muodostetaan lukuja q i, i = 1,...n ja e i, i = 0,...,n seuraavasti. Lasketaan ensin alkuarvot q i = 0,i = 1,...,n 1 q n = a n 1 /a n, e 0 = 0, e i = a i 1 /a i,i = 1,...,n 1, e n = 0. Sitten päivitetään vuorotellen q- ja e-taulukoita: q i = e i 1 e i + q i,i = 1,...,n ( ) qi e i = e i,i = 0,...,n. q i+1 Kun e-arvot lähestyvät nollaa, q-arvot lähestyvät polynomin nollakohtia.

Tarkastellaan esimerkkinä polynomiyhtälöä x 3 6x 2 + 11x 6 = 0, jonka juuret ovat 1, 2 ja 3. program qd! etsitaan polynomiyhtalon kaikki juuret integer, parameter :: n=3 real, dimension (0:n) :: a = (/ -6, 11, -6, 1 /), & e = 0, q = 0 real, parameter :: limit = 1.0e-5 integer :: i, kierros=0 q(n) = -a(n-1)/a(n) do i=1,n-1 e(i) = a(i-1)/a(i) end do write (6, (8F8.4) ) e, q! iteroidaan, kunnes tulos ei muutu do do i=1,n q(i) = e(i-1)-e(i)+q(i) end do do i=0,n-1 e(i) = q(i)/q(i+1) * e(i) end do kierros = kierros+1 if (kierros > 100) then write(6, ("iterointi ei suppene") ) exit end if if (maxval(abs(e)) < limit) exit write (6, (8F8.4) ) e, q end do end program Alkioita e(0) ja e(3) ei oikeastaan tarvita, sillä ne ovat aina nollia. Jos ne jätettäisiin pois, tilaa säästyisi vain kaksi sanaa, mutta silmukassa jouduttaisiin käsittelemään ensimmäistä q-arvoa q(1) muista poikkeavalla tavalla, joten ohjelmasta tulisi mutkikkaampi. Tämä on yksinkertainen esimerkki tapauksesta, jossa tietorakenteen sopivalla valinnalla ohjelmasta saadaan yksinkertaisempi.

Esimerkkiohjelman tulostus: e(0) e(1) e(2) e(3) q(1) q(2) q(3) 0.0000-0.5455-1.8333 0.0000 0.0000 0.0000 6.0000 0.0000-0.2310-0.5667 0.0000 0.5455 1.2879 4.1667 0.0000-0.1105-0.2556 0.0000 0.7765 1.6235 3.6000 0.0000-0.0554-0.1351 0.0000 0.8870 1.7686 3.3444 0.0000-0.0283-0.0778 0.0000 0.9424 1.8483 3.2093 0.0000-0.0144-0.0472 0.0000 0.9706 1.8979 3.1315 0.0000-0.0074-0.0295 0.0000 0.9851 1.9306 3.0843 0.0000-0.0037-0.0189 0.0000 0.9924 1.9528 3.0548... 0.0000 0.0000 0.0000 0.0000 1.0000 1.9999 3.0001 0.0000 0.0000 0.0000 0.0000 1.0000 1.9999 3.0001 0.0000 0.0000 0.0000 0.0000 1.0000 1.9999 3.0001 0.0000 0.0000 0.0000 0.0000 1.0000 2.0000 3.0000 Kuten esimerkistä huomataan, suppeneminen voi olla varsin hidasta, joten menetelmää ei välttämättä kannata käyttää juurten tarkkojen arvojen laskemiseen. Kun juurille on löydetty selvästi toisistaan poikkeavat likiarvot, niitä voidaan tarkentaa jollakin muulla menetelmällä. Menetelmän alustus johtaa nollalla jakamiseen, jos jokin polynomin kertoimista on nolla. Tämä voidaan välttää muuttujan vaihdolla. Esimerkiksi yhtälöön x 3 x + 1 = 0 voidaan sijoittaa x = y + 1, jolloin saadaan yhtälö y 3 +3y2+2y +1 = 0. Lopulliset juuret saadaan lisäämällä ratkaisuihin ykkönen. Tässä esimerkissä esiintyy toinenkin ongelma: ratkaisu ei suppene. Menetelmä löytää yhden juuren, mutta kahden muun arvot heilahtelevat. Tämä tarkoittaa, että kaksi juurista on kompleksiarvoisia.

Yhtälöryhmät Yhtälöitä ja tuntemattomia voi olla useampia. Menetelmiin tämä ei aiheuta oleellisia muutoksia. Tuntematonta voidaan pitää vektorina x, jonka kaikille komponenteille valitaan ensin sopivat alkuarvot. Iteroimalla saadaan sitten ratkaisua tarkemmin kuvaava vektori. Usean muuttujan tapauksessa valittavaksi jää, millä tavoin ratkaisuvektoria päivitetään: 1) Lasketaan uuden ratkaisuvektorin kaikki komponentit käyttämällä pelkästään vanhan vektorin komponenttien arvoja. 2)Korvataan vektorin komponentit uusilla arvoilla sitä mukaa kuin niitä lasketaan.

Ratkaisun tarkkuus Tuntuu luonnolliselta vaatia, että jos x on yhtälön f(x) = 0 likimääräinen ratkaisu, täytyy olla f( x) < ǫ, missä ǫ on jokin ennalta asetettu tarkkuusvaatimus. Jos f ( x) on lähellä nollaa, f( x) voi olla pieni laajalla alueella todellisen ratkaisun ympäristössä. Ratkaisun tulisi olla sellainen, että myös x 0 x on pieni, missä x 0 on funktion todellinen nollakohta. Koska x 0 on tuntematon, tätä ei tietenkään pystytä laskemaan. Jos funktion derivaatta tunnetaan, tätä virhettä voidaan arvioida. x 0 x f (x ) x 0 x f (x )

Nollakohdan x 0 ympäristössä funktio on likimain josta Kun x = x, on f(x) f (x 0 )(x x 0 ), x x 0 x x 0 f(x) f (x 0 ). f( x) f (x 0 ). Jos funktion derivaatta ei muutu kovin rajusti nollakohdan ympäristössä, on likimain x x 0 f( x) f ( x). Ratkaisun likiarvo on siten lähellä todellista nollakohtaa, jos f( x) f ( x) < ǫ. Tämän lisäksi vaaditaan tietenkin, että myös itse funktion arvo f( x) on pieni.