

(define ((L-particle-spring m g k) state)
   (let ((y (coordinate state))
         (v (velocity state)))
          (- (* 1/2 m (square v)) (* m g y) (* 1/2 k (square y)))))

(define (sysder m g k)
   (Lagrangian->state-derivative
     (L-particle-spring m g k)))

(print-expression
  ((state-advancer sysder 1 0.98 0.1)
   (up 0 50 0)
   2 
   1e-12))

;;;(print-expression
;;;   ((sysder 'm 'g 'k)
;;;    (up 't (up 'x 'y) (up 'xdot 'ydot))))

(define ((monitor-position win) state)
   (let ((y (coordinate state)))
          (plot-point win (time state) y)))

(define plot-win (frame 0 100 -100 100))

((evolve sysder
     1.0
     3
     10)
  (up 0 80 5)
  (monitor-position plot-win)
  0.01
  100
  1.0e-14)





