45 lines
1000 B
Plaintext
45 lines
1000 B
Plaintext
(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))
|