(defn Routhian->state-derivative
([R]
(fn [[_ _ [vx] :as s]]
(let [minus-P ((partial 2 0) R)
minus-F (((partial 1 0) R) s)
vy (((partial 2 1) R) s)
pyd (- (((partial 1 1) R) s))]
(up 1
(up vx vy)
(up
(* (m/s:inverse vx (((partial 2 0) minus-P) s) vx)
(- minus-F
(+ (((partial 0) minus-P) s)
(* (((partial 1 0) minus-P) s) vx)
(* (((partial 1 1) minus-P) s) vy)
(* (((partial 2 1) minus-P) s) pyd))))
pyd)))))
([R dissipation-fn]
(fn [[t q [vx] :as s]]
(let [minus-P ((partial 2 0) R)
minus-F (((partial 1 0) R) s)
vy (((partial 2 1) R) s)
L-state (up t q (up vx vy))
minus-F0 (((partial 2 0) dissipation-fn) L-state)
minus-F1 (((partial 2 1) dissipation-fn) L-state)
pyd (- ((* -1 ((partial 1 1) R)) s) minus-F1)]
(up 1
(up vx vy)
(up
(* (m/s:inverse vx (((partial 2 0) minus-P) s) vx)
(+ (- minus-F
(+ (((partial 0) minus-P) s)
(* (((partial 1 0) minus-P) s) vx)
(* (((partial 1 1) minus-P) s) vy)
(* (((partial 2 1) minus-P) s) pyd)))
minus-F0))
pyd))))))