Numerical Integration Method

Soal

Soal Nomor 1

Diketahui: * pdf dari distribusi Kumaraswamy:

\[f(x|a,b) = ab x^{a-1}(1-x^a)^{b-1}\]

  • a = 5
  • b = 3
  • batas 0 < x < 1

Substitusi nilai a dan b ke pdf \[f(x) = 5.3 x^{5-1}(1-x^5)^{3-1}\\ = 15 x^{4}(1-x^5)^{2}\]

Sehingga diperoleh E(x) \[E(x)=\int_0^1 x.f(x)\quad dx \\ =\int_0^1 x.15x^4(1-x^5)^2\quad dx\\=\int_0^1 15x^5(1-x^5)^2\quad dx\]

1.a Menghitung E(X) Secara Manual

Metode Trapezoida untuk n = 4

-Diketahui \[f(x) = 15 x^{5}(1-x^5)^{2},\quad a=0,\quad b=1\]

-Panjang sub interval \[h=\frac{b-a}{n}=\frac{1-0}{4}=\frac{1}{4}\] - Bentuk metode Trapezoida untuk n = 4

\[T_4 = \frac{h}{2}[f(x_0)+2f(x_1)+2f(x_2)+2f(x_3)+2f(x_4)]\] - Nilai f(x) untuk ‘xi’ \[ f(x_0)= f(0) = 0 \\f(x_1)=f(\frac{1}{4})= 0.01461984 \\f(x_2)=f(\frac{2}{4})= 0.4399109 \\f(x_3)=f(\frac{3}{4})= 2.070617 \\f(x_4)=f(\frac{4}{4})= 0\]

-Menghitung Nilai T_4 Karena h = 1, maka \[T_4 =\frac{1}{4}\frac{1}{2}[0+2(0.01461984)+2(0.4399109)+2(2.070617)+0)]=0.6312869\]

Sehingga \[ \int_0^1 15x^5(1-x^5)^2dx \quad \thickapprox \quad T_4 = 0.6312869\] Jadi, diperoleh E(x) menggunakan ‘metode Trapezoida’ untuk n = 4 yaitu E(x) ≈ 0.6312869


Metode Simpson untuk n = 4

-Diketahui \[f(x) = 15 x^{5}(1-x^5)^{2},\quad a=0,\quad b=1\]

-Panjang sub interval \[h=\frac{b-a}{n}=\frac{1-0}{4}=\frac{1}{4}\]

  • Bentuk metode Simpson untuk n = 4

\[S_4 = \frac{h}{3}[f(x_0)+4f(x_1)+2f(x_2)+4f(x_3)+f(x_4)]\] - Nilai f(x) untuk ‘xi’ \[ f(x_0)= f(0) = 0 \\f(x_1)=f(\frac{1}{4})= 0.01461984 \\f(x_2)=f(\frac{2}{4})= 0.4399109 \\f(x_3)=f(\frac{3}{4})= 2.070617 \\f(x_4)=f(\frac{4}{4})= 0\]

-Menghitung Nilai S_4 Karena h = 1, maka \[S_4 =\frac{1}{4}\frac{1}{3}[0+4(0.01461984)+2(0.4399109)+4(2.070617)+0)]=0.7683974\]

Sehingga \[ \int_0^1 15x^5(1-x^5)^2dx \quad \thickapprox \quad S_4 = 0.7683974\] Jadi, diperoleh E(x) menggunakan ‘metode Simpson’ untuk n = 4 yaitu E(x) ≈ 0.7683974


Metode Four-Point Gauss Quadrature

Metode four-point gaussian quadratur, berarti nilai n=4. Berdasarkan tabel gaussian quadratur nilai-nilai koefisien dan titik gauss adalah sebagai berikut:

n Koefisien Titik Gauss
4 C_1=0.3478548 x_1=−0.861136311
C_2=0.6521452 x_2=−0.339981043
C_3=0.6521452 x_3=0.339981043
4 C_4=0.3478548 x_4=0.861136311

langkah 1 Fungsi f(x) dimana dari soal diminta menggunakan E(X) dan selang integrasinya (a,b)

telah diketahui yaitu:

\[f(x) = 15 x^5(1-x^5)^2,\quad a=0,\quad b=1\]

langkah 2 Sebelum kita menggunakan nilai-nilai koefisien dan titik gauss, perlu dilakukan transformasi sehingga domain integral menjadi [−1,1].

\[x=\frac{1}{2}[t(b-a)+(a+b)] \\=\frac{1}{2}[t(1-0)+(0+1)] \\=\frac{1}{2}(t+1) \\x=\frac{t+1}{2}\]

selanjutnya \[x=\frac{dx}{dt}=\frac{1}{2}\\ dx=\frac{1}{2}dt\] Substitusi nilai x ke persamaan \[ \int_0^1 15x^5(1-x^5)^2dx \quad =\int_{-1}^1 15\left[\frac{t+1}{2}\right]^5\left[1-\left[\frac{t+1}{2}\right]^5\right]^2.\frac{1}{2}dt \\=\int_{-1}^1 \frac{15}{2}\left[\frac{t+1}{2}\right]^5\left[1-\left[\frac{t+1}{2}\right]^5\right]^2dt\]

  • Menentukan nilai I \[\int_{-1}^1 \frac{15}{2}\left[\frac{t+1}{2}\right]^5\left[1-\left[\frac{t+1}{2}\right]^5\right]^2dt\quad \thickapprox \quad I \] \[I= C_1f(t_1)+C_2f(t_2)+C_3f(t_3)+C_4f(t_4) \\= 0.3478548.f(-0.86113631)+0.6521452.f(−0.339981043)\\+ 0.6521452.f(0.339981043)+0.3478548.f(0.86113631)\]

  • Menentukan Nilai f(x) untuk setiap x_i *\[f(-0.86113631)=\int_{-1}^1 \frac{15}{2}\left[\frac{-0.86113631+1}{2}\right]^5\left[1-\left[\frac{-0.86113631+1}{2}\right]^5\right]^2dt = 1.21x10^{-5}\]

*\[f(−0.339981043)=\int_{-1}^1\frac{15}{2}\left[\frac{−0.339981043+1}{2}\right]^5\left[1-\left[\frac{-0.339981043+1}{2}\right]^5\right]^2dt = 0.02912641\]

*\[f(0.339981043)=\int_{-1}^1\frac{15}{2}\left[\frac{0.339981043+1}{2}\right]^5\left[1-\left[\frac{0.339981043+1}{2}\right]^5\right]^2dt = 0.7575892\]

*\[f(0.86113631)=\int_{-1}^1\frac{15}{2}\left[\frac{0.86113631+1}{2}\right]^5\left[1-\left[\frac{0.86113631+1}{2}\right]^5\right]^2dt = 0.4779089\]

Sehingga \[I== 0.3478548(1.21x10^{-5})+0.6521452(0.02912641)\\+ 0.6521452(0.7575892)+0.3478548(0.4779089) \\=0.6792999\]

Jadi, \[\int_0^1 15x^5(1-x^5)^2dx\quad \thickapprox \quad I = 0.6792999\]


Komparasi Metode

Nilai_EX <- rbind(0.631286879,
                   0.768397357,
                   0.679299934
                  )
Nama_Metode1 <- c("Metode Trapezoida untuk n=4",
               "Metode Simpson untuk n=4",
               "Metode four-point Gauss Quadrature"
)
hasil <- data.frame(Nama_Metode1, Nilai_EX)
hasil
##                         Nama_Metode1  Nilai_EX
## 1        Metode Trapezoida untuk n=4 0.6312869
## 2           Metode Simpson untuk n=4 0.7683974
## 3 Metode four-point Gauss Quadrature 0.6792999

1.b Menghitung E(X) dengan Nilai Exact

\[E(X)= \frac{bΓ(1+(\frac{1}{2})Γ(b))}{Γ(1+\frac{1}{a}+b)}\]

a <- 5
b <- 3
Eksak <- (b*gamma(1+(1/a))*gamma(b))/(gamma(1+(1/a)+b))
Eksak
## [1] 0.7102273

Fungsi

EX <- function(x){
  x*a*b*x^(a-1)*(1-x^(a))^(b-1)
}
# Menggambar kurva f(x)
curve(EX,0,1)
abline(v=seq(0,1,length.out = 7),col=77,lty=2)

Metode Trapezoida

mendefinisikan fungsi f(x)

trapezoid <- function(ftn, a, b, n = 100) {
     h <- (b-a)/n
     x.vec <- seq(a, b, by = h)
     f.vec <- sapply(x.vec, ftn)     # ftn(x.vec)
     Trap <- h*(f.vec[1]/2 + sum(f.vec[2:n]) + f.vec[n+1]/2)
     return(Trap)
}
f = function(x){15*x^5 - 30*x^10 + 15*x^15}
exact_value=0.7102273
tol <-  0.0001
err <- 1
n = 4
while(err>tol){
  res_trap <- trapezoid(f,0,1,n = n)
  
  err <- abs(res_trap-exact_value)
  
  cat("n=",n,", result=",res_trap,", error=",err,"\n",sep = "")
  
  n=n+1
  if(n==1000){break}
}
## n=4, result=0.6312869, error=0.07894042
## n=5, result=0.6738123, error=0.03641497
## n=6, result=0.6914928, error=0.01873454
## n=7, result=0.6997126, error=0.01051473
## n=8, result=0.7039057, error=0.006321603
## n=9, result=0.7062116, error=0.004015656
## n=10, result=0.7075597, error=0.002667593
## n=11, result=0.7083885, error=0.001838822
## n=12, result=0.7089199, error=0.001307439
## n=13, result=0.7092729, error=0.0009544148
## n=14, result=0.7095147, error=0.000712649
## n=15, result=0.7096846, error=0.0005426739
## n=16, result=0.7098069, error=0.0004204042
## n=17, result=0.7098966, error=0.0003306616
## n=18, result=0.7099637, error=0.0002636072
## n=19, result=0.7100146, error=0.0002127014
## n=20, result=0.7100538, error=0.0001734994
## n=21, result=0.7100844, error=0.0001429188
## n=22, result=0.7101085, error=0.0001187833
## n=23, result=0.7101278, error=9.953088e-05

Metode Simpson

simpson_n <- function(ftn, a, b, n = 100) {
    n <- max(c(2*(n %/% 2), 4))
    h <- (b-a)/n
    x.vec1 <- seq(a+h, b-h, by = 2*h)       # ganjil
    x.vec2 <- seq(a+2*h, b-2*h, by = 2*h)   # genap
    f.vec1 <- sapply(x.vec1, ftn)   # ganjil
    f.vec2 <- sapply(x.vec2, ftn)   # genap
    S <- h/3*(ftn(a) + ftn(b) + 4*sum(f.vec1) + 2*sum(f.vec2))
    return(S)
}
f = function(x){15*x^5 - 30*x^10 + 15*x^15}
exact_value=0.7102273
tol <-  0.0001
err <- 1
n = 4
while(err>tol){
  res_simp <- simpson_n(f,0,1,n = n)
  
  err <- abs(res_simp-exact_value)
  
  cat("n=",n,", result=",res_simp,", error=",err,"\n",sep = "")
  
  n=n+1
  if(n==1000){break}
}
## n=4, result=0.7683974, error=0.05817006
## n=5, result=0.7683974, error=0.05817006
## n=6, result=0.7497082, error=0.03948094
## n=7, result=0.7497082, error=0.03948094
## n=8, result=0.728112, error=0.01788467
## n=9, result=0.728112, error=0.01788467
## n=10, result=0.7188088, error=0.008581532
## n=11, result=0.7188088, error=0.008581532
## n=12, result=0.7147289, error=0.004501593
## n=13, result=0.7147289, error=0.004501593
## n=14, result=0.712782, error=0.002554712
## n=15, result=0.712782, error=0.002554712
## n=16, result=0.711774, error=0.001546662
## n=17, result=0.711774, error=0.001546662
## n=18, result=0.7112144, error=0.0009870756
## n=19, result=0.7112144, error=0.0009870756
## n=20, result=0.7108852, error=0.0006578651
## n=21, result=0.7108852, error=0.0006578651
## n=22, result=0.7106819, error=0.0004545628
## n=23, result=0.7106819, error=0.0004545628
## n=24, result=0.7105511, error=0.0003237819
## n=25, result=0.7105511, error=0.0003237819
## n=26, result=0.710464, error=0.0002366803
## n=27, result=0.710464, error=0.0002366803
## n=28, result=0.7104042, error=0.0001769138
## n=29, result=0.7104042, error=0.0001769138
## n=30, result=0.7103621, error=0.0001348299
## n=31, result=0.7103621, error=0.0001348299
## n=32, result=0.7103318, error=0.0001045198
## n=33, result=0.7103318, error=0.0001045198
## n=34, result=0.7103096, error=8.225045e-05

Metode Gauss Quadrature

f = function(x){15*x^5 - 30*x^10 + 15*x^15}
exact_value=0.7102273
tol <-  0.0001
err <- 1
n = 4
library(pracma)

while(err>tol){
  
  gL <- gaussLegendre(n = n,a = 0,1)

 Ci <- gL$w # koefisien
 xi <- gL$x # gauss point
  
  res_gl <- sum(Ci * f(xi))

  err <- abs(res_gl-exact_value)
  
  cat("n=",n,", result=",res_gl,", error=",err,"\n",sep = "")
  
  n=n+1
  if(n==1000){break}
}
## n=4, result=0.6792999, error=0.03092738
## n=5, result=0.707375, error=0.002852279
## n=6, result=0.7101422, error=8.507726e-05

Olehnya itu, untuk Metode Gauss Quadrature digunakan n=6

Komparasi Metode untuk tiap sub Interval Berikut perbandingan banyaknya sub interval n untuk mendapatkan E(x) dengan toleransi 0.0001.

exact <- 0.7102273
ertrap <- 0.7102273-0.6312869
ersimp <- 0.7683974-0.7102273
ergaquad <- 0.7102273-0.7101422
ErrorTollerance <- rbind(exact, ertrap,ersimp,ergaquad)
ErrorTollerance
##               [,1]
## exact    0.7102273
## ertrap   0.0789404
## ersimp   0.0581701
## ergaquad 0.0000851
Nama_Metode <- c("Nilai Exact",
               "Metode Trapezoida untuk n=4",
               "Metode Simpson untuk n=4",
               "Metode four-point Gauss Quadrature"
)
library(tibble)
tibble(all_result <- data.frame(Nama_Metode, ErrorTollerance))
## # A tibble: 4 x 2
##   Nama_Metode                        ErrorTollerance
##   <chr>                                        <dbl>
## 1 Nilai Exact                              0.710    
## 2 Metode Trapezoida untuk n=4              0.0789   
## 3 Metode Simpson untuk n=4                 0.0582   
## 4 Metode four-point Gauss Quadrature       0.0000851

Dapat disimpulkan bahwa Metode terbaik yang digunakan adalah Metode four-points Gauss Quadrature dengan nilai error terkecil.

Soal Nomor 2

CDF dari suatu distribusi didefinisikan sebagai berikut:

\[F(x)=\int_0^\infty f(t)dt\]

Pdf dari distirbusi Eksponensial adalah \[f(x|λ)=λ e^{−λ}x\]

Menentukan CDF-nya dengan x = 4 dan λ=2 \[F(4)=\int_0^4f(x) dx \\f(t)=\int_0^42e^{-2}{t} dt\]

Menentukan Nilai Exact

a <- 0
b <- 4
F <- function(t){
  2*exp(-2*t)
}
eksakcdf <- integrate(F, 0, 4)
eksakcdf
## 0.9996645 with absolute error < 1.1e-14
curve(F,0,4)
abline(v=seq(0,4,length.out = 7),col=7,lty=2)

Selanjutnya akan dicari cdf menggunakan 4 metode yaitu metode Trapezoida n=1000, Metode Simpson n = 300, Gauss Quadrature dengan n = 7, dan Monte Carlo dengan m = 10000. Untuk menghasilkan cdf akan digunakan nilai teloransi 0.00001

**1. Metode Trapezoida

trapezoid <- function(ftn, a, b, n = 1000) {
     h <- (b-a)/n
     h
     x.vec <- seq(a, b, by = h)
     f.vec <- sapply(x.vec, F)     # ftn(x.vec)
     Trap <- h*(f.vec[1]/2 + sum(f.vec[2:n]) + f.vec[n+1]/2)
     return(Trap)
}
trapezoid(F,0,4,n = 1000)
## [1] 0.9996699
exact_value=0.9996645
tol <-  0.00001
err <- 1
n = 1000

while(err>tol){
  res_trap <- trapezoid(F,0,4,n = n)
  
  err <- abs(res_trap-exact_value)
  
  cat("n=",n,", result=",res_trap,", error=",err,"\n",sep = "")
  
  n=n+1
  if(n==1000){
    break
  }
  
}
## n=1000, result=0.9996699, error=5.368911e-06

2. Metode Simpson

simpson_n <- function(ftn, a, b, n = 100) {
    n <- max(c(2*(n %/% 2), 4))
    h <- (b-a)/n
    x.vec1 <- seq(a+h, b-h, by = 2*h)       # ganjil
    x.vec2 <- seq(a+2*h, b-2*h, by = 2*h)   # genap
    f.vec1 <- sapply(x.vec1, ftn)   # ganjil
    f.vec2 <- sapply(x.vec2, ftn)   # genap
    S <- h/3*(ftn(a) + ftn(b) + 4*sum(f.vec1) + 2*sum(f.vec2))
    return(S)
}
simpson_n(F,0,4,n = 300)
## [1] 0.9996645
exact_value=0.9996645
tol <-  0.0001
err <- 1
n = 500

while(err>tol){
  res_simp <- simpson_n(F,0,4,n = n)
  
  err <- abs(res_simp-exact_value)
  
  cat("n=",n,", result=",res_simp,", error=",err,"\n",sep = "")
  
  n=n+1
  if(n==1000){
    break
  }
}
## n=500, result=0.9996645, error=3.773605e-08

3.Metode Gauss Quadrature

Menggunakan fungsi ‘gaussLegendre’ dari package ‘pracma’ R untuk n=7

gL <- gaussLegendre(n = 7,a = 0,4)

Ci <- gL$w # koefisien

xi <- gL$x # gauss point

I <- sum(Ci * F(xi))
I
## [1] 0.9996645
exact_value=0.9996645
tol <-  0.00001
err <- 1
n = 7

while(err>tol){
  
  gL <- gaussLegendre(n = n,a = 0,4)

 Ci <- gL$w # koefisien
 xi <- gL$x # gauss point
  
  res_gl <- sum(Ci * F(xi))

  err <- abs(res_gl-exact_value)
  
  cat("n=",n,", result=",res_gl,", error=",err,"\n",sep = "")
  
  n=n+1
  if(n==1000){
    break
  }
}
## n=7, result=0.9996645, error=1.619311e-08

4. Metode Monte Carlo

x <- 4
lamda <- 2
F <- function(t){
  lamda * exp(-lamda*t)
}
# Fungsi untuk Metode Monte Carlo
mc_integral <- function(ftn, a, b,m=1000){
  #Membangkitkan x berdistribusi U(a,b)
  x <- runif(m,a,b)
  # Menghitung rata-rata dari output fungsi
  Gx <- ftn(x)
  Gx_m <- mean(Gx)
  theta.hat <- (b-a)*Gx_m
  return(theta.hat)
}
set.seed(1001)
int_g <- mc_integral(F,0, 4,m = 5000)
int_g
## [1] 1.001289

Membandingkan Nilai Error

exact_value = 0.9996645
F   = function(t){ 2*exp(-2*t) }

# Metode Trapezoida
result1  = trapezoid(F,a=0,b=4,n=1000)
err1 = abs(exact_value-result1)

# Metode Simpson
result2  = simpson_n(F,a=0,b=4,n=300)
err2 = abs(exact_value-result2)

# Metode Gauss Quadrature
result3  = sum(Ci * F(xi))
err3 = abs(exact_value-result3)

# Metode Monte Carlo
set.seed(1001)
result4=mc_integral(F,a=0,b=4,m=5000)
err4 = abs(exact_value-result4)

Metode = c("Trapezoida",
        "Simpson",
        "Gauss Quadrature",
        "Monte Carlo")
n      = c(1000,300,7,5000)
Hasil  = c(result1,result2,result3,result4)
Error  = c(err1,err2,err3,err4)
komp.metode = data.frame(Metode,n, Hasil, Error)
komp.metode
##             Metode    n     Hasil        Error
## 1       Trapezoida 1000 0.9996699 5.368911e-06
## 2          Simpson  300 0.9996645 4.018025e-08
## 3 Gauss Quadrature    7 0.9996645 1.619311e-08
## 4      Monte Carlo 5000 1.0012889 1.624354e-03

Kesimpulan

Berdasarkan perhitungan fdf dari distribusi Eksponensial menggunakan 4 Metode yakni Metode Trapezoida n=1000, Metode Simpson n = 300, Gauss Quadrature dengan n = 7, dan Monte Carlo , dapat disimpulkan bahwa metode yang terbaik adalah metode Gauss Quadrature n=7, toleransi=0.00001 karena memiliki nilai error paling kecil dan hasil yang mendekati exactnya.