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