P8 STA561 Algoritma Iteratif
SOAL 1
Susunlah sintaks R untuk penjumlahan deret berikut!
Menuliskan rumus fungsi dalam bentuk function
fz <- function(n){
fib=function(n){ #fungsi Fibonacci
x = numeric(n)
x[1:2] = c(1,1)
for(i in 3:n) x[i] = x[i-1] + x[i-2]
return(x)
}
ifelse((n>2),1/fib(n)[n],1)
}Mendefinisikan kriteria stopping
stopping_criteria <- function(y_now,y_old){
abs(y_now-y_old)
}Mendefinisikan nilai-nilai awal
# nilai awal stopping criteria
error <- 10
# nilai awal deret
z0 <- 0
# nilai awal iterasi
n <- 1Menuliskan iterasi untuk mencari jumlah deret
while (error>0.00001){
z <- z0 + fz(n)
error <- stopping_criteria(z,z0)
z0 <- z
n <- n + 1
}
# hasil akhir
z## [1] 3.359872
# criteria stopping error
error## [1] 8.237707e-06
SOAL 2
Susunlah sintaks R untuk penjumlahan deret berikut!
Deret tersebut merupakan barisan bilangan geometri dimana antar suku pada deret tersebut memiliki rasio −1/5 dengan nilai awal 10.
Menuliskan rumus fungsi dalam bentuk function
fz2 <- function(n){
10 * (-1/5) ^ (n-1)
}Mendefinisikan kriteria stopping
stopping_criteria <- function(y_now,y_old){
abs(y_now-y_old)
}Mendefinisikan nilai-nilai awal
# nilai awal stopping criteria
error <- 10
# nilai awal deret
z0 <- 0
# nilai awal iterasi
n <- 1Menuliskan iterasi untuk mencari jumlah deret
while (error>0.00001){
z <- z0 + fz2(n)
error <- stopping_criteria(z,z0)
z0 <- z
n <- n + 1
}
# hasil akhir
z## [1] 8.333332
# criteria stopping error
error## [1] 5.12e-06
SOAL 3
Buat lah fungsi untuk mengurutkan vektor Berikut dari besar ke kecil. Bandingkan hasilnya dengan mengguakan fungsi sort yang ada di R.
Menuliskan rumus fungsi dalam bentuk function
fungsi_sort = function(x, urutan="asc") {
n <- length(x)
for (i in 1:(n-1)) {
for (j in (i+1):n) {
if (urutan == "asc" && (x[i] > x[j]) ||
urutan == "desc" && (x[i] < x[j]))
{
tmp = x[i]
x[i] = x[j]
x[j] = tmp
}
}
}
return(x)
}Melakukan pengujian fungsi
x <- c(13, 7, 6, 45, 21, 9, 101, 102)
fungsi_sort(x, urutan="desc")## [1] 102 101 45 21 13 9 7 6
Penggunaan fungsi sort
#descending
sort(x,TRUE)## [1] 102 101 45 21 13 9 7 6
Perbandingan hasil dari fungsi
komparasi<-data.frame(sort(x),fungsi_sort(x))
komparasi## sort.x. fungsi_sort.x.
## 1 6 6
## 2 7 7
## 3 9 9
## 4 13 13
## 5 21 21
## 6 45 45
## 7 101 101
## 8 102 102
microbenchmark::microbenchmark(sort(x),fungsi_sort(x))## Unit: microseconds
## expr min lq mean median uq max neval
## sort(x) 50.700 51.8015 61.93299 52.6510 56.7510 321.101 100
## fungsi_sort(x) 15.001 15.6010 19.22106 17.1505 17.8015 49.701 100
Referensi
Dito, G.A. (Oktober 21, 2021). Algoritma Iteratif. Retrieved from https://gerrydito.github.io/Algoritma-Iteratif/