Algoritma Iteratif
1. Permasalahan 1
Susunlah sintaks R untuk penjumlahan deret berikut!
\[ z = 1 + 1 + \frac{1}{2} + \frac{1}{3} + \frac{1}{5} + \frac{1}{8} ... \]
maka dari deret diatas dapat ditentukan persamaannya dimana untuk pembilangnya bernilai 1 dan penyebutnya merupakan barisan fibonacci. Deret fibonacci sendiri merupakan sebuah deret dimana bilangan selanjutnya dari deret tersebut merupakan penjumlahan dari dua bilangan sebelumnya. Maka dibuat fungsi fibonaccinya.
fibb <- function(n){
fibb1 <- numeric(n)
for (i in 1:n) {
if (i<=2){
fibb1[i] <- 1
} else{
fibb1[i] <- fibb1[i-1] + fibb1[i-2]
}
}
return(fibb1[i])
}
z <- function(n){
1/fibb(n)
}selanjutnya kita menentukan nilai awalnya
e <- 10
z0 <- 0
n <- 1Setelah kita menentukan nilai awal selajutnya kita akan menghitung penjumlahan dari deretnya dimana rumusnya
\[ z = ∑_{i=1}^n \frac{1}{fib(n)} \]
while (e > 10^(-5)) {
sum.z <- z0 + 1/fibb (n)
e <- abs(sum.z-z0)
z0 <- sum.z
n <- n+1
}
sum.z## [1] 3.359872
maka diperoleh hasil penjumlahan deretnya 3.359872
2. Permasalahan 2
Susunlah sintaks R untuk penjumlahan deret berikut!
\[ z = 10 - 2 + 0.4 - 0.08 + … \]
Deret diatas terlebih dahulu diubah dalam bentuk pecahan agar lebih mudah dalam memperoleh persamaan penjumlahanya.
\[ z = \frac{10}{5^0} - \frac{10}{5^1} + \frac{10}{5^2} - \frac{10}{5^3} \]
Sehingga diperoleh persamaanya
\[ z = ∑_{i=1} ^n \frac{10}{5^n} (-1)^n \]
Selanjutnya dibuat fungsi berdasarkan persamaan yang diperoleh untuk mendapatkan jumlah dari deret tersebut.
Z <- function(variables) {
((10/(5^n) * (-1)^(n)))
}Selanjutnya ditentukan nilai awalnya
e <- 10
Z0 <- 0
n <- 0penjumlahan deretnya sebagai berikut.
while (e > 10e-9) {
sum.Z <- Z0 + Z(n)
e <- abs(sum.Z-Z0)
Z0 <- sum.Z
n <- n+1
}
sum.Z## [1] 8.333333
maka diperoleh hasil penjumlahan deretnya 8.333333
3. Permasalahan 3
Buat lah fungsi untuk mengurutkan vektor Berikut dari besar ke kecil. Bandingkan hasilnya dengan mengguakan fungsi sort yang ada di R.
x = [13, 7, 6, 45, 21, 9, 101, 102 ]
Fungsi untuk mengurutkan vektor dari besar ke kecil:
memasukkan nilai untuk vektor x
x<- c(13, 7, 6, 45, 21, 9, 101, 102)Selanjunya menggurutkan bilangan pada vektor x
Menggunakan function
disini kita membuat fungsi manual dalam mengurutkan bilangan.
dsort <- function(x){
n <- length(x)
for (i in 1:n) {
j <- i+1
for (j in 1:n) {
if(x[i] > x[j]){
a <- x[i]
x[i] <- x[j]
x[j] <- a
}
}
}
return(x)
}
dsort(x)## [1] 102 101 45 21 13 9 7 6
Maka dapat dilihat bahwa bilangan pada vektor x sudah terurut dari besar ke kecil.
Menggunakan sort
Disini kita menggunakan fungsi sort pada r dan decreasing = TRUE agar bilangan diurutkan dari besar ke kecil.
sort(x,decreasing=TRUE)## [1] 102 101 45 21 13 9 7 6
Maka dapat dilihat juga bahwa bilangan pada vektor x sudah terurut dari besar ke kecil. Maka dapat disimpulkan bahwa fungsi yang kita buat dan fungsi bawaan r menghasilkan keluaran yang sama dalam mengurutkan bilangan dari besar ke kecil. Selanjutnya kita akan mencoba membandingkan waktu running antara fungsi manual yang kita buat dengan fungsi sort bawaan r.
Pembandingan Waktu Running
disini kita menggunakan package microbenchmark dalam membandingkan waktu running kedua fungsi.
microbenchmark::microbenchmark(sort(x,decreasing=TRUE),dsort(x))## Unit: microseconds
## expr min lq mean median uq max neval
## sort(x, decreasing = TRUE) 46.654 48.053 62.07265 48.520 50.1525 641.949 100
## dsort(x) 10.731 11.664 13.87054 12.597 13.0640 35.457 100
Dapat dilihat bahwa waktu running dari fungsi yang dibuat manual lebih cepat dari pada waktu running fungsi sort yang merupakan fungi bawaan dari r.