Numeeriset menetelmät, kevät 2006

Harjoitus 7

Ratkaisut palautettava viimeistään luennolla 22.3.

1. Generoi joukko (0, 1)-normaalijakautuneita satunnaislukuja
a) laskemalla yhteen neljä tasaisesti jakautunutta satunnaislukua,
b) Box-Mullerin menetelmalla.
Tulosta kummankin jakauma jakamalla luvut sopiviin luokkiin, esimerkiksi [-5,-4.5), [-4.5, -4), ..., [4.5, 5).

2. Tee ohjelma, joka laskee n-ulotteisen pallon tilavuuden integroimalla Monte Carlo -menetelmällä. Tutki tarkkuuden paranemista pisteiden lukumäärän kasvaessa, kun n=3 ja 5. Pallon tilavuus on

Vn = Rn\pin/2 / (n/2)!,

missä R on pallon säde. Jos n on pariton, tarvitaan tietoa, että

(m+ 1/2)! = \sqrt(\pi) (2m+2)! /((m+1)! 4m+1).

3. Rationaalilukumoduulin koodi löytyy kurssin demo-ohjelmista. Täydennä maduulia niin, että myös muut laskutoimitukset (-, *, /) on määritelty, jos toinen operandi on kokonaisluku. Testaa moduulin toimivuutta omalla pääohjelmalla.

4. Kirjoita moduuli magnitudeilla laskemista varten. Testaa sitä esimerkiksi seuraavanlaisella pääohjelmalla:

  program magtest\nl
  use magnit\nl
  implicit none\nl
  type (magnitude) :: m1, m2, mtot\nl
  real x\nl
  m1 = 1.0\nl
  m2 = 2.0\nl
  mtot = m1+m2\nl
  x=mtot\nl
  write(*,*) x\nl
  end program

Tässä siis magnitudien yhteenlasku sekä sijoitusoperaatiot realiluku = magnitudi ja magnitudi = reaaliluku on määriteltävä moduulissa.