台形則による数値積分

I = \int_0^{\frac{\pi}{2}} \cos x dx = 1

を台形則で数値積分してみて、分割数と誤差を評価する。

trapezoid <- function(fun, start, end, div) {
  x <- seq(start, end, length.out=div)
  step <- (end - start) / (div - 1)
  fx <- fun(x)
  return(step / 2 * (2 * sum(fx) - fx[1] - fx[div]))
}
div <- seq(1, 1000, 100)
errors <- rep(0, length(div))
for (i in 1:length(div)) {
  errors[i] <- abs(1 - trapezoid(function(x){cos(x)}, 0, pi / 2, div[i]))
}
plot(div, errors, type="o")

深い意味はない。なんとなく書いてみたくなっただけ。