| |
Exercise 1.29
| | (ns e1-29
(:use clojure.test))
Define a procedure that takes as arguments \(f, a, b\), and \(n\) and
returns the value of the integral, computed using Simpson's Rule. Use your
procedure to integrate cube between 0 and 1 (with \(n = 100\) and \(n = 1000\)),
and compare the results to those of the integral procedure shown above.
| |
| | (defn cube [x] (* x x x))
Sums up all of the terms.
| | (defn sum
[term a nextf b]
(if (> a b)
0
(+ (term a)
(sum term (nextf a) nextf b))))
Takes an integral of the given function f .
- f - function to integrate
- a, b - points to integrate between
- n - precision (the more, the better)
| | (defn integral
[f a b n]
;h = (b - a) / n
(let [h (/ (- b a) n)]
(defn term [ind]
;Yind = f(a + ind*h)
(let [y (f (+ a (* ind h)))]
(cond (= 0 ind) y
(odd? ind) (* 4 y)
(even? ind) (* 2 y))))
(defn nextf [ind]
(+ 1 ind))
(* (sum term 0 nextf n)
(/ h 3))))
| | (deftest test-integral
(is (= (integral cube 0 1 1000) 751/3000)))
| |