ユーザ用ツール

サイト用ツール


numericalipa:ans4

【数値情報処理a】第4回の答え

課題

$y=f(x)$ と $x$ 軸ではさまれた領域の面積をシンプソンの公式で数値積分するプログラムを作って提出しなさい。 ただし、$y$ が負の領域も正の面積として求める必要がある。

求める面積は下図の赤い部分である。

求める面積


解答例

$f(x)=-x^{4}-x^{3}+10x^{2}+x-2$ の場合

①絶対値を使う方法

関数 $f(x)$ は絶対値 abs() を使って定義する。

積分区間には $f(x)=0$ の解のうち、端の二つを使う。

-3.63423216189401010467
 2.71669197614524948747
report4-1.R
  1. # レポート
  2. # シンプソンの公式
  3. # 絶対値を使う方法
  4.  
  5. # 被積分関数の定義
  6. f <- function(x) {
  7. return(abs(-x ^ 4 - x ^ 3 + 10 * x ^ 2 + x - 2))
  8. }
  9.  
  10. # 区間数
  11. n <- 1000
  12.  
  13. # 区間
  14. a <- -3.63423216189401010467
  15. b <- 2.71669197614524948747
  16.  
  17. # 幅
  18. h <- (b - a) / n
  19.  
  20. s1 <- f(a + h * 0.5)
  21. s2 <- 0
  22. for (i in 1 : (n - 1)) {
  23. x <- a + i * h
  24. s1 <- s1 + f(x + h * 0.5)
  25. s2 <- s2 + f(x)
  26. }
  27. s <- (f(a) + 4 * s1 + 2 * s2 + f(b)) * h / 6
  28. print(sprintf("n = %d", n), quote = FALSE)
  29. print(sprintf("h = %f", h), quote = FALSE)
  30. print(sprintf("S = %f", s), quote = FALSE)

②積分範囲を分ける方法

積分区間には $f(x)=0$ の解を使い、$f(x)<0$ の区間では積分の符号を変える。

-3.63423216189401010467
-0.49319311896925860372
 0.41073330472197050467
 2.71669197614524948747
report4-2.R
  1. # レポート
  2. # シンプソンの公式
  3. # 積分範囲を分ける方法
  4.  
  5. # 被積分関数の定義
  6. f <- function(x) {
  7. return(-x ^ 4 - x ^ 3 + 10 * x ^ 2 + x - 2)
  8. }
  9.  
  10. simpson <- function(a, b) {
  11. # 幅
  12. h <- (b - a) / n
  13.  
  14. s1 <- f(a + h * 0.5)
  15. s2 <- 0
  16. for (i in 1 : (n - 1)) {
  17. x <- a + i * h
  18. s1 <- s1 + f(x + h * 0.5)
  19. s2 <- s2 + f(x)
  20. }
  21. return((f(a) + 4 * s1 + 2 * s2 + f(b)) * h / 6)
  22. }
  23.  
  24. # 区間数
  25. n <- 1000
  26.  
  27. # f(x)=0 の解
  28. x1 <- -3.63423216189401010467
  29. x2 <- -0.49319311896925860372
  30. x3 <- 0.41073330472197050467
  31. x4 <- 2.71669197614524948747
  32.  
  33. s <- simpson(x1, x2) - simpson(x2, x3) + simpson(x3, x4)
  34.  
  35. print(sprintf("S = %f", s), quote = FALSE)

同じ処理を繰り返すために simpson() という関数を定義している。


結果

$f(x)=-x^{4}-x^{3}+10x^{2}+x-2$ の場合

S = 87.251725

$f(x)=-x^{4}-2x^{3}+10x^{2}+x-2$ の場合

S = 138.341770

$f(x)=-x^{4}-3x^{3}+10x^{2}+x-2$ の場合

S = 246.731549

$f(x)=-x^{4}-4x^{3}+10x^{2}+x-2$ の場合

S = 447.533010

$f(x)=-x^{4}-5x^{3}+10x^{2}+x-2$ の場合

S = 795.972974
numericalipa/ans4.txt · 最終更新: 2025/05/07 14:14 by you