Ohjelmointi ja numeeriset menetelmät, harjoitustyöt

Tässä voit tutustua harjoitustöiden aiheisiin. Ilmoita valitsemasi työ, niin saat paperilla sekä ohjeet että siistimmän version työn kuvauksesta. Myös omia aiheita saa mielihyvin ehdottaa. Lisäohjeita harjoitustöistä

Työn sisältö

Hyväksyttävä harjoitustyö sisältää ainakin seuraavat osat:
  1. Lähdekielinen ohjelma sekä listauksena paperilla että tiedostona (levykkeellä tai sähköpostina)
  2. Työselostus paperilla
  3. Testiajojen tulokset paperilla

Ohjelma:

F90-ohjelman tulee olla täydellinen ja toimiva. Jos kyseessä on aliohjelmia sisältävä moduuli, mukana on oltava myös sitä testaava pääohjelma.

Arvosteluun vaikuttavat mm. ratkaisun selkeys ja tehtävän jäsentely sopiviin aliohjelmiin, havainnollisuus (muuttujien nimet, kommentit jne.), yleisyys, tulostuksen luettavuus ja helppokäyttöisyys.

Muualta kopioidut/sovelletut koodin osat täytyy ilmaista selvästi sekä itse ohjelmassa että sanallisesti työselostuksessa.

Työselostus:

Selostuksessa kuvataan ainakin seuraavat asiat:

Testaus:

Testaa ohjelmaa useilla eri syöttöaineistoilla. Muutaman pitää olla sellainen, että tuloksen oikeellisuus voidaan tarkistaa käsin. Mukana olisi hyvä olla myös jokin isompi aineisto sekä virheellisiä aineistoja, jotta nähdään, miten ohjelma selviää virhetilanteista.

Jos kyseessä on esim. integrointirutiini, jolle parametrina annetaan jokin käyttäjän funktio, testaa sitä useilla eri funktioilla. Taaskin muutama tapaus pitää olla laskettavissa analyyttisesti, jotta tulos voidaan tarkistaa, mutta kokeile myös hankalampia tapauksia.


Töiden palautus ja neuvonta

Selostuksen voi lähettää postitse (suositeltava tapa) osoitteella:

Hannu Karttunen, Tuorlan Observatorio, Väisäläntie 20, 21500 Piikkiö.

Jos lähetät työn sähköpostilla, helpointa olisi koota kaikki asiaan kuuluvat tiedostot yhteen hakemistoon, paketoida hakemisto tar-tiedostoksi ja toimittaa liitetiedostona.

Sähköpostitse neuvoja voi kysyä milloin tahansa. Henk. koht. neuvoja voi kysellä luentojen yhteydessä. Käyn kurssin jälkeenkin aika usein Helsingissä, joten voidaan tavata tarvittaessa Observatoriolla tai kampuksella.

Työ on palautettava viimeistään syyskuun loppuun mennessä. Jos tarvitset jatkoaikaa, sovi asiasta hyvissä ajoin.

Seuraava kappale koskee lähinnä Turussa pidettävää kurssia, mutta voivat hesalaisetkin tulla tutustumaan laitokseen: Tuorlassa voi myös käydä henk.koht. Noin 12 km Turun keskustasta vanhaa Helsingin tietä 110; heti Kaarinan ja Piikkiön rajan jälkeen oikealle lähtee tie Tuorlan maatalousoppilaitokseen ja Tuorlan observatorioon. Heti risteyksen jälkeen on myös bussipysäkki. Lyhyen puistokujan jälkeen käänny vasemmalle ja jatka suoraan tietä pitkin ja ylös mäkeä, kunnes vastaan tulee tähtitorneja ja niiden jälkeen laitoksen päärakennus. Helsingistä tultaessa kannattaa ajaa moottoritietä Raadelman liittymään, josta käännytään vasemmalle moottoritien yli ja aivan pian tullaan vanhalle Helsinki-Turku-tielle 110, jota jatketaan oikealle kohti Turkua lyhyen matkaa (vajaa km?) ja sitten käännytään vasemmalle koivukujalle Tuorlaan.


Tehtävät

Seuraavassa on muutamia ehdotuksia, joista voit paremman puuttuessa valita sopivan. Joissakin toteutetaan menetelmiä, joita ei ole käsitelty luennoilla tai jotka vaativat lisätietoja. Toimitan tarvittavan lisämateriaalin asianomaisille tehtävän valinnan jälkeen. Voit vapaasti ehdottaa myös omia aiheita. Ohjelman laajuuden tulisi olla (ainakin) muutamia satoja rivejä.

Työt voi tehdä 2 hengen ryhmissä, jolloin molemille työntekijöille annetaan sama arvosana. Työt pyritään jakamaan siten että samaa työtä ei anneta kovin monelle ryhmälle.

Alkuun

Lineaarialgebra

Laadi moduuli, joka sisältää ainakin seuraavat lineaarialgebran perusrutiinit: Pyri varautumaan mahdollisimman moniin virhetilanteisiin, joista on myös välitettävä tieto kutsuvalle ohjelmalle.

Yhtälöiden tiedot luetaan tiedostosta, mutta ohjelma voi myös tuottaa satunnaisia kertoimia testausta varten.

Tutki, miten suoritusaika riippuu yhtälöiden määrästä (oltava aika iso, jotta tämä tulee selvästi esille),

Takaisin tehtävähakemistoon

Alkuun


Pienimmän neliösumman sovitus

Tee moduuli, jonka avulla annettuun aineistoon voi sovittaa erilaisia funktioita:

Kertoimien lisäksi aliohjelmien on palautettava myös niiden virheet sekä yhden pisteen keskimääräinen residuaali ja suurin poikkeama sovitetusta funktiosta.

Pyri varautumaan mahdollisimman moniin virhetilanteisiin, joista on myös välitettävä tieto kutsuvalle ohjelmalle.

Pyri varautumaan mahdollisimman moniin virhetilanteisiin, joista on myös välitettävä tieto kutsuvalle ohjelmalle.

Takaisin tehtävähakemistoon

Alkuun


Spline-sovitus

Tee moduuli, jonka avulla annettu aineisto (1- tai 2-ulotteinen) voidaan esittää spline-funktioiden avulla ja laskea sovitetun funktion arvot mielivaltaisessa pistejoukossa. Käyttäjä voi valita, miten toinen derivaatta käyttäytyy päätepisteissä (nolla tai sama kuin seuraavaksi sisemmissä pisteissä). Käytä sovitukseen menetelmää, jossa muuttujina ovat toiset derivaatat. Ratkaistavan yhtälöryhmän kerroinmatriisista talletetaan vain nollasta poikkeavat vinorivit.

Käytä tulosten esittämiseen jotakin piirto-ohjelmaa tai grafiikkakirjastoa.


Integrointi

Tee moduuli, joka sisältää ainakin seuraavat rutiinit: Pyri varautumaan mahdollisimman moniin virhetilanteisiin, joista on myös välitettävä tieto kutsuvalle ohjelmalle.

Takaisin tehtävähakemistoon

Alkuun


Differentiaaliyhtälöt 1

Tee moduuli, jonka aliohjelmien avulla voidaan ratkaista tavallisten differentiaaliyhtälöiden alkuarvotehtäviä. Toteuta ainakin seuraavat menetelmät: Testaa pakkausta useilla erilaisilla yhtälöillä. Tutki menetelmien tarkkuutta ja sen riippuvuutta askelpituudesta ja koko ratkaisuvälin pituudesta.

Moniaskelmenetelmien tarvitsemat alkuarvot lasketaan ensin yksiaskelmenetelmällä.

Sovella menetelmiä esimerkiksi lineaarisen harmonisen oskillaattorin yhtälöön ja vertaa tuloksia tarkkaan ratkaisuun.

Takaisin tehtävähakemistoon

Alkuun


Differentiaaliyhtälöt 2

Tee moduuli, jonka aliohjelmien avulla voidaan ratkaista tavallisten differentiaaliyhtälöiden alkuarvotehtäviä. Toteuta ainakin seuraavat menetelmät: Testaa pakkausta useilla erilaisilla yhtälöillä. Tutki menetelmien tarkkuutta ja sen riippuvuutta menetelmän kertaluvusta, askelpituudesta ja koko ratkaisuvälin pituudesta.

Moniaskelmenetelmien tarvitsemat alkuarvot lasketaan ensin yksiaskelmenetelmällä.

Sovella menetelmiä esimerkiksi lineaarisen harmonisen oskillaattorin yhtälöön ja vertaa tuloksia tarkkaan ratkaisuun.

Takaisin tehtävähakemistoon

Alkuun


Erikoisfunktiot 1

Tee moduuli, joka sisältää rutiinit ainakin seuraavien erikoisfunktioiden laskemiseksi: Pyri varautumaan mahdollisimman moniin virhetilanteisiin, joista on myös välitettävä tieto kutsuvalle ohjelmalle.

Testaa funktioita riittävän monilla eri arvoilla. Tutki tuloksen tarkkuutta ja riippuvuutta paramatreista ja selvitä, millä välillä funktiot ovat käyttökelpoisia.

Ensimmäiset Legendren polynomit ovat

P0(x) = 1,
P1(x) = x,
P2(x) = (1/2) (3x2-1),
P3(x) = (1/2) (5x2-3x),
P4(x) = (1/8) (35x4-30x2+3).

Legendren polynomien arvot voidaan laskea palautuskaavoista

P0(x) = 1,
P1(x) = x,
(2n+1)xPn(x) = (n+1)Pn+1(x) + nPn-1(x).

Gaussin kvadratuurissa tarvittavat pisteet ovat juuri Legendren polynomien nollakohtia.

Lisätietoja erikoisfunktioista on runsaasti mm. teoksissa
Arfken: Mathematical methods for physicists, Academic Press,
Abramowitz, Stegun: Handbook of mathematical functions, Dover.

Takaisin tehtävähakemistoon

Alkuun


Erikoisfunktiot 2

Tee moduuli, joka sisältää rutiinit ainakin seuraavien erikoisfunktioiden laskemiseksi: Pyri varautumaan mahdollisimman moniin virhetilanteisiin, joista on myös välitettävä tieto kutsuvalle ohjelmalle.

Testaa funktioita riittävän monilla eri arvoilla. Tutki tuloksen tarkkuutta ja riippuvuutta paramatreista ja selvitä, millä välillä funktiot ovat käyttökelpoisia.

Ensimmäisen lajin elliptinen integraali voidaan määritellä kaavalla

F(x | m) = \int0x [(1-t2) (1-mt2)]-1/2 d t, 0 <= m < 1,

ja toisen lajin elliptinen integraali kaavalla

E(x | m) = \int0x [ (1-mt2) / (1-t2) ]1/2 d t, 0 <= m <= 1.

Besselin funktio Jk(x) on

Jk(x) = (1 / 2\pi) \int02\pi cos(kt - x sin t) d t.

Besselin funktiot voidaan laskea myös sarjakehitelmistä

J0(x) = 1-(x/2)2 + (1/4) (x/2)4 - ... + [(-1)n / n!]2 (x/2)2n + ...

Jk(x) = (x/2)k (1/k !) [ 1 - (1 / k+1) ((x/2)2 + ... +
((-1)n / n !) (k+1)(k+2) ... (k+n) (x/2)2n + ... ].

Ensimmäisten Besselin funktioiden likimääräiset lausekkeet ovat

J0(x) = 1 - x2/4 + x4/64 + O(x6),
J1(x) = x/2 - x3/16 + O(x5),
J2(x) = x2/8 - x4/96 + O(x6),
J3(x) = x3/48 + O(x5),
J4(x) = x4/384 + O(x6).

Lisätietoja erikoisfunktioista on runsaasti mm. teoksissa
Arfken: Mathematical methods for physicists, Academic Press,
Abramowitz, Stegun: Handbook of mathematical functions, Dover.

Takaisin tehtävähakemistoon

Alkuun


Erikoisfunktiot 3

Tee moduuli, joka sisältää rutiinit ainakin seuraavien erikoisfunktioiden laskemiseksi: Pyri varautumaan mahdollisimman moniin virhetilanteisiin, joista on myös välitettävä tieto kutsuvalle ohjelmalle.

Testaa funktioita riittävän monilla eri arvoilla. Tutki tuloksen tarkkuutta ja riippuvuutta paramatreista ja selvitä, millä välillä funktiot ovat käyttökelpoisia.

Tshebyshevin polynomi Tn määritellään kaavalla

Tn(x) = cos n \phi = cos(n arccos x).

T0(x) = cos 0 = 1,
T1(x) = cos arccos x = x,
T2(x) = cos (2 arccos x) = cos 2\phi
= 2 cos2 \phi - 1
= 2 x2 - 1,
T3(x) = 4x3 - 3x,
T4(x) = 8x4 - 8x2 + 1
T5(x) = 16x5 - 20x3 + 5x.

Koska funktion cos \phi nollakohdat ovat \phi=(2k+1)\pi/2, k=0,1,..., funktion cos n\phi nollakohdat ovat

\phi = ((2k + 1) / n) (\pi / 2), k=0, 1, ...

Koska Tn(x)=cos n phi, nämä ovat samalla polynomin Tn nollakohtia. Muuttujan x avulla lausuttuina nollakohdat ovat

xk = cos [ ((2kk+1)/n) (\pi/2)], k=0, 1, ... , n-1.

Lisätietoja erikoisfunktioista on runsaasti mm. teoksissa
Arfken: Mathematical methods for physicists, Academic Press,
Abramowitz, Stegun: Handbook of mathematical functions, Dover.

Takaisin tehtävähakemistoon

Alkuun


Optimointi

Toteuta n-ulotteinen paikallinen optimointi. Funktion osittaisderivaattoja ei tarvitse tuntea. Ohjelmassa edetään vuorotellen kunkin koordinaattiakselin suuntaan käyttämällä tavallista viivahakua (haarukointia). Parametrien sallittuja arvoja voidaan haluttaessa rajoittaa sakkofunktiolla antamalla funktiolle hyvin suuria arvoja sallitun alueen ulkopuolella.

Takaisin tehtävähakemistoon

Alkuun


Aikasarjat

Toteuta epätasavälisen aineiston aikasarja-analyysi, jossa on seuraavat vaiheet: Aineisto luetaan tiedostosta. Tee myös ohjelma, jolla voidaan tuottaa testiaineisto. Testiaineistossa on annettu määrä pisteitä niin, että x-koordinaatti on satunnainen ja y-koordinaatti on sin x, johon on lisätty haluttu määrä satunnaista kohinaa.

Autokorrelaatiofuntkio

Nykyisen havainnon ja k aika-askelta myöhemmän havainnon välistä riippuvuutta kuvaa autokorrelaatio

R(k) = (1 / (N-k-1)) \sumi=1N-k fi fi+k,

missä N on havaintojen määrä. Kun tämä lasketaan viiveen k eri arvoilla, k=1, ..., N-2, saadaan autokorrelaatiofunktio.

Etsityn jakson monikerrat näkyvät aina autokorrelaatiofunktiossa.

Jos havainnot ovat puhdasta valkoista kohinaa, peräkkäiset arvot eivät ole lainkaan korreloituneita. Jos aineistossa esiintyy ajan suhteen jatkuvaa vaihtelua, peräkkäiset arvot ovat lähellä toisiaan, ja voimakkain korrelaatio vallitsee peräkkäisten pisteiden (k=1) välillä. Pieniä k:n arvoja vastaavat suuret korrelaatiot eivät kuitenkaan johdu mistään jaksollisuudesta. Vasta seuraava paikallinen maksimi on osoitus ilmiön jaksollisuudesta.

Rakennefuntkio

Tutkitaan erotusta x(t+\tau)-x(t). Ensimmäisen asteen rakennefunktio (structure function) on

D(\tau) = (1/N) \sum [ x(t+\tau) - x(t]2.

Rakennefunktio on määritelty aikasarjalle myös, jos keskiarvo ja varianssi eivät ole määriteltyjä. Rakennefunktioita voidaan siis soveltaa useampaan aikasarjaan kuin autokorrelaatiofunktioita.

Takaisin tehtävähakemistoon

Alkuun


Todennäköisyysjakaumat

Tee aliohjelmat, joilla voi laskea eri jakaumien tiheys- ja kertymäfunktioita sekä ratkaista kriittisiä arvoja xc, siis pisteitä, joissa kertymäfunktiolla on tietty arvo P(xc)=c.

Toteuta seuraavat jakaumat:

Normaalijakauman tiheysfunktio on

f(x) = 1 / (\sqrt(2\pi)\sigma) exp( -(x-\mu)2 / \sigma2),

missä \mu on odotusarvo ja \sigma2 varianssi.

Normaalijakauman kertymäfunktio

P(x) = (1 / \sqrt(2\pi)) \int-\inftyx exp( - t2 / 2) d t

ei ole laskettavissa analyyttisesti. Sille on kuitenkin johdettu erilaisia approksimaatioita. (0, 1)-normaalijakauman kertymäfunktio on likimain

P(x) = 1 - exp( -x2/2 / \sqrt(2\pi)) (0.4361836t-0.1201676t2+0.9372980t3),

missä t=1/(1+0.33267x).
(Abramowitz, Stegun: Handbook of mathematical functions, Dover)

Takaisin tehtävähakemistoon

Alkuun


Kaaos

Lorenzin yhtälöt ovat klassisia kaaosyhtälöitä. Ne kuvaavat yksinkertaistetusti ilmakehän konvektiota. Alkuperäiset Lorenzin yhtälöt ovat:

d x/d t = a(y-x)
d y/d t = -xz+bz-y
d z/d t = xy-cz,

missä a=10, b=28 ja c=8/3.

Valitse jokin sopiva alkupiste. Piirrä x (tai y) ajan funktiona. Piirrä samaan kuvaan useita kuvaajia muuttamalla x:n (tai y:n) arvoa vähän. Käytä sopivaa värikoodausta. Mitä havaitset?

Piirrä sitten kuvaaja, josta ilmenee esim. y:n käyttäytyminen x:n fuktiona. Tarkastele miten tämä kuvaaja muuttuu muuttaessasi vakioiden a, b ja c arvoja.

Takaisin tehtävähakemistoon

Alkuun


Nousu- ja laskuajat

Laske vuotuinen nousu- ja laskuaikaa kuvaava käyrä annetulle pituuspiirille ja leveysasteelle. Taivaankappale voi olla Tarvittavat kaavat löytyvät kirjasta Tähtitieteen perusteet. Autan tarvittaessa kaavojen löytämisessä. Piirrä kyseinen käyrä esim. päiväntasaajalla sijaitsevalle paikalle, Helsingille, Oululle ja Utsjoelle. Auringon ajat näille Suomen paikkakunnille löytyvät almanakasta tai Ursan vuosikirjasta Tähdet.

Takaisin tehtävähakemistoon

Alkuun