Kirjoittaja: fergusq
Kirjoitettu: 11.10.2015 – 11.10.2015
Tagit: kirjaston käyttö, matematiikka, koodi näytille, 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.