28 lines
1.0 KiB
Common Lisp
28 lines
1.0 KiB
Common Lisp
(defun left-rectangle (f a b n &aux (d (/ (- b a) n)))
|
|
(* d (loop for x from a below b by d summing (funcall f x))))
|
|
|
|
(defun right-rectangle (f a b n &aux (d (/ (- b a) n)))
|
|
(* d (loop for x from b above a by d summing (funcall f x))))
|
|
|
|
(defun midpoint-rectangle (f a b n &aux (d (/ (- b a) n)))
|
|
(* d (loop for x from (+ a (/ d 2)) below b by d summing (funcall f x))))
|
|
|
|
(defun trapezium (f a b n &aux (d (/ (- b a) n)))
|
|
(* (/ d 2)
|
|
(+ (funcall f a)
|
|
(* 2 (loop for x from (+ a d) below b by d summing (funcall f x)))
|
|
(funcall f b))))
|
|
|
|
(defun simpson (f a b n)
|
|
(loop with h = (/ (- b a) n)
|
|
with sum1 = (funcall f (+ a (/ h 2)))
|
|
with sum2 = 0
|
|
for i from 1 below n
|
|
do (incf sum1 (funcall f (+ a (* h i) (/ h 2))))
|
|
do (incf sum2 (funcall f (+ a (* h i))))
|
|
finally (return (* (/ h 6)
|
|
(+ (funcall f a)
|
|
(funcall f b)
|
|
(* 4 sum1)
|
|
(* 2 sum2))))))
|