Tietokoneen käytön ja ohjelmoinnin alkeet

Kurssin kotisivulle


Harjoitustyöt

Tehtävien kuvaukset saattavat olla hieman epämääräisiä. Esimerkiksi useimmissa ei mainita, millä tavoin syöttötiedot annetaan (komentorivillä vai tiedostossa, missä muodossa?). Tämä on kuitenkin päätettävä ennen ohjelman kirjoittamista. Mieti, mikä olisi ohjelman käyttäjän kannalta järkevä ja helppo tapa.

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:

  1. C-ohjelman listaus.
  2. Testiaineistot ja niistä saadut tulostukset.
  3. Työselostus, jossa kerrotaan, mitä ohjelma tekee ja miten sitä käytetään. Ellei ratkaisuemenetelmä ole täysin ilmeinen, se on kuvattava lyhyesti.

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.


1 Piin sarjakehitelmät

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.


2 Yhtälön ratkaisu iteroimalla

Jos yhtälö voidaan kirjoittaa muotoon x=f(x), sen ratkaisua voidaaan yrittää etsiä iteroimalla. Valitaan ensin jokin alkuarvo x0. Sitten ratkaisua tarkennetaan toistamalla iteraatioaskelta

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.


3 Kolmion ratkaisukaavat

Olkoot kolmion kulmat A, B ja C ja niiden vastaiset sivut a, b ja c. Kun näistä suureista kolme tunnetaan (ainakin yhden on oltava sivu), muut voidaan laskea. Tee ohjelma, joka laskee puuttuvat suureet ja kolmion pinta-alan (sen saa helpoimmin Heronin kaavasta).


4 Integrointi

Integraalin likiarvo voidaan laskea summana

\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.


5 Tilastolliset tunnusluvut

Tiedostossa on lukupareja xi, yi. Tee ohjelma, joka laskee erikseen x- ja y-arvojen keskiarvon, varianssin ja mediaanin (keskimmäisen arvon) sekä x:n ja y:n välisen Pearsonin korrelaatiokertoimen, joka on

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.


6 Legendren polynomit

Ensimmäiset Legendren polynomit ovat

  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.


7 T\v seby\v sevin polynomit

Tsebysevin polynomi Tn määritellään kaavalla

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.


8 Vektorien tulot

Tee funktiot, joilla lasketaan vektorien skalaari- ja vektorituloja sekä skalaari- ja vektorikolmituloja (3-ulotteisessa avaruudessa). Tee myös ohjelma, jolla testaat näitä funktioita.


9 Välimatkat

Tee ohjelma, jonka avulla voidaan laskea kahden maapallon pinnalla olevan pisteen välimatka isoympyrää pitkin (helpoimmin tämä käy vektorien avulla, mutta onnistuu myös pallotrigonometrialla). Lähtötietoina annetaan paikkakuntien pituus- ja leveysasteet. Maan voit olettaa pallomaiseksi.


10 Laatumuunnokset

Tee ohjelma, jonka avulla annetuissa yksiköissä ilmoitettuja suureita muunnetaan muihin yksiköihin. Ohjelman kutsu voisi olla esimerkiksi muunna 1.2 in, jolloin ohjelma kertoo, kuinka paljon 1.2 tuumaa on muiden pituusyksiköiden avulla lausutta. Ohjelman tulee tuntea ainakin pituuden, massan, tilavuuden ja lämpötilan SI-yksiköt ja tavallisimmat englantilaiset/amerikkalaiset yksiköt.


11 Kirjainten frekvenssit

Tee ohjelma, joka lukee tekstinäytteen ja laskee siitä eri kirjainten frekvenssit fi. Muista merkeistä kuin kirjaimista ei tarvitse välittää (skandikirjainten oletetaan olevan ISOLatin1-standardin mukaisia). Isot ja pienet kirjaimet tulkitaan samoiksi. Kirjaimet ja niiden suhteelliset frekvenssit (osuudet kirjaimista välillä 0-1 olevana lukuna) tulostetaan alenevan frekvenssin mukaisessa järjestyksessä.

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.