sas.lantip.info

Definit Integral Metode Monte Carlo

by salman

Hari ini mendapat email dari seorang mahasiswa, begini bunyinya:

Bapak salaman sya mau bertanya. ini saya attach. sebelumnya terimaksih banyak ya bapak

Dan isi file attachment dalam format “doc” adalah:

bapak, saya mau menanya bagaimana skrip untuk perhitungan metode monte carlo dengan cara membangkitkan bilangan acak.

Dalam integral monte carlo ada rumus begini :

Dengan N = banyaknya data yang dibangkitkan.

Algoritmanya begini mas :
1. bangkitkan data dalam interval a sampai b
2. masukkan nilainya ke dalam fungsi g(x) lalu jumlahkan nilainya
3. hitung rata-rata lalu kalikan dengan (b-a) sebagai taksiran nilai integral yang dicari.

Misal ada soal begini :

bagaimana cara menyelesaikan dengan script python dengan integral monte carlo….? mohon saya diberi contoh skripnya ya bapak

Sebelumnya saya ucapkan terimakasih banyak atas kebaikan bapak

Entah iseng atau kurang kerjaan, saya jawab pertanyaan ini. Berikut jawaban saya:

Berikut ini skrip yang dimaksud. Saya buat secara cepat dengan menggali ingatan hampir 14 tahun yang lalu. Tidak ada upaya optimasi apapun, hanya menerjemakan algoritma “monte carlo” yang berbasis bilangan acak. Dan perlu diingat bilangan acak ini, karena dibuat oleh komputer sifatnyat tidak benar-benar acak. Sering disebut “quasi random”.

#!/usr/bin/python
from math import *
from random import *

# ubah fungsi ini.
def equation(x):
        return x*x

def genrand(a,b,n):
        step = (b-a)/n
        pairs = []
        l = a
        while (l<n):
                x = uniform(a,b)
                pairs.append([x, equation(x)])
                l = l + step
        return pairs

def calculate(a,b,n):
        pairs = genrand(a,b,n)
        points = len(pairs)
        y = 0
        for x in pairs:
                y = y + x[1]
        avg = y/points
        bmina = b - a
        return bmina*avg

a = 2.0
b = 8.0
n = 1000
print ""
print "a = %s, b = %s, n= %s" % (a,b,n)
print "Definit integral: %s" % calculate(a, b, n)
print 40*"-"
print "notes: change equation() definition"
print ""

Gunakan dengan bijak dan tidak ada pernyataan apapun. Resiko apapun ditanggung pengguna. *LOL*