Kirjautuminen

Haku

Tehtävät

Koodit: Haskell: Eulerin menetelmä EasyPlot-kirjastolla

Kirjoittaja: fergusq

Kirjoitettu: 11.10.2015 – 11.10.2015

Tagit: kirjaston käyttö, matematiikka, vinkki

Eulerin menetelmällä on helppo laskea likiarvoja differentiaaliyhtälöille. Periaatteena on, että jos funktion y tiedetään kulkevan jonkun pisteen (x0, y(x0)) kautta, voidaan laskea likiarvo funktiolle kohdassa x0+Δx: y(x0+Δx) ≈ y(x0) + y'(x0, y(x0))·Δx.

Tässä on algoritmin toteutus Haskellilla ja EasyPlot-kirjastolla. Ohjelma laskee likiarvoja differentiaaliyhtälölle y' = x + y, kun funktion y tiedetään kulkevan pisteen (-1, 0) kautta.

import Graphics.EasyPlot

cache f = (map f [0 ..] !!)

dx = 0.1
x0 = -1
y0 = 0
y' x y = x + y

x = cache gx
    where gx 0 = x0
          gx n = x (n-1) + dx

y = cache gy
    where gy 0 = y0
          gy n = y (n-1) + y' (x $ n-1) (y $ n-1) * dx

main = plot X11 $ Data2D [Style Lines, Title "y"] [] [(x i, y i) | i <- [0..100]]

Rekursiivisten funktioiden arvot tallennetaan välimuistiin cache-funktiolla ohjelman nopeuttamiseksi.

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta