(use extras) (include "Izhikevich03_solver.scm") (define (run tmax f m initial) (let ((input (m initial))) (let recur ((nstate (f input))) (let ((t (alist-ref 't nstate))) (printf "~A ~A ~A~%" t (alist-ref 'V nstate) (alist-ref 'U nstate)) (if (> t tmax) (print "# All done!") (let ((nstate1 (m (map (lambda (x) (or (assoc (car x) nstate) x)) initial)))) (recur (f nstate1)))))))) (define (make-pulse s lodur hidur lo hi ) (lambda (nstate) (let ((t (alist-ref 't nstate))) (let ((sv (cond ((> t lodur) hi) ((> t (+ lodur hidur)) lo) (else lo)))) (cons `(,s . ,sv) nstate) )) )) (define (make-pulse2 s lodur1 hidur1 lodur2 hidur2 lo hi ) (lambda (nstate) (let ((t (alist-ref 't nstate))) (let ((sv (cond ((> t lodur1) hi) ((> t (+ lodur1 lodur2)) (+ hi (* 0.5 hi))) ((> t (+ lodur1 lodur2 hidur2)) hi) ((> t (+ lodur1 hidur1)) lo) (else lo)))) (cons `(,s . ,sv) nstate) )) )) (run 240.0 RS (make-pulse 'Isyn 40.0 200.0 0.0 10.0) RS_initial) (run 240.0 IB (make-pulse 'Isyn 40.0 200.0 0.0 10.0) IB_initial) (run 240.0 CH (make-pulse 'Isyn 40.0 200.0 0.0 10.0) CH_initial) (run 240.0 FS (make-pulse 'Isyn 40.0 200.0 0.0 10.0) FS_initial) (run 240.0 LTS (make-pulse 'Isyn 40.0 200.0 0.0 10.0) LTS_initial) (run 240.0 RZ (make-pulse2 'Isyn 40.0 200.0 100.0 10.0 0.0 10.0) RZ_initial)