Boole's rule
{{Short description|Method of numerical integration}}
{{hatnote|The widely propagated typographical error Bode's rule redirects here. For Bode's Law, see Titius–Bode law.}}
In mathematics, Boole's rule, named after George Boole, is a method of numerical integration.
Formula
=Simple Boole's Rule=
It approximates an integral:
by using the values of {{mvar|f}} at five equally spaced points:{{sfn|Boole|1880|p=47|loc=Eq(21)}}
& x_0 = a\\
& x_1 = x_0 + h \\
& x_2 = x_0 + 2h \\
& x_3 = x_0 + 3h \\
& x_4 = x_0 + 4h = b
\end{align}
It is expressed thus in Abramowitz and Stegun:{{sfn|Davis|Polonsky|1983}}
where the error term is
for some number {{tmath|\xi}} between {{tmath|x_0}} and {{tmath|x_4}} where {{nowrap|1=945 = 1 × 3 × 5 × 7 × 9}}.
It is often known as Bode's rule, due to a typographical error that propagated from Abramowitz and Stegun.{{sfn|Weisstein}}
The following constitutes a very simple implementation of the method in Common Lisp which ignores the error term:
role="presentation" class="wikitable mw-collapsible mw-collapsed"
|Example implementation in Common Lisp |
(defun integrate-booles-rule (f x1 x5) "Calculates the Boole's rule numerical integral of the function F in the closed interval extending from inclusive X1 to inclusive X5 without error term inclusion." (declare (type (function (real) real) f)) (declare (type real x1 x5)) (let ((h (/ (- x5 x1) 4))) (declare (type real h)) (let* ((x2 (+ x1 h)) (x3 (+ x2 h)) (x4 (+ x3 h))) (declare (type real x2 x3 x4)) (* (/ (* 2 h) 45) (+ (* 7 (funcall f x1)) (* 32 (funcall f x2)) (* 12 (funcall f x3)) (* 32 (funcall f x4)) (* 7 (funcall f x5))))))) |
= Composite Boole's Rule =
In cases where the integration is permitted to extend over equidistant sections of the interval , the composite Boole's rule might be applied. Given divisions, where mod , the integrated value amounts to:{{sfn|Sablonnière|Sbibih|Tahrichi|2010|p=852}}
\int_{x_0}^{x_N} f(x)\,dx
= \frac{2 h}{45}
\left(
7(f(x_0) + f(x_N))
+ 32\left(\sum_{i \in \{1, 3, 5, \ldots, N-1\}} f(x_i)\right)
+ 12\left(\sum_{i \in \{2, 6, 10, \ldots, N-2\}} f(x_i)\right)
+ 14\left(\sum_{i \in \{4, 8, 12, \ldots, N-4\}} f(x_i)\right)
\right) + \text{error term}
where the error term is similar to above. The following Common Lisp code implements the aforementioned formula:
role="presentation" class="wikitable mw-collapsible mw-collapsed"
|Example implementation in Common Lisp |
(defun integrate-composite-booles-rule (f a b n) "Calculates the composite Boole's rule numerical integral of the function F in the closed interval extending from inclusive A to inclusive B across N subintervals." (declare (type (function (real) real) f)) (declare (type real a b)) (declare (type (integer 1 *) n)) (let ((h (/ (- b a) n))) (declare (type real h)) (flet ((f[i] (i) (declare (type (integer 0 *) i)) (let ((xi (+ a (* i h)))) (declare (type real xi)) (the real (funcall f xi))))) (* (/ (* 2 h) 45) (+ (* 7 (+ (f[i] 0) (f[i] n))) (* 32 (loop for i from 1 to (- n 1) by 2 sum (f[i] i))) (* 12 (loop for i from 2 to (- n 2) by 4 sum (f[i] i))) (* 14 (loop for i from 4 to (- n 4) by 4 sum (f[i] i)))))))) |
role="presentation" class="wikitable mw-collapsible mw-collapsed"
|Example implementation in R |
booleQuad <- function(fx, dx) { # Calculates the composite Boole's rule numerical # integral for a function with a vector of precomputed # values fx evaluated at the points in vector dx. n <- length(dx) h <- diff(dx) stopifnot(exprs = { length(fx) == n n > 8L h[1L] >= 0 n >= 2L n %% 4L == 1L isTRUE(all.equal(h, rep(h[1L], length(h)))) }) nm2 <- n - 2L cf <- double(nm2) cf[seq.int(1, nm2, 2L)] <- 32 cf[seq.int(2, nm2, 4L)] <- 12 cf[seq.int(4, nm2, 4L)] <- 14 cf <- c(7, cf, 7) sum(cf * fx) * 2 * h[1L] / 45 } |
See also
Notes
{{reflist}}
References
{{sfn whitelist|CITEREFDavisPolonsky1983|CITEREFWeisstein}}
- {{cite book
|last= Boole
|first= George
|author-link= George Boole
|year=1880
|orig-year=1860
|edition = 3rd
|title=A Treatise on the Calculus of Finite Differences
|url=https://archive.org/details/cu31924031240934/page/n61/mode/2up?q=7
|publisher=Macmillan and Company
}}
- {{AS ref|25, eqn 25.4.14|886|first1=Philip J. |last1=Davis |link1=Philip J. Davis |first2=Ivan |last2=Polonsky}}
- {{cite journal
| last1 = Sablonnière
| first1 = P.
| last2 = Sbibih
| first2 = D.
| last3 = Tahrichi
| first3 = M.
| date = 2010
| title = Error estimate and extrapolation of a quadrature formula derived from a quartic spline quasi-interpolant
| journal = BIT Numerical Mathematics
| volume = 50
| issue = 4
| pages = 843{{ndash}}862
| doi = 10.1007/s10543-010-0278-0
}}
- {{MathWorld |title=Boole's Rule|id=BoolesRule}}
{{Numerical integration}}
{{DEFAULTSORT:Boole's Rule}}
Category:Numerical integration
Category:Articles with example Lisp (programming language) code