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.