SICP問題3.79

問題3.78のsolve-2ndを一般化し、一般的な二階微分方程式d^2 y/dt^2=f(dy/dt,y)を解くのに使えるようにする

元のsolve-2nd(d^2/dt^2 - a dy/dt - by = 0)を解く手続き

(define (solve-2nd a b dt y0 dy0)
  (define y (integral (delay dy) y0 dt))
  (define dy (integral (delay ddy) dy0 dt))
  (define ddy (add-streams (scale-stream dy a)
                           (scale-stream y b)))
  y)

一般化したsolve-2nd手続き

(define (solve-2nd f dy0 y0 dt)
  (define y (integral (delay dy) y0 dt))
  (define dy (integral (delay ddy) dy0 dt))
  (define ddy (stream-map f dy y))
  y)