Ohjelma on pyrittävä jäsentelemään funktioiden avulla pienempiin palasiin, joista kukin suorittaa yhden loogisesti yhteenkuuluvan kokonaisuuden. Vaikka näiden harjoitustöiden ratkaisut ovatkin yleensä melko lyhyitä, niissäkin kannattaa harjoitella tällaista jäsentelyä.
Ohjelman täytyy kääntyä ja toimia oikein. Ohjelma on testattava useilla eri aineistoilla. Mukana tulisi olla muutama triviaali tapaus, jossa ratkaisun oikeellisuus on helppo tarkistaa käsin. Mahdolliset erokoistapaukset on syytä tutkia.
Hyväksyttävän harjoitustyön täytyy sisältää ainakin seuraavat osat:
Ohjelma ja muut sen suorittamiseen tarvittavat tiedostot toimitetaan sähköpostilla. Paperiversio on suotava vaikkakaan ei aivan välttämätön. Sen voi toimittaa vaikka yliopiston sisäisessä postissa Tuorlan obsevatorioon tai jonkin sielläpäin liikkuvan agentin mukana. Sen voi myös jättää fysiikan laitoksella olevaan tähtitieteen toimistoon, mikäli se joskus sattuu olemaan auki.
Aikaa on joulukuun puoliväliin. Myöhemminkin jätetyt hyväksytään, mutta ilmoita, milloin työ olisi suunnilleen odotettavissa. Yritän tarkastaa määräaikaan mennessä tulleet työt niin, että suoritusmerkinnän kurssista saa tämän vuoden puolelle.
Seuraavassa on joitakin mahdollisia aiheita. Paperiversioita on kurssin lokerossa fysiikan laitoksella. Yritän keksiä lisää, mutta voit ehdottaa myös omaa aihetta, jos mielessäsi on vaikkapa jokin ohjelma, josta voisi olla hyötyä omien opintojesi kannalta.
Vakion pi likiarvo voidaan laskea monenlaisista sarjakehitelmistä. Seuraavassa on muutama esimerkki:
pi/4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 - ... pi/4 = (2/3) * (4/3) * (4/5) * (6/5) * (6/7) ... 2/pi = \sqrt{1/2} * \sqrt{1/2 + (1/2)\sqrt{1/2}} * \sqrt{1/2 + (1/2)\sqrt{1/2 + (1/2)\sqrt{1/2}} * ...
Laske likiarvoja näillä eri menetelmillä, ja tutki miten monta termiä (tai tekijää) eri sarjoista tarvitaan samaan tarkkuuteen pääsemiseksi.
xn+1 = f(xn),
kunnes ratkaisut eivät enää muutu vaadittua tarkkuutta enempää. Kokeile menetelmää eri funktioilla. Yritä jollakin tavoin havaita, mikäli ratkaisut rupeavat hajaantumaan. Esimerkiksi polynomin tapauksessa yhtälön vasemmalle puolelle kannattaa ratkaista korkein potenssi; yhtälö x4-x+1=0 kirjoitetaan siis muotoon x=(x-1)1/4.
\int ab f(x) dx = h (f(a) + f(a+h) + f(a+2h) + ... + f(b)),
missä h on askelpituus. Tee funktio, joka laskee integraalin tällä tavoin. Testaa sitä erilaisilla funktioilla f. Kokeile ainakin muutamaa funktiota, jonka integraali on laskettavissa analyyttisesti ja tutki, miten tuloksen tarkkuus muuttuu askelpituuden mukana.
r= [ summa i=1n (xi-mx) (yi-my) ] / sqrt[ summa (xi-mx)2 * summa (yi-my) ]
missä mx ja my ovat x- ja y-arvojen keskiarvot.
P0(x) = 1, P1(x) = x, P2(x) = (1/2) (3x2 - 1), P3(x) = (1/2) (5x3-3x).
Yleisesti pätee
(2n+1) Pn(x) = (n+1)Pn+1(x) + n Pn-1(x),
mistä saadaan palautuskaava, jonka avulla kukin polynomi voidaan laskea kahden alemman asteisen polynomin avulla.
Tee funktio, joka laskee annetun asteisen polynomin arvon annetussa pisteessä, sekä ohjelma, jolla testaat funktiota. Pn(1)=1 kaikilla n. Palautuskaavan käyttö saattaa kuitenkin aiheuttaa virhettä suurilla n:n arvoilla. Tutki, tapahtuuko näin tässä tapauksessa.
Tn(x) = cos n \phi= cos(n arccos x).
Oletetaan, että x on aina välillä [-1, +1].
Ensimmäiset näistä ovat
T0(x) = cos 0 = 1, T1(x) = cos arccos x = x, T2(x) = 2x2 - 1, T3(x) = 4x3 - 3x, T4(x) = 8x4 - 8x2 + 1.
Yleisesti pätee palautuskaava
Tn+1(x) = 2x Tn(x) - Tn-1(x).
Tee funktio, joka laskee annetun asteisen polynomin arvon annetussa pisteessä, sekä ohjelma, jolla testaat funktiota.
Tn(1)=1 kaikilla n. Palautuskaavan käyttö saattaa kuitenkin aiheuttaa virhettä suurilla n:n arvoilla. Tutki, tapahtuuko näin tässä tapauksessa.
Ohjelmalla voidaan myös lukea toinen näyte ja laskea siitä vastaavat frekvenssit oi ja näiden avulla testisuure
chi2 = sumi [ (oi - fi)2 / fi ].
Tämän suureen avulla voidaan tutkia (mutta ei tarvitse tehdä tässä), ovatko näytteiden kirjainten jakaumat samanlaisia.