Menghitung Nilai Integral Tentu Dengan Modifikasi Simulasi Monte Carlo
Sepertinya sudah lama saya tidak menulis lagi karena riweuh di kantor dan kuliah.
Untuk membuka kembali niat untuk menulis, saya akan bercerita tentang salah satu metode aproksimasi (hampiran) yang bisa digunakan untuk menghitung nilai integral tentu di matematika.
Sebelumnya, saya pernah menulis tentang cara menghitung nilai dengan dua cara:
- Melempar darts ala Simulasi Monte Carlo.
- Membuat pendekatan trapezoid dari fungsi seperempat lingkaran.
Nah, cara ketiga ini merupakan modifikasi atau gabungan dari keduanya.
Lho kok bisa?
Jadi saya akan gunakan prinsip Monte Carlo untuk generate random points di selang integral tentu lalu menggunakan pendekatan luas square seperti halnya trapezoid.
Sebagai contoh, saya akan menyelesaikan soal berikut:
Hitunglah:
Jika kita hendak mencari solusi analitiknya, sepertinya agak susah yah. hehe (atau saya saja yang cenderung malas)
Solusi analitik dari adalah:
Sehingga:
Oleh karena itu ada metode aproksimasi yang relatif lebih mudah dilakukan (menurut saya).
Ide dari algoritma ini adalah men-generate titik random di selang integral, kemudian dihitung luas square yang ada.
Perhatikan bahwa titik yang di-generate adalah pada sumbu (selang integral) saja. Berbeda dengan darts yang memerlukan random di sumbu dan .
Sehingga:
dihitung sebagai:
dengan
Berikut adalah flowchart-nya:
Berdasarkan flowchart di atas, berikut adalah function di R -nya:
modif_monte = function(f,x1,x2,N){
# set template terlebih dahulu
hasil = c()
# kita akan ulang proses ini 100 kali untuk N titik
for(ikang in 1:100){
# generating random number
x = runif(N,x1,x2)
# hitung f(x)
f_x = f(x)
# hitung luas
luas = (x2-x1) * f_x
mean_luas = mean(luas)
hasil[ikang] = mean_luas
}
# mean luas
output = mean(hasil)
# output
return(output)
}
Simple kan?
Oke, sebelum menyelesaikannya dengan fungsi di atas, saya akan berikan ilustrasi sebagai berikut:
Di atas adalah grafik dari . Metode ini bertujuan untuk men-generate satu random titik di antara selang (misal saya tuliskan sebagai kemudian dihitung nilai .
Contoh:
Saya akan generate satu titik sebagai berikut:
Dari titik tersebut, saya akan buat garis sehingga terbentuklah sebuah square:
Kelak kita akan menghitung luas dari square tersebut.
Semakin banyak kita generate titiknya, kita bisa menghitung rata-rata luas dari squares tersebut. Nilai rata-rata tersebut akan dijadikan hampiran integral tentu.
Berikut adalah nilai hampirannya untuk berbagai banyak titik yang di-generate:
N | Solusi Aproksimasi | Selisih dengan Nilai Eksak |
---|---|---|
10 | 11.78907 | 0.0222857 |
100 | 11.80707 | 0.0042907 |
500 | 11.81512 | 0.0037561 |
750 | 11.81119 | 0.0001678 |
1000 | 11.81079 | 0.0005681 |
5000 | 11.81043 | 0.0009298 |
7500 | 11.81094 | 0.0004159 |
10000 | 11.81127 | 0.0000927 |
25000 | 11.81206 | 0.0007033 |
50000 | 11.81161 | 0.0002520 |
100000 | 11.81105 | 0.0003059 |
250000 | 11.81138 | 0.0000242 |
500000 | 11.81129 | 0.0000719 |
750000 | 11.81142 | 0.0000590 |
Hasil Perbandingan Solusi Numerik dan Eksak
Untuk setiap banyak titik, prosesnya saya ulangi hingga 100 kali agar lebih konvergen ke hasilnya.
Terlihat bahwa nilai hampirannya sudah sangat dekat dengan nilai eksaknya.
if you find thsi article helpful, support this blog by clicking the ads.