Tugas/Ujian Sains Komputasi: Algoritma dan Perancangan Software - Tugas III
TASK 1
Soal
Buatlah algoritma sederhana dengan metode Monte Carlo untuk mencari solusi dari integral berikut:
Bandingkan nilainya jika integralnya dipecah menjadi dua sebagai berikut:
Bandingkan dengan solusi analitiknya!
Jawab
Berikut adalah langkah kerja yang dilakukan untuk menjawab soal ini:
Kelak akan kita bandingkan metode numerik dengan hasil eksaknya.
Analitik
Perhatikan bahwa pada integral tentu berlaku:
Oleh karena itu, jika kita memiliki , maka dari soal:
Numerik
Brute Force
Analogi dari metode numerik ini adalah seperti melempar darts. Luas area di bawah kurva bisa didefinisikan sebagai:
Berikut adalah flowchart-nya:
Hal terpenting dalam metode ini adalah mendefinisikan batas titik untuk di-random. Kenapa?
Kita tidak ingin darts yang kita lempar jatuh ke area sembarang! Kita harus definisikan di mana area bermain darts.
Perhatikan grafik berikut:
Untuk sumbu , batas titik yang akan di-random sudah jelas, yakni: .
Lantas bagaimana dengan sumbu ?
Kita akan membuat sejumlah random di dalam area kotak merah dari grafik di atas. Kelak luas akan dihitung dari rasio titik di dalam area on target dengan total semua titik yang ada dikalikan dengan luas dari kotak merah.
Berikut adalah algoritmanya dalam R:
set.seed(2021)
brute_force = function(f,x1,x2,y1,y2,N){
# generating random number
x = runif(N,x1,x2)
y = runif(N,y1,y2)
# pengecekan y <= f(x)
rekap =
data.frame(x,y) %>%
mutate(f_x = f(x),
on_target = ifelse(y <= f_x,1,0))
# hitung rasio on target vs all dots
rasio = sum(rekap$on_target) / N
# hitung luas
luas = (x2-x1)*(y2-y1)*rasio
# perbandingan dengan eksak
eksak = ((5^3)/3) - 1/3
delta = abs(eksak - luas)
# output plot
plot_sim =
plot +
geom_point(data = rekap,aes(x,y,color = on_target)) +
theme(legend.position = "none") +
labs(title = paste0("Hasil Simulasi dengan ",N," titik"),
subtitle = paste0("Didapat nilai rasio sebesar ",rasio))
# output
output = list(
"Plot Brute Force" = plot_sim,
"Luas area di bawah kurva" = luas,
"Absolute selisih dg solusi eksak" = delta
)
return(output)
}
Saya menghitung error atau selisih solusi numerik dengan solusi eksak dengan cara:
![\Delta = |eksak - numerik|](https://latex.codecogs.com/svg.latex?%5CDelta%20%3D%20%7Ceksak%20-%20numerik%7C “\Delta = | eksak - numerik | ”) |
Dari function di atas, kita akan coba hitung dengan berbagai nilai sebagai berikut:
brute_force(f,x1 = 1,x2 = 5,y1 = 0,y2 = 25,N = 10)
$`Plot Brute Force`
$`Luas area di bawah kurva`
[1] 40
$`Absolute selisih dg solusi eksak`
[1] 1.333333
brute_force(f,x1 = 1,x2 = 5,y1 = 0,y2 = 25,N = 50)
$`Plot Brute Force`
$`Luas area di bawah kurva`
[1] 54
$`Absolute selisih dg solusi eksak`
[1] 12.66667
brute_force(f,x1 = 1,x2 = 5,y1 = 0,y2 = 25,N = 1000)
$`Plot Brute Force`
$`Luas area di bawah kurva`
[1] 41.6
$`Absolute selisih dg solusi eksak`
[1] 0.2666667
brute_force(f,x1 = 1,x2 = 5,y1 = 0,y2 = 25,N = 50000)
$`Plot Brute Force`
$`Luas area di bawah kurva`
[1] 41.398
$`Absolute selisih dg solusi eksak`
[1] 0.06466667
Bagaimana jika selang integralnya dipisah menjadi:_
Menggunakan prinsip yang sama seperti bagian sebelumnya, saya akan buat tabel perbandingan sebagai berikut:
N | Selang 1-5 | Selang 1-3 + 3-5 | Delta 1-5 | Delta 1-3 + 3-5 |
---|---|---|---|---|
10 | 50.00000 | 55.00000 | 8.6666667 | 13.6666667 |
100 | 38.00000 | 35.00000 | 3.3333333 | 6.3333333 |
500 | 43.60000 | 41.70000 | 2.2666667 | 0.3666667 |
750 | 44.53333 | 41.20000 | 3.2000000 | 0.1333333 |
1000 | 42.90000 | 41.40000 | 1.5666667 | 0.0666667 |
5000 | 42.14000 | 41.19000 | 0.8066667 | 0.1433333 |
7500 | 41.73333 | 41.33333 | 0.4000000 | 0.0000000 |
10000 | 41.18000 | 41.82500 | 0.1533333 | 0.4916667 |
25000 | 40.59200 | 41.55800 | 0.7413333 | 0.2246667 |
50000 | 40.89600 | 41.21400 | 0.4373333 | 0.1193333 |
100000 | 41.28000 | 41.25150 | 0.0533333 | 0.0818333 |
250000 | 41.44920 | 41.22820 | 0.1158667 | 0.1051333 |
500000 | 41.37380 | 41.34020 | 0.0404667 | 0.0068667 |
750000 | 41.33627 | 41.33840 | 0.0029333 | 0.0050667 |
Hasil Perbandingan Solusi Numerik dan Eksak
Konklusi Sementara
Secara intuitif, kita bisa melihat bahwa saat selang dibagi menjadi dua, sejatinya kita telah membuat titik lebih banyak dibanding menggunakan selang awal.
Modifikasi Monte Carlo
Ide dari algoritma ini adalah men-generate titik random di selang integral, kemudian dihitung luas square yang ada.
dihitung sebagai:
dengan
Berikut adalah flowchart-nya:
Berdasarkan flowchart di atas, berikut adalah function di R -nya:
modif_monte = function(f,x1,x2,N){
# generating random number
x = runif(N,x1,x2)
# hitung f(x)
f_x = f(x)
# hitung luas
luas = (x2-x1) * f_x
# mean luas
mean_luas = mean(luas)
# output
return(mean_luas)
}
Saya menghitung error atau selisih solusi numerik dengan solusi eksak dengan cara:
![\Delta = |eksak - numerik|](https://latex.codecogs.com/svg.latex?%5CDelta%20%3D%20%7Ceksak%20-%20numerik%7C “\Delta = | eksak - numerik | ”) |
Dari function di atas, kita akan coba hitung dengan berbagai nilai sebagai berikut:
N | Selang 1-5 | Selang 1-3 + 3-5 | Delta 1-5 | Delta 1-3 + 3-5 |
---|---|---|---|---|
1600 | 41.81926 | 41.68512 | 0.4859241 | 0.3517865 |
28100 | 41.48867 | 41.41292 | 0.1553348 | 0.0795848 |
29200 | 41.64061 | 41.38310 | 0.3072806 | 0.0497682 |
41400 | 41.32692 | 41.33135 | 0.0064157 | 0.0019800 |
56500 | 41.25840 | 41.31553 | 0.0749363 | 0.0178029 |
65500 | 41.37319 | 41.35093 | 0.0398559 | 0.0175950 |
69400 | 41.42950 | 41.33001 | 0.0961617 | 0.0033213 |
83600 | 41.38672 | 41.30822 | 0.0533898 | 0.0251127 |
84100 | 41.23927 | 41.36426 | 0.0940609 | 0.0309302 |
89100 | 41.25233 | 41.30688 | 0.0810023 | 0.0264573 |
90400 | 41.33610 | 41.29055 | 0.0027676 | 0.0427851 |
109000 | 41.44435 | 41.33247 | 0.1110215 | 0.0008681 |
112600 | 41.41836 | 41.30473 | 0.0850310 | 0.0286035 |
113600 | 41.28286 | 41.35909 | 0.0504742 | 0.0257552 |
141800 | 41.30924 | 41.32624 | 0.0240932 | 0.0070897 |
145200 | 41.33033 | 41.32992 | 0.0029987 | 0.0034161 |
156500 | 41.30460 | 41.29008 | 0.0287327 | 0.0432545 |
164100 | 41.34728 | 41.29394 | 0.0139501 | 0.0393940 |
178000 | 41.17209 | 41.35439 | 0.1612409 | 0.0210549 |
187700 | 41.19791 | 41.32701 | 0.1354196 | 0.0063240 |
222100 | 41.30986 | 41.36459 | 0.0234739 | 0.0312604 |
225700 | 41.33723 | 41.35290 | 0.0038949 | 0.0195692 |
248400 | 41.31981 | 41.32669 | 0.0135230 | 0.0066471 |
254600 | 41.24452 | 41.36102 | 0.0888116 | 0.0276870 |
254700 | 41.39484 | 41.29624 | 0.0615084 | 0.0370975 |
259600 | 41.39621 | 41.34907 | 0.0628816 | 0.0157412 |
261200 | 41.33808 | 41.34389 | 0.0047433 | 0.0105612 |
274300 | 41.31526 | 41.35442 | 0.0180697 | 0.0210847 |
278600 | 41.37850 | 41.29782 | 0.0451640 | 0.0355131 |
280900 | 41.38828 | 41.32498 | 0.0549446 | 0.0083487 |
281200 | 41.29711 | 41.33874 | 0.0362280 | 0.0054022 |
296300 | 41.28953 | 41.31415 | 0.0438007 | 0.0191800 |
304000 | 41.23640 | 41.33775 | 0.0969283 | 0.0044140 |
310800 | 41.33753 | 41.29559 | 0.0041976 | 0.0377457 |
311100 | 41.30933 | 41.35475 | 0.0240006 | 0.0214155 |
327800 | 41.30178 | 41.34617 | 0.0315539 | 0.0128355 |
329900 | 41.29272 | 41.32464 | 0.0406130 | 0.0086966 |
330500 | 41.34844 | 41.34925 | 0.0151077 | 0.0159195 |
330900 | 41.38829 | 41.31256 | 0.0549541 | 0.0207726 |
334600 | 41.32349 | 41.31024 | 0.0098399 | 0.0230908 |
337100 | 41.24367 | 41.30444 | 0.0896615 | 0.0288887 |
361700 | 41.28759 | 41.33816 | 0.0457453 | 0.0048260 |
365500 | 41.27898 | 41.34018 | 0.0543543 | 0.0068489 |
382700 | 41.43299 | 41.33371 | 0.0996603 | 0.0003745 |
385700 | 41.36837 | 41.33567 | 0.0350415 | 0.0023407 |
387900 | 41.28396 | 41.34070 | 0.0493688 | 0.0073645 |
388200 | 41.33162 | 41.33054 | 0.0017165 | 0.0027903 |
391000 | 41.43616 | 41.34005 | 0.1028259 | 0.0067184 |
394200 | 41.25750 | 41.36758 | 0.0758293 | 0.0342476 |
417800 | 41.29549 | 41.33608 | 0.0378439 | 0.0027417 |
418800 | 41.35525 | 41.32958 | 0.0219162 | 0.0037554 |
430600 | 41.39695 | 41.33945 | 0.0636188 | 0.0061141 |
434100 | 41.32773 | 41.35314 | 0.0056080 | 0.0198112 |
456100 | 41.36146 | 41.33882 | 0.0281315 | 0.0054871 |
464100 | 41.33347 | 41.36217 | 0.0001388 | 0.0288366 |
476700 | 41.34621 | 41.31857 | 0.0128797 | 0.0147587 |
478800 | 41.27292 | 41.34939 | 0.0604100 | 0.0160550 |
495300 | 41.35654 | 41.36678 | 0.0232019 | 0.0334424 |
495900 | 41.33847 | 41.31887 | 0.0051353 | 0.0144667 |
524200 | 41.40094 | 41.34941 | 0.0676098 | 0.0160797 |
532900 | 41.26510 | 41.33284 | 0.0682372 | 0.0004949 |
535800 | 41.38628 | 41.32356 | 0.0529508 | 0.0097717 |
538600 | 41.35134 | 41.34391 | 0.0180074 | 0.0105729 |
539000 | 41.29209 | 41.33653 | 0.0412407 | 0.0031924 |
545300 | 41.32430 | 41.32383 | 0.0090342 | 0.0095002 |
551700 | 41.31657 | 41.33429 | 0.0167605 | 0.0009611 |
559300 | 41.32713 | 41.33854 | 0.0062047 | 0.0052113 |
560200 | 41.34030 | 41.31204 | 0.0069631 | 0.0212936 |
561800 | 41.31715 | 41.32450 | 0.0161865 | 0.0088334 |
578800 | 41.42511 | 41.34032 | 0.0917810 | 0.0069895 |
581100 | 41.34072 | 41.33165 | 0.0073893 | 0.0016874 |
581200 | 41.33976 | 41.31413 | 0.0064231 | 0.0192075 |
582600 | 41.32465 | 41.35061 | 0.0086827 | 0.0172765 |
598700 | 41.36701 | 41.31635 | 0.0336754 | 0.0169832 |
643000 | 41.36436 | 41.34244 | 0.0310272 | 0.0091095 |
643100 | 41.38389 | 41.33112 | 0.0505582 | 0.0022164 |
653200 | 41.39389 | 41.31550 | 0.0605562 | 0.0178352 |
659600 | 41.38163 | 41.33235 | 0.0482993 | 0.0009799 |
666000 | 41.32681 | 41.35067 | 0.0065248 | 0.0173383 |
668500 | 41.25570 | 41.32834 | 0.0776308 | 0.0049914 |
671200 | 41.28690 | 41.34859 | 0.0464369 | 0.0152569 |
687500 | 41.34136 | 41.33311 | 0.0080292 | 0.0002279 |
691100 | 41.34887 | 41.31559 | 0.0155340 | 0.0177480 |
694600 | 41.30500 | 41.34324 | 0.0283290 | 0.0099056 |
699500 | 41.29834 | 41.33545 | 0.0349977 | 0.0021141 |
708100 | 41.34219 | 41.33901 | 0.0088584 | 0.0056784 |
715500 | 41.33108 | 41.34276 | 0.0022525 | 0.0094249 |
723800 | 41.33161 | 41.32749 | 0.0017205 | 0.0058403 |
726100 | 41.37821 | 41.33758 | 0.0448813 | 0.0042443 |
738700 | 41.39065 | 41.32767 | 0.0573136 | 0.0056678 |
739200 | 41.23861 | 41.35076 | 0.0947277 | 0.0174273 |
750700 | 41.33619 | 41.32840 | 0.0028596 | 0.0049383 |
754400 | 41.31103 | 41.32873 | 0.0222990 | 0.0046078 |
773600 | 41.36559 | 41.34008 | 0.0322578 | 0.0067452 |
776000 | 41.35383 | 41.36183 | 0.0204966 | 0.0284997 |
778400 | 41.30326 | 41.34211 | 0.0300742 | 0.0087721 |
787900 | 41.35883 | 41.34242 | 0.0254943 | 0.0090883 |
799500 | 41.31258 | 41.36175 | 0.0207540 | 0.0284153 |
810600 | 41.37866 | 41.33668 | 0.0453274 | 0.0033494 |
814200 | 41.33709 | 41.32563 | 0.0037592 | 0.0077037 |
816800 | 41.33808 | 41.32394 | 0.0047490 | 0.0093897 |
819900 | 41.34675 | 41.34010 | 0.0134204 | 0.0067706 |
825900 | 41.30501 | 41.33818 | 0.0283190 | 0.0048501 |
826400 | 41.30971 | 41.35032 | 0.0236247 | 0.0169880 |
828900 | 41.34339 | 41.32886 | 0.0100572 | 0.0044730 |
845200 | 41.35013 | 41.32628 | 0.0167949 | 0.0070491 |
846400 | 41.32447 | 41.31664 | 0.0088587 | 0.0166923 |
847000 | 41.34560 | 41.33438 | 0.0122635 | 0.0010515 |
850900 | 41.37169 | 41.32258 | 0.0383573 | 0.0107543 |
854300 | 41.36072 | 41.34455 | 0.0273883 | 0.0112214 |
860100 | 41.36120 | 41.33456 | 0.0278684 | 0.0012286 |
875600 | 41.34042 | 41.33874 | 0.0070851 | 0.0054112 |
886300 | 41.35290 | 41.33387 | 0.0195643 | 0.0005365 |
887400 | 41.32935 | 41.34513 | 0.0039832 | 0.0117991 |
896400 | 41.36939 | 41.34253 | 0.0360607 | 0.0091972 |
896600 | 41.30186 | 41.33245 | 0.0314742 | 0.0008879 |
898400 | 41.30605 | 41.32525 | 0.0272795 | 0.0080795 |
906300 | 41.32763 | 41.33357 | 0.0057000 | 0.0002380 |
917000 | 41.34246 | 41.33777 | 0.0091285 | 0.0044345 |
920000 | 41.29987 | 41.33742 | 0.0334678 | 0.0040871 |
930700 | 41.36998 | 41.33259 | 0.0366419 | 0.0007389 |
933300 | 41.33147 | 41.32566 | 0.0018610 | 0.0076756 |
936300 | 41.31416 | 41.34805 | 0.0191687 | 0.0147201 |
939900 | 41.27535 | 41.32598 | 0.0579801 | 0.0073521 |
945200 | 41.34172 | 41.31805 | 0.0083860 | 0.0152811 |
949600 | 41.31171 | 41.34355 | 0.0216260 | 0.0102158 |
958300 | 41.32117 | 41.33336 | 0.0121623 | 0.0000283 |
958600 | 41.32149 | 41.32537 | 0.0118480 | 0.0079589 |
970500 | 41.31517 | 41.34104 | 0.0181645 | 0.0077070 |
972700 | 41.34482 | 41.32690 | 0.0114848 | 0.0064341 |
976300 | 41.28765 | 41.33933 | 0.0456865 | 0.0059945 |
986800 | 41.34657 | 41.32598 | 0.0132404 | 0.0073556 |
989000 | 41.39467 | 41.32631 | 0.0613390 | 0.0070265 |
994900 | 41.39698 | 41.33734 | 0.0636470 | 0.0040077 |
995500 | 41.37752 | 41.32160 | 0.0441827 | 0.0117368 |
Hasil Perbandingan Solusi Numerik dan Eksak