Source : https://bookdown.org/moh_rosidi2610/Metode_Numerik/diffinteg.html#trapezoida

Metode Trapezoida

Pendekatan trapezoida dilakukan dengan melakukan pendekatan area dibawah kurva fungsi y=f(x) dengan subinterval [xi,xi+1] menggunakan trapesium. Untuk memahami pendekatan yang digunakan pembaca dapat memperhatikan Gambar 9.3.

Fungsi proses integrasi menggunakan metode trapezoida dapat dituliskan pada Persamaan (9.10).

dimana

n merupakan nilai subinterval dan m merupakan jumlah panel trapesium yang digunakan.

Berdasarkan Persamaan (9.10), kita dapat mengembangkan fungsi R yang dapat digunakan untuk melakukan perhitungan integral metode trapezoida. Sintaks fungsi tersebut adalah sebagai berikut:

trap <- function(f, a, b, m=100){
  x <- seq(a, b, length.out = m+1)
  y <- f(x)
  
  p_area <- sum((y[2:(m+1)] + y[1:m])) 
  p_area <- p_area * abs(b-a)/(2*m)
  return(p_area)
}

Kita dapat menghitung kembali intergral persamaan pada Contoh 9.2 (Contoh yang ada pada Integral Riemann) menggunakan fungsi trap() yang telah dibuat. Berikut adalah sintaks yang digunakan:

trap(function(x)x^2, a=0, b=1, m=2)
## [1] 0.375

Metode Simpson 1/3

Persamaan (9.14) disebut sebagai kaidah Simpson 1/3 karena terdapat koefisien 1/3 pada bagian depan persamaan tersebut. Persamaan tersebut juga mudah diingat mengingat pola koefisien persamaan tersebut adalah 1,4,2,4,2,…,2,4,1. Namun penggunaan kaidah 1/3 Simpson mengharuskan jumlah subinterval n genap. Kondisi tersebut jelas berbeda dengan metode trapezoida yang tidak mensyaratkan jumlah selang.

Berdasarkan algoritma tersebut, kita dapat membentuk fungsi simpson() yang dapat digunakan untuk melakukan integrasi menggunakan metode Simpson 1/3. Berikut adalah sintaks yang digunakan:

simpson <- function(f, a, b, m=100){
  h <- (b-a)/m # jarak selang
  x <- a # awal selang
  I <- f(a)+f(b)
  sigma <- 0
  
  if(m%%2 != 0){
    stop("Jumlah panel harus genap")
  }else{
    for(i in 1:(m-1)){
    x <- x+h
    if(i%%2==0){
      sigma <- sigma + 2*f(x)
    }else{
      sigma <- sigma + 4*f(x)
      }
    }
  }
  
  return((h/3)*(I+sigma))
}

Contoh 9.4 Hitung integral persamaan di bawah ini dengan menggunakan jumlah panel m=8!

Fungsi simpson() juga menghasilkan nilai yang serupa dengan perhitungan manual yang telah dilakukan. Berikut adalah sintaks yang digunakan:

simpson(function(x)1/(1+x), a=0, b=1, m=8)
## [1] 0.6931545

Metode Simpson 3/8

Jika pada metode Simpson 1/3 digunakan pendekatan polinomial berderajat 2 untuk mencari luas dibawah kurva, pada metode Simpson 3/8 digunakan pendekatan polinomial berderajat 3 untuk memperoleh hasil yang lebih baik. Bentuk umum integrasi yang digunakan disajikan pada Persamaan (9.16).

Berdasarkan algoritma tersebut, fungsi R dapat disusun untuk melakukan komputasi metode simpson 3/8. Berikut adalah sintaks fungsi tersebut:

simpson38 <- function(f, a, b, m=90){
  h <- (b-a)/m # jarak selang
  x <- a # awal selang
  I <- f(a)+f(b)
  sigma <- 0
  
  if(m%%3 != 0){
    stop("jumlah panel harus kelipatan 3")
  }else{
    for(i in 1:(m-1)){
      x <- x+h
      if(i%%3==0){
      sigma <- sigma + 2*f(x)
      }else{
      sigma <- sigma + 3*f(x)
      }
    }
  }
  
  return((3*h/8)*(I+sigma))
}

Contoh 9.5 Hitung kembali integral persamaan yang disajikan pada Contoh 9.4 menggunakan fungsi simpson38() yang telah dibuat sebelumnya!

Berikut adalah sintaks yang digunakan untuk melakukan proses integrasi Simpson 3/8 menggunakan fungsi simpson38():

simpson38(function(x)1/(1+x), a=0, b=1, m=9)
## [1] 0.6931573