さきのオイラー法よりも効率の良いRunge-Kutta法をHaskellで
runge h f p = runge'
where runge' = p:zipWith runge'' runge' [h*x| x <- [1..]]
where runge'' x t = x + (k1 + 2*k2 + 2*k3 + k4)/6
where
k1 = h * f x t
k2 = h * f (x + k1/2) (t + h/2)
k3 = h * f (x + k2/2) (t + h/2)
k4 = h * f (x + k3) (t +h)
f x t = x
刻み幅がそんなに小さくなくても、かなりいい精度が出ていることがわかる。
*Main> let eu = runge 0.1 f 1
*Main> eu !! 10
2.718279744135166
テーラー展開はこれが参考になるというか、展開をするというイメージをつかみやすくなると思う。