Rästitehtävä 2

Numeerinen integrointi (350 p)

Pakollisen kierroksen korvaaminen

Tällä rästitehtävällä voit korvata yhden kierroksista 4, 5 tai 6. Jos sinulta puuttuu minimipisteet kahdelta näistä kierroksista, sinun pitää tehdä sekä tämä tehtävä että rästitehtävä 1 tai 3. Jos sinulta puuttuu minimipisteet kaikilta näiltä kierroksilta, tee rästitehtävät 1, 2 ja 3. Jotta rästitehtävä korvaisi tehtäväkierroksen, siitä on saatava vähintään 300 pistettä. Vaikka saisit tehtävästä enemmän pisteitä, niin harjoitustehtäväarvosanaa määrättäessä tällä tehtävällä korvatun kierroksen pistemääräksi lasketaan kuitenkin vain korvattavan kierroksen minimipistemäärä.

Alkuvalmistelut

Tee Eclipseen uusi projekti, jonka nimi on tehtava10_2. Luo sitten tähän projektiin moduuli integrointi.

Tehtävän kuvaus

Kirjoita moduuliin integrointi ohjelma, joka laskee käyttäjän antaman polynomin määrätyn integraalin käyttäjän antamalta väliltä kolmella eri tavalla:

Tarkempi selostus eri integrointimenetelmistä, ohjelman rakenteesta ja ohjelman kulusta on annettu alempana.

Taustaa: integrointi

Polynomin ingeraalifunktion laskemisella tarkoitetaan tässä sitä, kuinka lukiomatematiikassa laskettiin polynomien integraaleja. Esimerkiksi polynomin f(x) = 2x + 5 integraalifunktio on F(x) = x**2 + 5x + C, missä C on integrointivakio. Määrättyä integraalia laskettaessa lasketaan integraalifunktion arvo integrointivälin loppupisteessä ja vähennetään siitä integraalifunktion arvo integrointivälin alkupisteessä. Vähennyslaskussa integrointivakiot kumoavat toisensa, joten niistä ei tarvitse välittää.

Puolisuunnikasmenetelmässä integrointiväli jaetaan samankokoisiin osaväleihin (osien ei tarvitse välttämättä olla samankokoiset, mutta tässä tehtävässä käytetään samankokoisia osia). Menetelmässä lasketaan alkuperäisen funktion f arvo osavälin päätepisteissä xi ja xj. Niiden avulla lasketaan sellaisen puolisuunnikkaan pinta-ala, jota rajoittavat pisteet (xi, 0), (xj, 0), (xi f(xi)) ja (xj, f(xj)). Tällaisten puolisuunnikkaiden pinta-alat lasketaan yhteen koko integrointiväliltä. Näin likiarvo funktion f määrätylle integraalille välillä a:sta b:hen voidaan laskea lausekkeesta 1/2 * h * (f(a) + 2f(x1) + 2f(x2) + ... + 2f(xn-1) + f(b)), missä h on osavälin pituus ja x1, x2, ..., xn-1 ovat osavälien päätepisteitä (a ja b eivät ole niiden joukossa). Lisätietoja menetelmästä voit lukea esimerkiksi sivulta http://fi.wikipedia.org/wiki/Puolisuunnikassääntö

Simpsonin menetelmässä integrointiväli jaetaan samankokoisiin osaväleihin, joita on parillinen määrä. Menetelmässä integroitavaa funktiota approksimoidaan paloittain aina kahdella peräkkäisellä osavälillä sellaisella toisen asteen polynomilla, jolla on alkuperäisen funktion kanssa samat arvot osavälien päätepisteissä. Tämä toisen asteen polynomi integroidaan näillä osaväleillä perinteisellä menetelmällä. Näin saadaan likiarvo alkuperäisen funktion integraaliksi näillä osaväleillä. Eri osaväleille saadut likiarvot lasketaan yhteen, jolloin saadaan likiarvo alkuperäisen funktion integraaliksi koko integrointivälillä. Menelmässä likiarvo funktion f määrätylle integraalille välillä a:sta b:hen voidaan laskea lausekkeesta 1/3 * h * (f(a) + 4f(x1) + 2f(x2) + 4(fx3) + 2f(x4) ... + 2f(xn-2) + 4f(xn-1) + f(b)), missä h on osavälin pituus ja x1, x2, ..., xn-1 ovat osavälien päätepisteitä (a ja b eivät ole niiden joukossa). Lisätietoja menetelmästä voit lukea esimerkiksi sivulta http://fi.wikipedia.org/wiki/Simpsonin_sääntö (katso kohta Yleistetty Simpsonin sääntö).

Käytetyt tietorakenteet

Polynomi tallennetaan listaan siten, että polynomin nollannen asteen termin kerroin on listassa indeksillä 0, ensimmäisen asteen kerroin listassa indeksillä 1 jne. Listan pituus on yhtä suurempi kuin polynomin asteluku. Esimerkiksi polynomi 4.0x**4 - 12.5x**3 + 25.0x**2 + 24.2x**1 - 16.3 olisi tallennettu listaksi [-16.3, 24.2, 25.0, -12.2, 4.0] ja polynomi 25.0x**2 - 16.2 listaksi [-16.2, 0.0, 25.0]. Polynomin termien kertoimet ovat siis desimaalilukuja.

Ohjelman rakenne

Kirjoita ohjelmaasi seuraavat funktiot.

Kirjoita lisäksi pääohjelma, joka kutsuu funktioita sopivassa järjestyksessä ja tulostaa niiden laskemia arvoja niin, että ohjelman kulku on seuraavan kappaleen mukainen.

Ohjelman kulku

Ohjelma pyytää aluksi polynomin termin kertoimet. Sen jälkeen se pyytää käyttäjältä integrointivälin alkupisteen, loppupisteen ja osavälien lukumäärän. Tämän jälkeen ohjelma laskee integraalin analyyttisesti, numeerisesti puolisuunnikasmenetelmällä ja numeerisesti Simpsonin menetelmällä. Ohjelma tulostaa lasketut arvot.

Tulostuksen muotoilu

Tulosta laskettujen integraalien arvot kolmen desimaalin tarkkuudella.

Virhetilanteiden käsittely

Jos käyttäjä antaa aluksi polynomien kertoimia pyydettäessä tyhjän rivin, ohjelma tulostaa vain "Polynomin tiedot puuttuvat." ja lopettaa toimintansa.

Jos käyttäjä ei anna integrointivälin loppupisteeksi alkupistettä suurempaa arvoa, ohjelma pyytää uutta arvoa niin kauan, että käyttäjä antaa tarpeeksi suuren arvon.

Jos käyttäjän antama osavälien lukumäärä ei ole parillinen tai se on pienempi kuin 2, ohjelma pyytää uutta lukumäärää niin kauan, että käyttäjä antaa sallitun arvon.

Muilta osin voit olettaa, että käyttäjän antama syöte on virheetöntä.

Ohjelman palautus

Palauta Gobliniin tiedosto integrointi.py.

Esimerkkejä ohjelman suorituksesta:

[ohjelman suoritus alkaa]
Anna polynomin termien kertoimet valilyonnilla erotettuna
jarjestyksessa niin, etta suurin asteluku on ensin.
3.0 5.0 7.0 3.0 9.0 5.0 -2.5
Anna integrointivalin alkupiste.
-4.0
Anna integrointivalin loppupiste.
8.0
Kuinka moneen osaan vali jaetaan?
12
Polynomin integroimisella arvo on 1172847.943.
Arvo puolisuunnikasmenetelmalla on 1232624.000.
Arvo Simpsonin menetelmalla on 1174074.000.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Anna polynomin termien kertoimet valilyonnilla erotettuna
jarjestyksessa niin, etta suurin asteluku on ensin.
4.0 2.0 1.0
Anna integrointivalin alkupiste.
1.0
Anna integrointivalin loppupiste.
-1.0
Loppupisteen pitaa olla suurempi kuin alkupisteen.
Anna integrointivalin loppupiste.
1.0
Loppupisteen pitaa olla suurempi kuin alkupisteen.
Anna integrointivalin loppupiste.
5.0
Kuinka moneen osaan vali jaetaan?
0
Osia pitaa olla parillinen maara ja vahintaan 2!
Kuinka moneen osaan vali jaetaan?
1
Osia pitaa olla parillinen maara ja vahintaan 2!
Kuinka moneen osaan vali jaetaan?
8
Polynomin integroimisella arvo on 193.333.
Arvo puolisuunnikasmenetelmalla on 194.000.
Arvo Simpsonin menetelmalla on 193.333.
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Anna polynomin termien kertoimet valilyonnilla erotettuna
jarjestyksessa niin, etta suurin asteluku on ensin.

Polynomin tiedot puuttuvat.
[ohjelman suoritus päättyy]

Värikoodit:
Sininen: Syöte käyttäjältä
Vihreä: Ohjelman tuloste
Punainen: Erityishuomatus: ei tulosteta