Menghitung Nilai e Menggunakan Simulasi Monte Carlo dan Parallel Computing di R
Bagi rekan-rekan yang dulu pernah mengambil mata kuliah kalkulus, pasti sudah familiar dengan satu bilangan istimewa pada matematik yang dinotasikan sebagai e. Bilangan e disebut dengan bilangan Euler yang memiliki banyak keunikan sama halnya dengan bilangan pi dan beberapa bilangan unik lainnya.
Berapa sih nilai e? Dengan R, nilai e bisa dilihat dengan cara sebagai berikut:
exp(1)
## [1] 2.718282
Bagaimana bilangan tersebut diperoleh?
Saat saya sedang browsing kemarin, saya menemukan salah satu tweet menarik yang menyatakan:
Jika kita mengambil n bilangan acak dari [0,1] sehingga jumlah n bilangan acak tersebut lebih dari 1, maka expected nilai n tersebut akan bernilai e.
Bingung dengan pernyataan di atas?
Oke, misalkan begini:
Saya membuat beberapa bilangan acak dari selang [0,1]:
Simpan nilai terkecil sehingga .
Nilai tersebut jika kita simpan, lalu kita lakukan berulang kali dan rata-ratakan, nilainya menjadi nilai e.
Menarik yah.
Mari kita coba dengan R.
Pertama-tama, kita lakukan random number generation terlebih dahulu dan buat agar berhenti saat .
# definisi random number
rand_number = c()
i = 1
while(sum(rand_number) < 1){
# kita akan generate random number [0,1]
rand_number[i] = runif(1)
i = i + 1
}
Sekarang saya akan buat function dari kondisi di atas, dan lakukan simulasi berulang kali:
trial_simulasi = function(dummy){
# definisi random number
rand_number = c()
i = 1
while(sum(rand_number) < 1){
# kita akan generate random number [0,1]
rand_number[i] = runif(1)
i = i + 1
}
# sekarang kita akan lihat butuh berapa i agar sum(rand_number) melebihi 1
length(rand_number)
}
# kita akan coba simulasi
n_simulasi = 1:16000
# kita simulasikan 16 ribu kali
library(parallel)
numcore = 8
# kita akan mulai simulasinya
hasil = mcmapply(trial_simulasi,n_simulasi,mc.cores = numcore)
# kita akan hitung nilai expected alias mean nya
mean(hasil)
Saya dapatkan hasil sebagai berikut:
- Nilai
exp(1)
dari R adalah sebesar . - Nilai rata-rata dari
hasil
adalah sebesar . - Absolute error dari simulasi saya adalah sebesar .
Lumayan akurat lah yah.
Cara ngoding-nya saya rekam dan simpan di link Youtube berikut ini ya.
if you find this article helpful, support this blog by clicking the ads.