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′)))]))
|