(defn cube [n] (+ (* 5 n n n) (math/sin (* 2.5 n)))) (defn sum [term next a b] (if (> a b) 0 (+ (term a) (sum term next (next a) b)))) (defn integral-old [f a b dx] (defn add-dx [x] (+ x dx)) (* (sum f add-dx (+ a (/ dx 2.0)) b) dx)) (defn integral [f a b n] (def h (/ (- b a) n)) (defn incre [n] (+ n 1)) (defn apply [k] (def multiplier (cond (or (= k 0) (= k n)) 1 (= (mod k 2) 0) 2 4)) (* multiplier (f (+ a (* k h))))) (* (/ h 3) (sum apply incre 0 n))) (defn integral-improved [f a b n] (def h (/ (- b a) n)) (defn incre [k] (+ k 2)) (defn apply [k] (f (+ a (* k h)))) (* (/ h 3) (+ (f a) (* 4 (sum apply incre 1 (- n 1))) (* 2 (sum apply incre 2 (- n 1))) (f b)))) (printf "%.23f" (integral-improved cube 0 1 10)) (printf "%.23f" (integral-improved cube 0 1 100)) (printf "%.23f" (integral-improved cube 0 1 1000)) (printf "%.23f" (integral-improved cube 0 1 10000))