44
BAB 4 HASIL DAN PEMBAHASAN
4.1.
Proses Analisis Perbandingan
Seperti yang telah dinyatakan dalam subbab 3.3.1, tahap pertama ini ditujukan untuk menguji ketepatan suatu metode dalam melakukan perhitungan terhadap suatu integral yang diujikan. Dalam tahap ini terdapat beberapa fungsi yang hasil perhitungannya digunakan untuk melihat apakah metode tersebut mampu menghitung persamaan integral dengan ketepatan yang memadai. Selisih dari hasil perhitungan terhadap fungsi-fungsi tersebut akan ditampilkan dalam bentuk tabel perbandingan sehingga dapat dengan mudah dilihat perbedaan antarmetode yang digunakan. 4.1.1. Fungsi Pertama
Fungsi pertama yang digunakan untuk menguji metode-metode tersebut memiliki hasil eksak sebesar 1,640533. Fungsi ini memiliki bentuk sebagai berikut: 0.8
I = ∫ 0.2 + 200 x 2 + 675 x 3 − 900 x 4 + 400 x 5 dx 0
45
Gambar 4.1 Penggambaran secara grafik dari fungsi 0.8
I = ∫ 0.2 + 200 x 2 + 675 x 3 − 900 x 4 + 400 x 5 dx 0
Berikut adalah penjelasan langkah perhitungan dari metode-metode yang diuji: 1.
Metode Gauss-Legendre
Metode kuadratur Gauss yang digunakan dalam perhitungan merupakan metode Gauss-Legendre enam titik. Kode sumber dari metode ini ditulis menggunakan C. Langkah-langkah metode tersebut adalah sebagai berikut: #include <stdio.h> #include
#include <math.h> // a dan b // n
= batas integrasi = ordo
float a, b, sum, I; int i, n = 6;
46 double x[6] = {-0.4662347571, -0.3306046932, 0.1193095930, 0.1193095930, 0.3306046932, 0.4662347571}; double c[6] = {0.0856622462, 0.1803807865, 0.2339569673, 0.2339569673, 0.1803807865, 0.0856622462}; float F (float x) { return (0.2 + (25 * x) - (200 * pow (x, 2)) + (675 * pow (x, 3)) - (900 * pow (x, 4)) + (400 * pow (x, 5)));
Baris di atas merupakan inisialisasi awal terhadap variabel-variabel yang digunakan. Variabel a dan b adalah batas integrasi, n adalah ordo dari integrasi, sum merupakan penampung untuk nilai integrasi yang lebih baik dari evaluasi terhadap fungsi yang diintegralkan, x adalah nilai dari argumen fungsi untuk Gauss-Legendre enam titik, c adalah nilai dari faktor pembobot untuk Gauss-Legendre enam titik, F dalam hal ini dan dalam perhitungan fungsi-fungsi selanjutnya digunakan sebagai tempat untuk menampung fungsi. void main () { clrscr (); printf ("Input batas atas (b): "); fflush (stdin); scanf ("%f", &b); // b = 0.8; printf ("Input batas bawah (a): "); fflush (stdin); scanf ("%f", &a); // a = 0; sum = 0; for (i = 0; i < n; i ++) { sum = sum + c[i] * F((b - a) * x[i] + (a + b) / 2); } I = (b - a) * sum; printf ("Hasil integral: %g\n", I); getch (); };
Sebagaimana dengan metode numerik lainnya, metode Gauss-Legendre didasarkan pada fungsi yang bersifat iteratif, yang dalam setiap
47 perulangannya akan menghasilkan nilai yang sama atau lebih baik. Perintah di atas melakukan perulangan sebanyak n kali (dalam kasus ini n = 6), dimulai dari n = 1. c[i] merupakan penggunaan/pemanggilan
nilai dari variabel c (faktor pembobot) ke-i. Setiap hasil perhitungan yang baru akan ditampung di variabel sum. Variabel sum merupakan nilai kumulatif dari evaluasi fungsi yang diintegralkan, yang memiliki subinterval yang simetris terhadap titik tengah interval. Variabel I merupakan variabel yang menampung nilai pendugaan integral fungsi. Hasil perhitungan yang hampir sama dengan hasil eksak dari metode Gauss-Legendre enam titik ini menunjukkan bahwa kemampuan dari metode ini memberikan nilai yang sangat baik dalam menghitung fungsi pertama. 2.
Metode Integrasi Romberg
Metode integrasi Romberg ditulis dalam bentuk kode sumber C. Langkah-langkah metode tersebut sebagai berikut: #include <stdio.h> #include <math.h> #include // // // // //
a dan b epsilon delta h n
= = = = =
batas integral toleransi spasi terkecil spasi jumlah segmen
float a, b, h, I[100], sum, epsilon, delta; int n, k, nmax, i, j, true = 1; float F (float x) // f1 { return (0.2 + (25 * x) - (200 * pow (x, 2)) + (675 * pow (x, 3)) - (900 * pow (x, 4)) + (400 * pow (x, 5)));
48 }; void main () { clrscr (); printf ("Nilai batas a (batas bawah): "); scanf ("%f", &a); fflush (stdin); printf ("Nilai batas b (batas atas): "); scanf ("%f", &b); fflush (stdin); printf ("Nilai toleransi: "); scanf ("%f", &epsilon); printf ("Nilai Delta: "); scanf ("%f", &delta); h = b - a; I[1] = h / 2 * (F (a) + F (b)); n = 1; while (true) { h = h / 2; sum = F (a); for (i = 1; i < (pow (2, n)); i ++) sum = sum + 2 * F (a + i * h); I[n + 1] = h / 2 * (sum + F (b)); if (fabs (I[n + 1] - I[n]) <= epsilon) { printf ("Toleransi tercapai untuk metode trapesium pada n = %d\n", n); printf ("Hasil integral = %f", I[n + 1]); break; }; if (h <= delta) { nmax = n; n = 1; while (n <= nmax && true) { for (k = 1, j = n; j > 1; k++, j--) { I[j] = (pow (4, k) * I[j + 1] - I[j]) / (pow(4, k) - 1); if (abs (I[j] - I[j - 1]) <= epsilon) { printf ("Hasil integral = %f", I[j]); true = 0; break; }; }; n = n + 1; }; delta = delta /2; } else n = n + 1; }; getch (); };
float F menampung fungsi integral pertama di mana fungsi float F.
Pertama-tama, program akan meminta data untuk perhitungan berupa nilai dari batas bawah (a), batas atas (b), nilai toleransi (epsilon), dan nilai delta yang merupakan nilai spasi terkecil di mana bila nilai h
49 lebih kecil dari delta maka akan dilakukan perhitungan untuk memperoleh pendugaan integral yang lebih baik. Nilai h merupakan selisih antara batas atas dan batas bawah. I[1] adalah pendugaan integral pertama. Nilai integral akan dihitung dengan metode trapesium untuk h = h0, h0/2, dst., selama h > delta. Bila nilai dari fabs (I[n + 1] - I[n]) <= epsilon maka program akan
berhenti dan menampilkan hasil perhitungan pendugaan integral. Jika tidak dan nilai h < delta, maka lakukan perhitungan dengan rumus ekstrapolasi Richardson. Bila nilai abs (I[j] - I[j - 1]) <= epsilon, program akan dihentikan dan hasil perhitungan akan
ditampilkan. Perhitungan dengan metode trapesium akan terus dilakukan selama h > delta. Perhitungan ini bertujuan untuk menghasilkan penduga integral yang baru, yang bernilai lebih baik dari integral sebelumnya. Bila ternyata selisih antara integral yang baru dengan yang lama bernilai lebih kecil dari kriteria error yang sudah ditentukan sebelumnya, maka perhitungan akan dihentikan. Dalam kasus ini, hasil yang diperoleh melalui perhitungan berdasarkan nilai a = 0, b = 0.8, epsilon = 0.0000001, dan delta = 0.001 adalah 1.639467. 3.
Metode Simulasi Monte Carlo
Metode simulasi Monte Carlo melakukan pendugaan integral dengan menggunakan bilangan pseudo-random berdistribusi seragam dengan jalan mencari rata-rata dari fungsi yang diintegralkan dan dikalikan
50 dengan selisih interval dari integral tersebut. Langkah-langkah metode simulasi ini adalah sebagai berikut: source ("d:/temp/f1.r") curve(f, from = 0, to = 0.8) f set.seed (10000) mc <- runif (10000, min = 0, max = 0.8) mc
Fungsi set.seed (10000) merupakan perintah untuk menentukan bagaimana penghasil bilangan acak harus diinisialisasi (seeded). Hal ini untuk mencegah terjadinya perubahan terus menerus setiap kali script dijalankan. Perubahan yang terus menerus dapat menyebabkan tidak adanya nilai akhir yang tetap. Sedangkan perintah runif (10000, min = 0, max = 0.8) berguna untuk menghasilkan bilangan acak
berdistribusi seragam (uniform) sebanyak 10000 dengan batas distribusi mulai dari 0 hingga 0.8. Hasil dari operasi tersebut akan ditampung ke dalam variabel mc. Algoritma yang digunakan untuk menghasilkan bilangan pseudo-random pada R Language secara default adalah algoritma Mersenne-Twister. Algoritma ini diciptakan oleh Matsumoto and Nishimura pada tahun 1998 yang lebih dikenal dengan nama algoritma mt19937 dengan periode 2^19937-1 (yang merupakan bilangan prima) dan equidistribution-nya berada dalam 623 dimensi berturut-turut. intmc = 0.8 * mean (f (mc)) intmc
Hasil pengintegrasian dengan menggunakan metode Monte Carlo diperoleh dengan cara melakukan menghitung rata-rata (mean) dari
51 N
∑ f (x ) dikalikan dengan selisih batas interval/integrasinya (a i =1
0.8
i
- b =
– 0 = 0.8). Perhitungan tersebut menghasilkan nilai akhir
pendugaan integrasi sebesar 1,652151. 4.
Metode Simulasi Quasi-Monte Carlo
Metode simulasi quasi-Monte Carlo memiliki cara yang sama dengan metode Monte Carlo, namun metode quasi-Monte Carlo menggunakan bilangan quasi-random yang dihasilkan dari barisan low-discrepancy.. Langkah-langkah metode tersebut sebagai berikut: > require (fOptions) Loading required package: fOptions Loading required package: fBasics Rmetrics, (C) 1999-2005, Diethelm Wuertz, GPL fBasics: Markets and Basic Statistics Loading required package: fCalendar Rmetrics, (C) 1999-2005, Diethelm Wuertz, GPL fCalendar: Time, Date and Calendar Tools Loading required package: fSeries Rmetrics, (C) 1999-2005, Diethelm Wuertz, GPL fSeries: The Dynamical Process Behind Financial Markets Rmetrics, (C) 1999-2004, Diethelm Wuertz, GPL fOptions: Valuation of Options [1] TRUE
Perintah di atas merupakan perintah untuk melakukan loading terhadap paket fOptions yang memiliki fungsi-fungsi yang dibutuhkan. Nilai TRUE menandakan paket tersedia dan siap digunakan. > source ("d:/temp/f1.r") > curve(f, from = 0, to = 0.8) > > f
52 function (x) { 0.2 + (25 * x) - (200 * (x ^ 2)) + (675 * (x ^ 3)) - (900 * (x ^ 4)) + (400 * (x ^ 5)) } > > qmc <- c(runif.sobol (10000,1))
Seperti halnya metode Monte Carlo, metode simulasi quasi-Monte Carlo juga memerlukan bilangan acak guna melakukan pendugaan terhadap fungsi integral. Tetapi quasi-Monte Carlo tidak menggunakan bilangan pseudo-random, melainkan bilangan quasi-random. Perintah qmc
(10000,1))
merupakan
operasi
yang
menghasilkan bilangan quasi-random menggunakan barisan Sobol sejumlah 10000 dengan dimensi 1 (dimensi integral) dan bilangan yang dihasilkan akan ditampung pada variabel qmc. > for (i in 1:10000) + {sum = sum + f (qmc[i]) + } > sum [1] 14501.18 > > intqmc = 0.8 * sum / 10000 > intqmc [1] 1.160095
Metode simulasi quasi-Monte Carlo menghasilkan nilai pendugaan integral sebesar 1.160095. Hal ini memperlihatkan bahwa metode ini memiliki kelemahan terhadap fungsi yang membentuk garis yang bergelombang (smooth). Hasil perhitungan integral dari fungsi pertama yang dilakukan oleh metode Gauss-Legendre, metode integrasi Romberg, metode simulasi Monte Carlo, dan metode simulasi quasi-Monte Carlo dapat dilihat pada tabel 4.1.
53 Tabel 4.1 Tabel perbandingan hasil perhitungan integral fungsi pertama
Gauss-Legendre
Romberg Monte Carlo Quasi-Monte Carlo
Hasil
1,64053
1,639467
1,652151
1,160095
|Selisih|
0,000003
0,001066
0,011618
0,480438
Tabel 4.1
memperlihatkan bahwa metode Gauss-Legendre sanggup
memberikan hasil yang sangat baik dengan error sangat kecil, sedangkan metode quasi-Monte Carlo gagal memberikan hasil yang memadai. Hal ini dikarenakan bentuk integral yang bergelombang seperti yang terlihat pada gambar 4.1. Hal ini memperlihatkan bahwa metode Gauss-Legendre unggul terhadap fungsi-fungsi yang dapat dengan mudah diintegralkan secara analitik. Namun dengan catatan bahwa fungsi tersebut tidak membentuk grafik yang curam ataupun batas integralnya tidak bernilai sama berlawanan, misal: -3 dan 3. Hal ini dikarenakan kelemahan dalam rumus Gauss-Legendre yang melibatkan penambahan antarbatas integral (a + b) yang dapat mengakibatkan nilai 0 sehingga menyebabkan penyimpangan hasil perhitungan integral secara keseluruhan. 4.1.2. Fungsi Kedua
Fungsi kedua yang digunakan untuk menguji metode-metode tersebut memiliki hasil eksak sebesar 0,602298. Fungsi ini memiliki bentuk sebagai berikut:
54
(
1
)
I = ∫ x 0.1 (1.2 − x ) 1 − e 20 ( x −1) dx 0
Gambar 4.2 Penggambaran secara grafik dari fungsi 1
(
)
I = ∫ x 0.1 (1.2 − x ) 1 − e 20 ( x −1) dx 0
Berikut adalah proses perhitungan dari setiap metode yang diujikan terhadap fungsi kedua: 1.
Metode Gauss-Legendre
Langkah-langkah proses perhitungan dengan metode Gauss-Legendre dalam program C adalah sebagai berikut: #include <stdio.h> #include #include <math.h> // a dan b // n
= batas integrasi = ordo
float a, b, sum, I; int i, n = 6; double x[6] = {-0.4662347571, -0.3306046932, 0.1193095930, 0.1193095930, 0.3306046932, 0.4662347571};
55 double c[6] = {0.0856622462, 0.1803807865, 0.2339569673, 0.2339569673, 0.1803807865, 0.0856622462}; float F (float x) { return (1.2 - x) * (1 - (exp (20 * (x - 1)) )) * pow (x, 0.1); };
Variabel x akan menampung nilai dari faktor pembobot untuk Gauss kuadratur enam titik dan variabel c akan menampung nilai argumen fungsi untuk rumus Gauss kuadratur enam titik. Fungsi F menampung persamaan integral yang akan dihitung. void main () { clrscr (); printf (stdin); scanf printf (stdin); scanf
("Input batas atas (b): "); fflush ("%f", &b); // b = 0.8; ("Input batas bawah (a): "); fflush ("%f", &a); // a = 0;
sum = 0; for (i = 0; i < n; i ++) { sum = sum + c[i] * F((b - a) * x[i] + (a + b) / 2); } I = (b - a) * sum; printf ("Hasil integral: %g\n", I); getch (); };
Perhitungan dengan menggunakan metode Gauss-Legendre terhadap 1
fungsi
(
)
I = ∫ x 0.1 (1.2 − x ) 1 − e 20 ( x −1) dx
menghasilkan
nilai
sebesar
0
0.603317. 2.
Metode Integrasi Romberg
Perhitungan dengan menggunakan metode Romberg adalah sebagai
56 berikut: #include <stdio.h> #include <math.h> #include // // // // //
a dan b epsilon delta h n
= = = = =
batas integral toleransi spasi terkecil spasi jumlah segmen
float a, b, h, I[100], sum, epsilon, delta; int n, k, nmax, i, j, true = 1; float F (float x) // f2 { return (pow(x, 0.1) * (1.2 - x) * (1 - exp (20 * (x - 1)))); }; void main () { clrscr (); printf ("Nilai batas a (batas bawah): "); scanf ("%f", &a); fflush (stdin); printf ("Nilai batas b (batas atas): "); scanf ("%f", &b); fflush (stdin); printf ("Nilai toleransi: "); scanf ("%f", &epsilon); printf ("Nilai Delta: "); scanf ("%f", &delta); h = b - a; I[1] = h / 2 * (F (a) + F (b)); n = 1; while (true) { h = h / 2; sum = F (a); for (i = 1; i < (pow (2, n)); i ++) sum = sum + 2 * F (a + i * h); I[n + 1] = h / 2 * (sum + F (b)); if (fabs (I[n + 1] - I[n]) <= epsilon) { printf ("Toleransi tercapai untuk metode trapesium pada n = %d\n", n); printf ("Hasil integral = %f", I[n + 1]); break; }; if (h <= delta) { nmax = n; n = 1; while (n <= nmax && true) { for (k = 1, j = n; j > 1; k++, j--) { I[j] = (pow (4, k) * I[j + 1] - I[j]) / (pow(4, k) - 1); if (abs (I[j] - I[j - 1]) <= epsilon) { printf ("Hasil integral
57 = %f", I[j]); true = 0; break; }; }; n = n + 1; }; delta = delta /2; } else n = n + 1; }; getch (); };
Perhitungan dengan menggunakan metode Romberg dengan nilai a = 0, b = 1, epsilon = 0.0000001, dan delta = 0.001
adalah 0.608207. 3.
Metode Simulasi Monte Carlo
Langkah-langkah metode simulasi dalam menghitung integral dari fungsi kedua adalah sebagai berikut: > source ("d:/temp/f2.r") > curve(f, from = 0, to = 1) > > f function (x) { (1.2 - x) * (1 - (exp (20 * (x - 1)) )) * (x ^ 0.1) } > > set.seed (10000) > > mc <- runif (10000, min = 0, max = 1) > > > intmc = 1 * mean (f (mc)) > intmc [1] 0.5993612
Perhitungan tersebut menghasilkan nilai akhir pendugaan integrasi sebesar 0.5993612. 4.
Metode Simulasi Quasi-Monte Carlo
Langkah-langkah
metode
quasi-Monte
Carlo
dalam
melakukan
58 pendugaan terhadap fungsi I = ∫ x 0.1 (1.2 − x )(1 − e 20( x −1) ) dx adalah sebagai 1
0
berikut: > require (fOptions) Loading required package: fOptions Loading required package: fBasics Rmetrics, (C) 1999-2005, Diethelm Wuertz, GPL fBasics: Markets and Basic Statistics Loading required package: fCalendar Rmetrics, (C) 1999-2005, Diethelm Wuertz, GPL fCalendar: Time, Date and Calendar Tools Loading required package: fSeries Rmetrics, (C) 1999-2005, Diethelm Wuertz, GPL fSeries: The Dynamical Process Behind Financial Markets Rmetrics, (C) 1999-2004, Diethelm Wuertz, GPL fOptions: Valuation of Options [1] TRUE > > source ("d:/temp/f2.r") > curve(f, from = 0, to = 1) > > intqmc=0; qmc=0; sum=0 > > f function (x) { (1.2 - x) * (1 - (exp (20 * (x - 1)) )) * (x ^ 0.1) } > > qmc <- c(runif.sobol (10000,1)) > > for (i in 1:10000) + {sum = sum + f (qmc[i]) + } > sum [1] 6023.791 > > intqmc = 1 * sum / 10000 > intqmc [1] 0.6023791
Metode simulasi quasi-Monte Carlo menghasilkan nilai pendugaan integral sebesar 0.6023791.
59 Hasil perhitungan integral dari fungsi kedua yang dilakukan oleh metode Gauss-Legendre, metode integrasi Romberg, metode simulasi Monte Carlo, dan metode simulasi quasi-Monte Carlo dapat dilihat pada tabel 4.2. Tabel 4.2 Tabel perbandingan hasil perhitungan integral fungsi kedua
Gauss-Legendre
Romberg
Hasil
0,608207
0,603317
0,5993612
0,6023791
|Selisih|
0,00591
0,0010200
0,0029358
0,0000821
Tabel 4.2 memperlihatkan
Monte Carlo Quasi-Monte Carlo
bahwa Gauss-Legendre mencetak hasil terburuk
di antara semua metode yang diujikan terhadap fungsi kedua ini. Hasil ini berlawanan dengan hasil perhitungan pada fungsi pertama di mana GaussLegendre menciptakan hasil yang sangat baik. Hal ini dikarenakan fungsi yang diintegrasikan membentuk grafik yang tajam pada sisi sebelah kiri. Rumus kuadratur akan memberikan hasil yang sesuai bila sebuah fungsi memiliki sifat hampir vertikal di mana garis singgungnya hampir sejajar ⎛⎜ df = ~ ⎞⎟ dengan ⎝ dx ⎠ sumbu y. Sedangkan metode simulasi Monte Carlo mampu menunjukkan superioritasnya terhadap metode lainnya dengan error yang sangat kecil, bahkan dibandingkan metode dengan error terkecil kedua sekalipun (0,0000821 << 0,0010202). 4.1.3. Fungsi Ketiga
Fungsi ketiga memiliki nilai eksak sebesar 0.34134445. Fungsi tersebut
60 memiliki bentuk sebagai berikut: 1
I =∫ 0
1 −u 2 2 e du , 2π
dengan π = 3,14
1
Gambar 4.3 Penggambaran secara grafik dari fungsi I =
∫ 0
1 −u 2 2 e du 2π
Berikut adalah proses perhitungan dari setiap metode yang diujikan terhadap fungsi ketiga: 1.
Metode Gauss-Legendre
Langkah-langkah metode perhitungan Gauss-Legendre enam titik adalah sebagai berikut: #include <stdio.h> #include #include <math.h> // a dan b
= batas integrasi
61 // n
= ordo
float a, b, sum, I; int i, n = 6; double x[6] = {-0.4662347571, -0.3306046932, 0.1193095930, 0.1193095930, 0.3306046932, 0.4662347571}; double c[6] = {0.0856622462, 0.1803807865, 0.2339569673, 0.2339569673, 0.1803807865, 0.0856622462}; float F (float x) { return ((1/sqrt(2 * 3.14)) * (exp (pow (x, 2) / 2 * -1))); } void main () { clrscr (); printf ("Input (stdin); scanf ("%f", &b); printf ("Input (stdin); scanf ("%f", &a);
batas atas (b): // b = 0.8; batas bawah (a): // a = 0;
");
fflush
");
fflush
sum = 0; for (i = 0; i < n; i ++) { sum = sum + c[i] * F((b - a) * x[i] + (a + b) / 2); } I = (b - a) * sum; printf ("Hasil integral: %g\n", I); getch (); };
Nilai akhir dari metode Gauss-Legendre enam titik terhadap fungsi ketiga adalah 0.341431. 2.
Metode Integrasi Romberg
Perhitungan dengan menggunakan metode Romberg adalah sebagai berikut: #include <stdio.h> #include <math.h> #include
62 // // // // //
a dan b epsilon delta h n
= = = = =
batas integral toleransi spasi terkecil spasi jumlah segmen
float a, b, h, I[100], sum, epsilon, delta; int n, k, nmax, i, j, true = 1; float F (float x) // f3 { return (1/sqrt(2 * 3.14)) 2)/2))); };
*
(exp
(-(pow(x,
void main () { clrscr (); printf ("Nilai batas a (batas bawah): "); scanf ("%f", &a); fflush (stdin); printf ("Nilai batas b (batas atas): "); scanf ("%f", &b); fflush (stdin); printf ("Nilai toleransi: "); scanf ("%f", &epsilon); printf ("Nilai Delta: "); scanf ("%f", &delta); h = b - a; I[1] = h / 2 * (F (a) + F (b)); n = 1; while (true) { h = h / 2; sum = F (a); for (i = 1; i < (pow (2, n)); i ++) sum = sum + 2 * F (a + i * h); I[n + 1] = h / 2 * (sum + F (b)); if (fabs (I[n + 1] - I[n]) <= epsilon) { printf ("Toleransi tercapai untuk metode trapesium pada n = %d\n", n); printf ("Hasil integral = %f", I[n + 1]); break; }; if (h <= delta) { nmax = n; n = 1; while (n <= nmax && true) { for (k = 1, j = n; j > 1; k++, j--) { I[j] = (pow (4, k) * I[j + 1] - I[j]) / (pow(4, k) - 1); if (abs (I[j] - I[j - 1]) <= epsilon) { printf ("Hasil integral = %f", I[j]); true = 0; break; }; }; n = n + 1; }; delta = delta /2; } else n = n + 1; }; getch ();
63 };
Perhitungan dengan menggunakan metode Romberg dengan nilai a = 0, b = 1, epsilon = 0.0000001, dan delta = 0.001 adalah 0.341431. 3.
Metode Simulasi Monte Carlo
Langkah-langkah metode simulasi dalam menghitung integral dari fungsi kedua adalah sebagai berikut: > source ("d:/temp/f3.r") > curve(f, from = 0, to = 1) > > f function (x) { (1/sqrt(2 * 3.14)) * (exp ((-x ^ 2)/2)) } > > set.seed (10000) > > mc <- runif (10000, min = 0, max = 1) > > intmc = 1 * mean (f (mc)) > intmc [1] 0.3407052
Perhitungan simulasi dari metode Monte Carlo menghasilkan nilai akhir pendugaan integrasi sebesar 0.3407052. 4.
Metode Simulasi Quasi-Monte Carlo
Langkah-langkah
metode
quasi-Monte
Carlo
dalam
melakukan
pendugaan terhadap fungsi ketiga adalah sebagai berikut: > require (fOptions) Loading required package: fOptions Loading required package: fBasics Rmetrics, (C) 1999-2005, Diethelm Wuertz, GPL
64 fBasics: Markets and Basic Statistics Loading required package: fCalendar Rmetrics, (C) 1999-2005, Diethelm Wuertz, GPL fCalendar: Time, Date and Calendar Tools Loading required package: fSeries Rmetrics, (C) 1999-2005, Diethelm Wuertz, GPL fSeries: The Dynamical Process Behind Financial Markets Rmetrics, (C) 1999-2004, Diethelm Wuertz, GPL fOptions: Valuation of Options [1] TRUE > > source ("d:/temp/f2.r") > curve(f, from = 0, to = 1) > > intqmc=0; qmc=0; sum=0 > > f function (x) { (1.2 - x) * (1 - (exp (20 * (x - 1)) )) * (x ^ 0.1) } > > qmc <- c(runif.sobol (10000,1)) > > for (i in 1:10000) + {sum = sum + f (qmc[i]) + } > sum [1] 6023.791 > > intqmc = 1 * sum / 10000 > intqmc [1] 0.6023791
Metode simulasi quasi-Monte Carlo menghasilkan nilai pendugaan integral sebesar 0.6023791. Hasil perhitungan integral dari fungsi ketiga yang dilakukan oleh metode Gauss-Legendre, metode integrasi Romberg, metode simulasi Monte Carlo, dan metode simulasi quasi-Monte Carlo dapat dilihat pada tabel 4.3.
65 Tabel 4.3 Tabel perbandingan hasil perhitungan integral fungsi ketiga
Gauss-Legendre
Romberg
Hasil
0.341431
0.341431
0.3407052
0.3414424
|Selisih|
0,00008655
0,00008655
0,00063925
0,00009795
Tabel 4.3
Monte Carlo Quasi-Monte Carlo
memperlihatkan bahwa sekali lagi metode quasi-Monte Carlo
mampu menghasilkan perhitungan integral dengan error yang sangat kecil. Hal ini dikarenakan bentuk grafik dari fungsi tersebut adalah halus (smooth). Semakin halus bentuk grafik dari suatu integral, maka semakin tinggi kecermatan dari metode quasi-Monte Carlo. Sedangkan metode simulasi Monte Carlo menghasilkan nilai terburuk dari seluruh metode yang melakukan perhitungan 1
integral dari fungsi I = ∫ 0
1 −u 2 2 e du . Hal ini memperlihatkan bahwa semakin 2π
rumit sebuah persamaan fungsi yang akan diintegralkan, maka semakin lemah pendekatan yang dilakukan oleh metode Monte Carlo. Hal ini dapat disebabkan karena metode ini menggunakan bilangan pseudo-random yang dianggap berdistribusi seragam namun tidak sepenuhnya demikian sehingga menghasilkan perhitungan yang relatif lebih tidak akurat dibandingkan dengan metode pembanding yang lain. 4.2.
Perangkat Pendukung Analisis
Berikut ini adalah beberapa perangkat pendukung yang digunakan dalam analisis perbandingan antara pendekatan metode numerik menggunakan integrasi Romberg dan Gauss-Legendre serta metode simulasi Monte Carlo dan quasi-Monte Carlo dalam
66 perhitungan persamaan integral tertentu. Perangkat pendukung ini terdiri dari perangkat keras (hardware) dan perangkat lunak (software). 4.2.1. Perangkat Keras
Perangkat keras yang digunakan penulis dalam analisis perbandingan antara pendekatan metode numerik menggunakan integrasi Romberg dan GaussLegendre serta metode simulasi Monte Carlo dan quasi-Monte Carlo dalam perhitungan integral tertentu adalah: 1.
Prosesor 1,8 GHz.
2.
Memori 1024 MB (512 MB x 2).
3.
Harddisk 160 GB.
4.
Resolusi monitor 1024*768 (XGA).
5.
Keyboard dan mouse.
4.2.2. Perangkat Lunak
Perangkat keras yang digunakan penulis dalam analisis perbandingan antara pendekatan metode numerik menggunakan integrasi Romberg dan kuadratur Gauss serta metode simulasi Monte Carlo dan quasi-Monte Carlo dalam perhitungan integral tertentu adalah: 1.
Microsoft Windows XP Professional Edition Service Pack 2 Final.
2.
R Language 2.3.1.
3.
Borland C++ 3.1.