オイラー法とはあれです、常微分方程式解くやつ。
これをHaskellで実装してみた。下の二行。
euler h f = euler'
where euler' = (f 1.0 0.0): zipWith (+) euler' [h*y| y <- (zipWith f euler' [h*x| x <- [1..]])]
f = xにすればx = e**tが解になるので。
f _ 0.0 = 1.0
f x t = x
として解いてみる。
*Main> euler 0.00001 f !! 100000
2.7182510547639454
あんま刻み幅を小さくしすぎるのはだめ。
*Main> euler 0.000001 f !! 1000000
*** Exception: stack overflow