Numeeriset menetelmät ja F90-ohjelmointi

Tällä kurssilla käsitellään yleisimpiä ja yleensä suhteellisen yksinkertaisia menetelmiä, joiden avulla voi numeerisesti ratkaista yhtälöitä, integroida, ratkaista differentiaaliyhtälöitä jne. Sen ohessa tutustutaan Fortran 90/95 -ohjelmointikieleen, jota käytetään ohjelmaesimerkeissä.

Tämä ei ole varsinainen ohjelmointikurssi, joten kielen rakenteet ja ominaisuudet esitetään varsin tiiviisti. Siksi kurssille osallistuminen edellyttää ainakin jonkinlaista aikaisempaa kokemusta ohjelmoinnista jollakin kielellä.

Kurssista ei järjestetä tenttejä. Sen sijaan siihen liittyy harjoitustehtäviä ja lopputyö, jotka toteutetaan F90/95-kielellä.



Demo-ohjelmia

Tästä löytyy joitakin ohjelmia, joita ei välttämättä ole käsitelty luennolla, mutta jotka voivat olla tarpeen harjoitustöissä. Ohjelmien käyttö on sallittu vapaasti, mutta omalla vastuulla. En takaa, että toimivat kaikissa tilanteissa tai että ehtisin ylläpitää niitä. Ilmoita kuitenkin, jos niistä löytyy vikoja.


Muuta oheisroinaa

Grafiikkakirjasto pgplot
Seuraava sisältää Mikko Hanskin vuosia sitten laatiman ohjeen pgplotin käytöstä (ei välttämättä vastaa nykytilannetta). Ohjeesta on linkki luennolla käsiteltyyn dokumenttiin, jonka PostScript-tiedoston voi ladata ja tulostaa. Sieltä löytyy myös linkki kirjaston tuottajan sivuille, joista paketin voi ladata omalle koneelleen.

- Pgplotin manuaali (paljon tekstiä englanniksi)


Luentomateriaali

Luennoilla käsiteltävät asiat sisältyvät seuraaviin pdf-tiedostoihin. Tiedostot ja luennot eivät kuitenkaan vastaa bijektiivisesti toisiaan. Asia on jaettu tiedostoiksi asiakokonaisuuksien mukaan (jotta tätä voi käyttää myös jonkinlaisena primitiivisenä käsikirjana ja itseopiskeluoppaana). Luennoilla numeriikan välissä käsitellään ohjelmointia aina tarpeen mukaan. Sumea luentojen ja tiedostojen välinen kuvaus on esitetty täällä lähinnä niitä varten, jotka haluavat käydä valikoidusti vain muutamilla luennoilla.

Numeriikkaa

Peruskäsitteitä
- Lukujen esitystavoista
- Laskutoimituksissa syntyvistä virheistä
- Äärellinen laskentatarkkuus

Yhtälön ratkaiseminen
- Suora iterointi
- Välinpuolitusmenetelmä
- Regula falsi
- Sekanttimenetelmä
- Newtonin menetelmä
- Polynomiyhtälön juuret - Yhtälöryhmät
- Ratkaisun tarkkuus

Lineaariset yhtälöryhmät
- Gaussin eliminointi
- LU-hajotelma
- Determinantti
- Käänteismatriisi
- Iteratiiviset menetelmät

Ominaisarvot
- Peruskäsitteitä
- QR-hajotelma
- Householderin muunnos
- Givensin rotaatiot
- QR-algoritmi

Aineiston esittäminen funktiolla 1
- Taylorin sarjat
- Pad\'e-approksimaatio
- Interpolointipolynomit
- Spline-funktiot
- Bezier-käyrät

Aineiston esittäminen funktiolla 2
- Pienimmän neliösumman menetelmä

Numeerinen integrointi
- Riemannin summa
- Puolisuunnikassääntö
- Simpsoninen menetelmä
- Rombergin menetelmä
- Newtonin-Cotesin menetelmät
- Gaussin kvadratuuri
- Monte Carlo -integrointi

Numeerinen derivointi

Satunnaisluvut
- Tasaisesti jakautuneet luvut
- Muut jakaumat

Tavalliset differentiaaliyhtälöt, alkuarvotehtävät
- Määritelmiä
- Ratkaisu Taylorin sarjan avulla
- Yksiaskelmenetelmät
- Eulerin menetelmä
- Eksplisiittiset ja implisiittiset menetelmät
- Runge-Kutta-menetemä
- Moniaskelmenetelmät
- Adamsin menetelmä
- Ennustaja-korjaaja-menetelmät

Tavalliset differentiaaliyhtälöt, reuna-arvotehtävät
- Tähtäysmenetelmä

Osittaisdifferentiaaliyhtälöt
- Määritelmiä
- Differenssimenetelmät / elliptiset yhtälöt
- Differenssimenetelmät / hyperboliset yhtälöt
- Differenssimenetelmät / paraboliset yhtälöt
- Elementtimenetelmät (FEM)

Fourier'n muunnos
- Määritelmiä
- Diskreetti muunnos
- Konvoluutio ja dekonvoluutio
- Näytteenottolause ja Nyquistin taajuus
- FFT
- Äärellinen ja ei-tasavälinen aineisto

Aikasarjat

Optimointi
- Peruskäsitteitä
- Lokaali optimointi
- Viivahaku
- Liittogradienttimenetelmä
- Globaali optimointi
- Nelderin--Meaden menetelmä

Inversio-ongelmista

Kuvankäsittelyä

F90

Taustaa
- Yleistä ohjelmointikielistä
- Historiaa

Perusrakenteet
- Yksinkertaiset muuttujat
- Peruskontrollirakenteet
- Syöttö ja tulostus

Proseduurit
- Proseduurit eli funktiot ja aliohjelmat
- Proseduurien paikalliset ja globaalit muuttujat
- Proseduurien parametrit
- Rekursiiviset proseduurit
- Avainsanaparametrit ja valinnaiset parametrit

Taulukot
- Taulukoiden määrittely
- Taulukko-operaatiot

Sekalaisia täydennyksiä
- Merkkijonot
- Syöttö ja tulostus, täydennystä
- Namelist
- Omat muuttujatyypit
- Osoittimet
- Taulukoiden dynaaminen varaus

Interface-lohko
- Funktion välittäminen parametrina

Muuttujien määrittely

Moduulit
- Moduulit
- Geneeriset proseduurit
- Operaattorien ylilataus
- Operaatiot omille muuttujatyypeille

Ohjelman kokonaisrakenne

Rinnakkaislaskentaa
- Peruskäsitteitä
- Muuttujien suojaaminen
- Synkronointi
- Riippuvuudet
- HPF
- MPI

Aliohjelmakirjastot

Hyvä ohjelmointityyli
- Top-down-ohjelmoinnista
- Ohjelmointityylistä
- Hieman ohjeita harjoitustöiden varalle

Vanhoista F77-ohjelmista


Harjoitustehtävät

Harjoitustehtävät vaihtuvat vuosittain. Täällä ovat meneillään olevan kurssin tehtävät ja aikanaan myös niiden ratkaisut sekä taulukko opiskelijoiden saamista pisteistä.

joissakin tehtävissä tarvitaan datatiedostoja, joita on täällä.