;; Teachpack: graphing.ss ;; Language: Intermediate or higher #| Template 1. Trivial case: Problem is solved if f is 0 at the point tested. 2. Divide: To generate a new problem, cut the interval in half. Look in the half where the graph crosses the x-axis. 3. Conquer: Simply return the first point found where f is 0. |# ;; Warning: As currently written, this algorithm may never terminate. ;; find-zero : Number Number (Number -> Number) -> Number ;; to find a zero for f between left and right (define (find-zero left right f) (local [(define mid (/ (+ left right) 2))] (cond [(= (f mid) 0) mid] [(> (f left) 0 (f mid)) (find-zero left mid f)] [(< (f left) 0 (f mid)) (find-zero left mid f)] [else (find-zero mid right f)]))) ;; A test of the program ;; f : Number -> Number (define (f x) (+ (* x x) x -2)) (graph-fun f 'blue) (find-zero 0 4 f) ;; Another test of the program ;; g : Number -> Number (define (g x) (+ (* x x x) (* -8 x x) (* 19 x) -12)) ; (graph-fun g 'red) ; <--- uncomment ; (find-zero 0 5 g) ; <--- uncomment