4.9 Simpson’s formula

1/3 formula: 3점을 지나는 곡선 아래 면적

\[ a_k = \frac{h}{3}(y_k + 4y_{k+1} + y_{k+2}) \; k=0,\cdots,(n-2) \] (n should be even number.)

\[ \int_a^b f(x) dx \approx \sum_{k=0}^{n-2} a_k = \frac{h}{3} \left( y_0 + y_n + 2 \sum_{k=1}^{n-1} y_k + 2 \sum_{k=1}^{(n-2)/2} y_{2k} \right) \]

3/8 formula: 4점을 지나는 곡선 아래 면적

\[ a_k = \frac{3h}{8}(y_k + 3y_{k+1} + 3y_{k+2} + y_{k+3}) \; k=0,\cdots,(n-3) \] (n should be a multiple number of three.)

\[ \int_a^b f(x) dx \approx \sum_{k=0}^{n-3} a_k = \frac{3h}{8} \left( y_0 + y_n + 3 \sum_{k=1}^{n-1} y_k - \sum_{k=1}^{(n-3)/3} y_{3k} \right) \]

Practice script

simps13
## function (fx, a, b, n) 
## {
##     if (n%%2 != 0) 
##         return(NULL)
##     xk = seq(a, b, length.out = (n + 1))
##     yk = fx(xk)
##     Ar = (b - a)/n/3 * (yk[1] + yk[n + 1] + 2 * sum(yk[2:n]) + 
##         2 * sum(yk[seq(3, (n - 1), 2)]))
##     return(Ar)
## }
## <bytecode: 0x000001e2acf73b48>
## <environment: namespace:math>
simps38
## function (fx, a, b, n) 
## {
##     if (n%%3 != 0) 
##         return(NULL)
##     xk = seq(a, b, length.out = (n + 1))
##     yk = fx(xk)
##     Ar = 3 * (b - a)/n/8 * (yk[1] + yk[n + 1] + 3 * sum(yk[2:n]) - 
##         sum(yk[seq(4, n - 2, 3)]))
##     return(Ar)
## }
## <bytecode: 0x000001e2acaceca0>
## <environment: namespace:math>
fx = function(x) exp(-x/100)
simps13(fx, 0, 24, 10)
## [1] 19.91
simps38(fx, 0, 24, 12)
## [1] 21.34
fx2 = function(x) 3 * x * sin(x) - log(x)
simps13(fx2, 0.8, 2.6, 10)
## [1] 6.543
simps38(fx2, 0.8, 2.6, 12)
## [1] 6.888