Journal: Jan 27, 2009
Bryan Newbold, bnewbold@mit.edu
http://web.mit.edu/bnewbold/thesis/
Playing with crude evolution of basic differential equations:
(define J (- (* x d/dy) (* y d/dx)))
(define ((((evolution order)
delta-t vector-field)
manifold-function)
manifold-point)
(series:sum
(((exp (* delta-t vector-field))
manifold-function)
manifold-point)
order))
(pe ((((evolution 6) 'a J) R2-chi)
((R2 '->point) (up 1 0))))
(pe ((((evolution 6) 2. J) R2-chi)
((R2 '->point) (up 1 0))))
(define mywindow (frame -4 4 -4 4))
(define (plot-evolution win order initial a step)
(letrec
((dostep
(lambda (val)
(cond
((< val a) (let ((this-point ((((evolution order) val J) R2-chi)
((R2 '->point) initial))))
(plot-point win
(time this-point)
(coordinate this-point))
(dostep (+ val step))))))))
(dostep 0.)))
(plot-evolution mywindow 6 (up 1. 0.) 6. .01)
Haha, not really what you'd expect at the end there... numerical error?
And then interactively:
(define (explore-evolution window order length)
(define (iterate-mything i x y)
(if (< i length)
(let ((this-point ((((evolution order) i J) R2-chi)
((R2 '->point) (up x y)))))
(plot-point window (time this-point) (coordinate this-point))
(iterate-mything (+ .01 i) x y))
(button-loop x y)))
(define (button-loop ox oy)
(pointer-coordinates
window
(lambda (x y button)
(let ((temp button))
(cond ((eq? temp 0) (write-line (cons x (cons y (quote ()))))
(display " started.")
(iterate-mything 0 x y))
((eq? temp 1) (write-line (cons ox (cons oy (quote ()))))
(display " continued.")
(iterate-mything 0 ox oy))
((eq? temp 2) (write-line (cons x (cons y (quote ()))))
(display " hit.")
(button-loop ox oy)))))))
(newline)
(display "Left button starts a trajectory.")
(newline)
(display "Middle button continues a trajectory.")
(newline)
(display "Right button interrogates coordinates.")
(button-loop 0. 0.))
(explore-evolution mywindow 5 .4)
That looks a lot better!
(previous entry)