Integrasi Numerik

Tugas Praktikum 10 STA561 Pemrograman Statistika

Nur Andi Setiabudi1

2021-11-18

Soal 1: Distribusi Kumaraswamy

Diketahui PDF (probability density function) dari distribusi Kumaraswamy adalah sebagai berikut

\[ f(x|a,b) = abx^{a-1}(1-x^a)^{b-1}, \quad \mathrm{di\ mana} \quad x \in (0,1) \] Jika diketahui \(a=5\) dan \(b=3\)

  1. Hitunglah \(E(X)\) dengan menggunakan metode Trapezoida untuk \(n=4\), Simpson untuk \(n=4\) dan four-point Gauss Quadrature tanpa menggunakan software apapun.
  2. Jika diketahui nilai exact dari \(E(X) = \frac{b\Gamma(1+\frac{1}{a})\Gamma(b)}{\Gamma(1+\frac{1}{a}+b)}\), metode mana yang paling mendekati untuk menghitung nilai \(E(X)\) dengan toleransi 0.0001? Gunakan R!

Jawaban 1.a

Untuk

\(\begin{aligned} f(x|a,b) &= abx^{a-1}(1-x^a)^{b-1}, \quad \mathrm{di\ mana} \quad x \in (0,1), \mathrm{\ maka} \\ E(X) &= \int_0^1 x (abx^{a-1}(1-x^a)^{b-1}) dx. \quad \mathrm{Untuk\ } a = 5, b = 3 \mathrm{\ diperoleh}\\ &= \int_0^1 15x^5(1-x^5)^2 dx \\ \mathrm{Misal} \\ g(x) &= 15x^5(1-x^5)^2, \quad \mathrm{maka}\\ E(X) &= \int_0^1 g(x)dx \end{aligned}\)

Metode Trapezoidal

Misal, \(T\) adalah nilai hampiran untuk \(E(x) = \int_a^b g(x)dx\) dengan metode Trapezoidal, maka

\(\begin{aligned} h &= \frac{b-a}{n}, \quad \mathrm{sehingga\ } a = x_0 < x_1< x_2 < ... < x_{n-1} < x_n = b \\ T &= \frac{h}{2}\sum_{i=0}^n cg(x_i), \quad \mathrm{di\ mana\ } c = 1 \mathrm{\ untuk\ } i \in (0,n) \mathrm{,\ selainnya\ } c = 2.\\ \end{aligned}\)

Nilai hampiran \(E(x)\) menggunakan metode Trapezoidal dengan \(n=4\) dapat dilakukan secara manual dengan tahapan berikut:

\(\begin{aligned} h &= \frac{b-a}{n} \\ &= \frac{1-0}{4} = 0.25, \quad \mathrm{sehingga\ } x_0 = 0,\ a_1 = 0.25,\ a_2 = 0.5,\ a_3 = 0.75,\ a_4 = 1.\\ \end{aligned}\)

Perhitungan berikutnya diringkas dalam tabel.

\(i\) \(x_i\) \(c\) \(g(x_i)\) \(cg(x_i)\)
0 0 1 0 0
1 0.25 2 0.0146 0.0292
2 0.5 2 0.4399 0.8798
3 0.75 2 2.0706 4.1412
4 1 1 0 0

Sehingga, nilai hampiran dari \(E(x)\) adalah

\(\begin{aligned} T &= \frac{0.25}{2} (0 + 0.0292 + 0.8798 + 4.1412) \\ &= 0.125(5.0502) \\ &= 0.6313 \\ \end{aligned}\)

Metode Simpson

Misal, \(S\) adalah nilai hampiran untuk \(E(x) = \int_a^b g(x)dx\) dengan metode Simpson, maka

\(\begin{aligned} h &= \frac{b-a}{n}, \quad \mathrm{sehingga\ } a = x_0 < x_1< x_2 < ... < x_{n-1} < x_n = b \\ S &= \frac{h}{3}\sum_{i=0}^n cg(x_i), \quad \mathrm{di\ mana\ } c = 1 \mathrm{\ untuk\ } i \in (0,n)\mathrm{,\ } c = 4 \mathrm{\ untuk\ } i \mathrm{\ ganjil,\ } c = 2 \mathrm{\ untuk\ } i \mathrm{\ genap}. \\ \end{aligned}\)

Nilai hampiran \(E(x)\) menggunakan metode Simpson dengan \(n=4\) dapat dilakukan secara manual dengan tahapan berikut:

\(\begin{aligned} h &= \frac{b-a}{n} \\ &= \frac{1-0}{4} = 0.25, \quad \mathrm{sehingga\ } x_0 = 0,\ a_1 = 0.25,\ a_2 = 0.5,\ a_3 = 0.75,\ a_4 = 1.\\ \end{aligned}\)

Perhitungan berikutnya diringkas dalam tabel.

\(i\) \(x_i\) \(c\) \(g(x_i)\) \(cg(x_i)\)
0 0 1 0 0
1 0.25 4 0.0146 0.0585
2 0.5 2 0.4399 0.8798
3 0.75 4 2.0706 8.2825
4 1 1 0 0

Sehingga, nilai hampiran untuk \(E(x)\) adalah

\(\begin{aligned} S &= \frac{0.25}{3} (0 + 0.0585 + 0.8798 + 8.2825) \\ &= 0.0833(9.2208) \\ &= 0.7684 \\ \end{aligned}\)

Metode Gauss (Adaptive) Quadrature

Misal, \(Q\) adalah nilai hampiran untuk \(E(x) = \int_a^b g(x)dx\) dengan metode Gauss (Adaptive) Quadrature, maka

\[ Q = \frac{b-a}{2}\sum_{i=1}^n w_{i}f\left(\frac{b-a}{2}x_{i}+\frac{b+a}{2}\right) \]

Untuk \(n = 4\), nilai \(w\) dan \(x\) adalah (Sumber: pomax.github.io)

\(i\) \(w_i\) \(x_i\)
1 0.652145155… -0.339981044…
2 0.652145155… 0.339981044…
3 0.347854845… -0.861136312…
4 0.347854845… 0.861136312…

Nilai hampiran \(E(x)\) menggunakan metode four-point Gauss (Adaptive) Quadrature dapat dilakukan secara manual seperti diringkas dalam tabel berikut:

\(i\) \(w_i\) \(x_i\) \(k_i\) \(f(k_i)\) \(wf(k_i)\)
1 0.6521 -0.3400 0.3300 0.0583 0.0380
2 0.6521 0.3400 0.6700 1.5152 0.9881
3 0.3479 -0.8611 0.0694 0 0
4 0.3479 0.8611 0.9306 0.9558 0.3325

di mana \(k_i = 0.5x_{i}+0.5\)

Sehingga, nilai hampiran bagi \(E(x)\) adalah

\(\begin{aligned} Q &= \frac{1-0}{2} (0.0380 + 0.9881 + 0 + 0.3325) \\ &= 0.5(1.3586) \\ &= 0.6793 \\ \end{aligned}\)


Jawaban 1.b

Untuk mengetahui metode integrasi numerik terbaik, perlu dilakukan perbandingan terhadap nilai exact-nya.

Nilai Harapan Exact

Nilai exact bagi nilai harapan distribusi Kumaraswamy, yaitu

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

dapat dihitung dengan menggunakan R dengan sintaks berikut:

ExKumaraswamy <- function(a,b){
  E <- (b * gamma(1 + (1/a)) * gamma(b)) / gamma(1 + (1/a) + b)
  return(E)
}

Untuk \(a=5\) dan \(b=3\), diperoleh nilai exact:

Ex <- ExKumaraswamy(a = 5, b = 3)
Ex
## [1] 0.7102273

Perbandingan nilai hampiran menggunakan teknik integrasi numerik dengan nilai exact ditampilkan dalam tabel berikut.

Metode Nilai hampiran Nilai exact Selisih
Trapezoidal, \(n = 4\) 0.6313 0.7102 0.0789
Simpson, \(n = 4\) 0.7684 0.7102 0.0582
Gauss (Adaptive) Quadrature, four-point 0.6793 0.7102 0.0309

Berdasarkan tabel di atas, four-point Gauss (Adaptive) Quadrature memberikan nilai hampiran yang paling mendekati dibandingkan dua metode lainnya.

Fungsi R untuk Integrasi Numerik

Untuk menghitung nilai integral dengan teknik numerik dari suatu fungsi \(f\) pada interval \(a\) dan \(b\) dapat dilakukan dengan custom function berikut ini:

IntTrapezoid <- function(f, a, b, n){
  
  #' Metode Trapezoid, dengan banyaknya selang n
  
  h <- (b - a)/n
  c <- c(1, rep(2, n - 1), 1)
  x <- seq(a, b, by=h)
  
  Int <- (h/2) * sum(c * sapply(x, f))
  return(Int)
}


IntSimpson <- function(f, a, b, n){
  
  #' Metode Simpson, dengan banyaknya selang n
  
  h <- (b - a)/n
  c <- c(1, rep(c(4,2), length.out = n-1), 1)
  x <- seq(a, b, by=h)
  
  Int <- (h/3) * sum(c * sapply(x, f))
  return(Int)
}


library(gaussquad)
IntGaussQuad <- function(f, a, b, n){
  
  #' Metode Gauss (Adaptive) Quadrature, n points
  
  Lq <- legendre.quadrature.rules(max(2,n))[[n]]
  k <- ((b - a)/2)*Lq$x + ((b + a)/2)
  Int <- ((b - a)/2) * sum(Lq$w * f(k))
  return(Int)
}

Selanjutnya nilai harapan dari distribusi Kumaraswamy

\[ E(x) = \int_0^1 15x^5(1-x^5)^2 dx \] dapat dihitung dengan mengintegralkan fungsi

gx <- function(x) (15*x^5)*(1-x^5)^2

pada interval \(a=0\) dan \(b=1\).

Hasil integral dan selisih terhadap nilai exact adalah sebagai berikut:

ExNum <- c(
    `Trapezoidal, n = 4`        = IntTrapezoid(f = gx, a = 0, b = 1, n = 4),
    `Simpson, n = 4`            = IntSimpson(f = gx, a = 0, b = 1, n = 4),
    `Gauss Quadrature, 4 point` = IntGaussQuad(f = gx, a = 0, b = 1, n = 4) )

data.frame(Nilai.integral = ExNum,
           Nilai.exact    = Ex,
           Selisih        = abs(ExNum - Ex) )
Nilai.integral Nilai.exact Selisih
Trapezoidal, n = 4 0.6312869 0.7102273 0.0789404
Simpson, n = 4 0.7683974 0.7102273 0.0581701
Gauss Quadrature, 4 point 0.6792999 0.7102273 0.0309274

Perhitungan R memberikan output yang relatif sama dengan hasil perhitungan manual.

Integrasi Numerik Iteratif

Perhitungan integral di atas menggunakan nilai \(n\) yang ditentukan. Selanjutnya, nilai integral dapat dihitung hingga toleransi tertentu (misalnya 0.0001) dengan cara mencari \(n\) optimal. Hal ini dapat dilakukan secara iteratif menggunakan fungsi berikut:

IterIntegral <- function(fun.method, f, a, b, 
                         exact, tol = 1e-4, max.iter = 1e3){
  
  #' Integrasi integrasi numerik
  #'
  #' fun.method : fungsi metode integrasi numerik
  #' f : fungsi yang akan diintegralkan pada interval a dan b
  #' exact : nilai exact
  #' tol : nilai toleransi
  #' max.iter: total iterasi maksimum
  
  err <- n <- 1

  while( err > tol & n <= max.iter){
    int <- fun.method(f, a, b, n)
    err <- abs(int - exact)
    n <- n+1
  }
  
  out <- c(int = int, exact = exact, err = err, n = n)
  return(out)
  
}

Hasil integrasi numerik secara iteratif adalah sebagai berikut:

result <- data.frame(rbind(
  IterIntegral(IntTrapezoid, f = gx, a = 0, b = 1, exact = Ex),
  IterIntegral(IntSimpson,   f = gx, a = 0, b = 1, exact = Ex),
  IterIntegral(IntGaussQuad, f = gx, a = 0, b = 1, exact = Ex) ))

names(result) <- c("Nilai.integral", "Nilai.exact", "Selisih", "Iterasi")
cbind(Metode = c("Trapezoidal", "Simpson", "Gauss Quadrature"), result)
Metode Nilai.integral Nilai.exact Selisih Iterasi
Trapezoidal 0.7101278 0.7102273 9.95e-05 24
Simpson 0.7103096 0.7102273 8.23e-05 35
Gauss Quadrature 0.7101422 0.7102273 8.50e-05 7

Berdasarkan tabel di atas, ketiga metode menghasil nilai hampiran yang lebih kecil dari toleransi. Namun, metode Simpson dengan \(n = 35\) memberikan nilai hampiran yang paling mendekati nilai exact (dengan selisih 8.23e-5).

Soal 2: Distribusi Eksponensial

Diketahui PDF (probability density function) dari distribusi Eksponensial adalah sebagai berikut:

\[ f(x|\lambda) = \lambda \mathrm{\ exp}(-\lambda x), \quad \mathrm{di\ mana} \quad x \in (0,\infty) \]

Jika diketahui \(\lambda = 2\), hitunglah CDF (cumulative distribution function) dari distribusi Exponensial tersebut untuk \(x = 4\) dengan menggunakan metode Trapezoida, Simpson, Gauss Quadrature dan Monte Carlo dengan R. Metode mana yang paling baik? Silahkan tentukan nilai toleransi, \(n\) dan \(m\) sendiri!

Jawaban

Untuk mengetahui metode yang paling baik, maka hasil integrasi secara numerik perlu dibandingkan dengan nilai exact-nya.

Nilai CDF Exact

Distribusi Eksponensial mempunyai CDF

\[ F(x) = 1 - \mathrm{\ exp}(-\lambda x) \] Dengan R, CDF dapat ditulis sebagai

CDFExp <- function(lambda, x){ 1 - exp(-lambda * x) }

Sehingga, nilai exact dari CDF sebuah distribusi Eksponensial dengan \(\lambda = 2\) dan \(x = 4\) adalah

Ex <- CDFExp(lambda = 2, x = 4)
Ex
## [1] 0.9996645

CDF dengan Integrasi Numerik

Fungsi distribusi kumulatif (CDF) dapat dihitung dengan cara mengintegralkan fungsi kepekatan peluang (PDF). Distribusi Eksponensial dengan \(\lambda = 2\) mempunyai PDF

\[ f(x\ |\ \lambda = 2) = 2 \mathrm{\ exp}(-2 x) \] Ditulis dalam bentuk fungsi R

PDFExp2 <- function(x){ 2 * exp(-2 * x)}

Sehingga untuk \(x = 4\), CDF adalah hasil integral pada interval \(0 \le x \le 4\).

Fungsi IntTrapezoid(), IntSimpson() dan IntGaussQuad() akan digunakan kembali untuk menghitung nilai integral teknik numerik dengan metode Trapezoidal, Simpson dan Gauss (Adaptive) Quadrature. Demikian juga dengan fungsi IterIntegral() untuk melakukan integrasi secara iteratif.

Untuk metode Monte Carlo, dibuat fungsi baru sebagai berikut

IntMonteCarlo <- function(f, a, b, n){
  x <- runif(n, a, b)
  gx <- f(x)
  gx_mean <- mean(gx)
  theta_hat <- (b-a) * gx_mean
  return(theta_hat)
}

Hasil integrasi numerik secara iteratif menggunakan metode Trapezoidal, Simpson, Gauss (Adaptive) Quadrature dan Monte Carlo serta selisih terhadap nilai exact yang diperoleh sebelumnya ditampilkan dalam tabel berikut:

set.seed(999)
result <- data.frame(rbind(
  IterIntegral(IntTrapezoid, f = PDFExp2, a = 0, b = 4, exact = Ex),
  IterIntegral(IntSimpson,   f = PDFExp2, a = 0, b = 4, exact = Ex),
  IterIntegral(IntGaussQuad, f = PDFExp2, a = 0, b = 4, exact = Ex),
  IterIntegral(IntMonteCarlo, f = PDFExp2, a = 0, b = 4, exact = Ex)))

names(result) <- c("Nilai.integral", "Nilai.exact", "Selisih", "Iterasi")
cbind(Metode = c("Trapezoidal", "Simpson", "Gauss Quadrature", "Monte Carlo"), 
      result)
Metode Nilai.integral Nilai.exact Selisih Iterasi
Trapezoidal 0.9997644 0.9996645 9.99e-05 232
Simpson 0.9997289 0.9996645 6.44e-05 22
Gauss Quadrature 0.9995785 0.9996645 8.60e-05 6
Monte Carlo 0.9996696 0.9996645 5.10e-06 963

Berdasarkan tabel di atas, keempat metode menghasil nilai hampiran yang lebih kecil dari toleransi, dan metode Monte Carlo dengan \(m = 963\) memberikan nilai hampiran yang paling mendekati nilai exact (dengan selisih 5.1e-6). Meskipun demikian, karena metode Monte Carlo bergantung pada pengacakan pada saat membangkitkan sebaran seragam, maka hasilnya bisa berubah tergantung dari random seed yang digunakan.

Hal menarik yang dapat dilihat dari tabel di atas adalah perbandingan antara metode Trapezoidal dan Simpson. Untuk kasus ini, metode Simpson memberikan hampiran nilai yang lebih baik (6.44e-5 : 9.99e-5) dan juga jumlah selang yang lebih sedikit dibandingkan Trapezoidal (22 : 232).


  1. Mahasiswa Pascasarjana Prodi Statistika dan Sains Data, Institut Pertanian Bogor, NIM: G1501211061, Kelas Paralel 1, Email: ↩︎