(include "Izhikevich03_solver.scm") (define (run tmax f m input) (let ((input (m input))) (let ((nstate (f input))) (let ((t (alist-ref 't nstate))) (printf "~A ~A ~A ~A~%" t (alist-ref 'V nstate) (alist-ref 'U nstate) (alist-ref 'Isyn nstate)) (if (> t tmax) (print "# All done!") (run tmax f m nstate)))))) (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)