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ä.
Tee Eclipseen uusi projekti, jonka nimi on tehtava10_2. Luo sitten tähän projektiin moduuli integrointi.
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:
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ö).
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.
Kirjoita ohjelmaasi seuraavat funktiot.
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.
Tulosta laskettujen integraalien arvot kolmen desimaalin tarkkuudella.
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ä.
Palauta Gobliniin tiedosto integrointi.py.
[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