11 lines
437 B
Racket
11 lines
437 B
Racket
(define ((adaptive method ε) F h0)
|
||
(case-lambda
|
||
[(x y) (((adaptive method ε) F h0) x y h0)]
|
||
[(x y h)
|
||
(match-let* ([(list x0 y0) ((method F h) x y)]
|
||
[(list x1 y1) ((method F (/ h 2)) x y)]
|
||
[(list x1 y1) ((method F (/ h 2)) x1 y1)]
|
||
[τ (abs (- y1 y0))]
|
||
[h′ (if (< τ ε) (min h h0) (* 0.9 h (/ ε τ)))])
|
||
(list x1 (+ y1 τ) (* 2 h′)))]))
|