# レポート # シンプソンの公式 # 積分範囲を分ける方法 # 被積分関数の定義 f <- function(x) { return(-x ^ 4 - x ^ 3 + 10 * x ^ 2 + x - 2) } simpson <- function(a, b) { # 幅 h <- (b - a) / n s1 <- f(a + h * 0.5) s2 <- 0 for (i in 1 : (n - 1)) { x <- a + i * h s1 <- s1 + f(x + h * 0.5) s2 <- s2 + f(x) } return((f(a) + 4 * s1 + 2 * s2 + f(b)) * h / 6) } # 区間数 n <- 1000 # f(x)=0 の解 x1 <- -3.63423216189401010467 x2 <- -0.49319311896925860372 x3 <- 0.41073330472197050467 x4 <- 2.71669197614524948747 s <- simpson(x1, x2) - simpson(x2, x3) + simpson(x3, x4) print(sprintf("S = %f", s), quote = FALSE)