Anda di halaman 1dari 7

Tugas2_20914006

Budiman Nasution
Pengantar Sains Komputasi

Problem
Buatlah program untuk menghampiri nilai integral tentu

dengan menggunakan Simulasi

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:

)) |

Secara Numerik (menggunakan program C++)


Untuk menentukan nilai hampiran digunakan program C++ yaitu:
//Tugas2 PENGANTAR SAINS KOIMPUTASI
//Menentukan nilai hampiran integral dengan Monte Carlo Simulation
//BUDIMAN NASUTION (20914006)
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
double unirand()
{
return (double) rand()/ (double) RAND_MAX;
}

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--; }
}
}

Integral = (double)N / (double)Ntot*c*(b-a);


cout<<"Hasil Integrasinya adalah = "<<Integral<<endl;
return 0;
}

Dari coding di atas, jika dirunning akan muncul tampilan:

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

Plot nilai angka random(n) dengan hasil Running-2

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 nilai angka random(n) dengan hasil Running-3

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

Plot nilai angka random(n) dengan hasil Running-4

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 nilai angka random(n) dengan hasil Running-5

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 nilai angka random(n) dengan hasil Running-6

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 nilai angka random(n) dengan hasil Running-7

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

Plot nilai angka random(n) dengan hasil Running-8

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

Plot nilai angka random(n) dengan hasil Running-9

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 nilai angka random(n) dengan hasil Running-10

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

Plot nilai angka random(n) dengan rata-rata hasil Running

Plot Rata-rata Hasil Running


0,8
0,7

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.

Anda mungkin juga menyukai