Budiman Nasution
Pengantar Sains Komputasi
Problem
Buatlah program untuk menghampiri nilai integral tentu
Monte Carlo. Lakukan 8 percobaan untuk banyak dart n = 10, 50, 100, 500, 1000, 5000, 10000, 100000.
Runlah program sebanyak 10 kali untuk setiap n dan rata-ratakan hampiran integral tentu yang diperoleh.
Kemudian plot data tersebut dan tarik kesimpulan dari simulasi ini.
Solution
Secara Analitik
( )
( )
( ))|
dimana
dan
karena
maka:
)) |
double f(double x)
{
double y = sin(x*x);
return y;
}
int main()
{
//Deklarasi dan inisialisasi
double Integral, x, y, a, b, c=0;
int N=0, Ntot, i;//N=0 artinya random mulai dari 0
a = 0;//batas bawahnya kurfa
b = 2*3.1416;//batas atasnya kurfa
cout;
cout << "MENGHITUNG NILAI HAMPIRAN INTEGRAL DENGAN MONTE CARLO SIMULATION" <<endl;
cout << "****************************************************************" <<endl<<endl;
cout << "Fungsi f(x) = sin (x^2)"<<endl;
cout << "Batas integrasi adalah x = [0, 2pi]"<<endl<<endl;
cout << "Masukkan Jumlah Angka Random(n) = "; cin >> Ntot;
srand(time(NULL)); // seed
// menentukan maximum fungsi dengan Monte-Carlo
for (i=0;i<Ntot;i++)
{
x = a + (b-a)*unirand();//a=batas atas, b=batas bawah
if (fabs(f(x)) > c) {c = fabs(f(x));}
}
// menentukan integral fungsi dengan Monte-Carlo
for (i = 0; i<Ntot; i++)
{
x = a + (b-a)*unirand();
if (f(x) > 0.)
{
y = c*unirand();
if (y <= f(x))
{ N++; }
}
else
{
y = -c*unirand();
if (y >= f(x)){ N--; }
}
}
Dari tampilan di atas kita tinggal memasukkan nilai n = 10, 50, 100, 500, 1000, 5000, 10000, dan 100000.
Sehingga dengan memasukkan nilai angka random (n), akan diperoleh data seperti pada tabel berikut:
Hasil Running ke-
Rata-rata
10
10
0,627803
1,67337
0,620559
1,87783
-2,502
-0,627746
2,50922
1,88213
-1,82478
0,4236386
50
0,125656
0,628176
1,13
0,125615
0,1256
1,50673
0,62801
1,13083
0,502437
0,376874
0,6279928
100
0,879647
1,1937
0,628317
0,251321
0,251328
1,06781
0,502492
0,062797
0,565487
0,313933
0,57168321
500
1,05557
0,678584
0,640886
0,263894
0,552921
0,364426
0,59062
0,753983
0,867078
1,20637
0,6974332
1000
0,414691
0,684869
0,867082
0,72885
0,496365
0,483806
0,917343
0,929914
0,741418
0,684869
0,6949207
5000
0,727595
0,63963
0,799223
0,588108
0,745188
0,610727
0,610727
0,608213
0,614497
0,645913
0,6589821
10000
0,674816
0,54601
0,557948
0,576169
0,60947
0,629577
0,664763
0,686125
0,657223
0,644656
0,6246757
100000
0,655024
0,657286
0,651568
0,671925
0,637431
0,644782
0,643086
0,63919
0,639378
0,618895
0,6458565
Dengan menggunakan Excel, dilakukan plot nilai angka random (n) dengan nilai data pada tabel di atas
sehingga diperoleh:
Plot nilai angka random(n) dengan hasil Running-1
Plot Running-1
1,2
Hasil Running 1
1
0,8
y = 2E-07x + 0,6422
0,6
Running-1
0,4
Linear (Running-1)
0,2
0
1
10
100
1000
n
10000
100000
Hasil Running 2
Plot Running-2
1,8
1,6
1,4
1,2
1
0,8
0,6
0,4
0,2
0
Running-2
y = -3E-06x + 0,876
10
100
1000
10000
Linear (Running-2)
100000
Plot Running-3
1,2
Hasil Running 3
1
0,8
y = -1E-06x + 0,7541
0,6
Running-3
0,4
Linear (Running-3)
0,2
0
1
10
100
1000
10000
100000
Hasil Running 4
Plot Running-4
2
1,8
1,6
1,4
1,2
1
0,8
0,6
0,4
0,2
0
Running-4
y = 3E-07x + 0,6308
10
100
1000
n
10000
100000
Linear (Running-4)
Plot Running-5
1
y = 7E-06x + 0,009
0,5
Hasil Running 5
0
-0,5
10
100
1000
10000
100000
Running-5
-1
Linear (Running-5)
-1,5
-2
-2,5
-3
Plot Running-6
2
Hasil Running 6
1,5
1
y = 8E-07x + 0,5739
0,5
Running-6
Linear (Running-6)
0
1
10
100
1000
10000
100000
-0,5
-1
Plot Running-7
3
Hasil Running 7
2,5
2
1,5
Running-7
Linear (Running-7)
y = -3E-06x + 0,9313
0,5
0
1
10
100
1000
n
10000
100000
Hasil Running 8
Plot Running-8
2
1,8
1,6
1,4
1,2
1
0,8
0,6
0,4
0,2
0
Running-8
y = -3E-06x + 0,8754
10
100
1000
10000
Linear (Running-8)
100000
Hasil Running 9
Plot Running-9
1
0,9
0,8
0,7
0,6
0,5
0,4
0,3
0,2
0,1
0
y = 9E-07x + 0,5597
Running-9
Linear (Running-9)
10
100
1000
10000
100000
Plot Running-10
1,5
Hasil Running 10
1
y = 4E-06x + 0,2745
0,5
0
-0,5
10
100
1000
100000
Running-10
Linear (Running-10)
-1
-1,5
-2
10000
y = 4E-07x + 0,6127
Rata-rata
0,6
0,5
0,4
rata-rata
0,3
Linear (rata-rata)
0,2
0,1
0
1
10
100
1000
10000
100000
Kesimpulan
Dari hasil di atas, dapat disimpulkan bahwa pada simulasi yang telah dilakukan, semakin besar nilai n
maka hasil running yang diperoleh akan semakin mendekati/menghampiri nilai dari
yang
dapat dicari secara analitik. Dengan arti lain, jika nilai n diperbesar, maka semakin teliti hasil yang akan diperoleh.