Tugas Praktikum STA 561 - Algoritma Iterasi
Soal 1
Susunlah sintaks R untuk menjumlahkan deret berikut! \[Z = 1+1+\frac{1}{2}+\frac{1}{3}+\frac{1}{5}+\frac{1}{8}+ ...\]
1) Mendefinisikan function dari rumus fungsi di atas
Fibo <- function(n) {
# Mendefinisikan variabel untuk menampung vektor bilangan fibonacci dan Un (suku ke-n yang berisi pecahan dengan penyebut bilangan fibonacci)
fibonacci = c()
Un = c()
# Mendefinisikan bilangan fibonacci ke-1 dan ke-2
fibonacci[1] = 1
fibonacci[2] = 1
# Menefinisikan Un ke-1 dan ke-2
Un[1] = 1/1
Un[2] = 1/1
# Menampilkan Bilangan Fibonacci
# Untuk iterasi n<3,
if (n<3){
return(Un[n])
}
else {
# Untuk iterasi n>=3, membangkitkan barisan fibonacci ke-n dan suku ke-n
for (i in 3:n) {
fibonacci[i]= fibonacci[i-2]+fibonacci[i-1]
Un[i]= 1/fibonacci[i]
}
# Menampilkan suku ke-n
return(Un[i])
}
}2) Mendefinisikan kriteria stopping
stopping_criteria <- function(y_current, y_before){
abs(y_current - y_before)
}3) Mendefinisikan function soal yang memuat iterasi untuk mencari jumlah deret
Menuliskan proses iterasi di dalam function yang disebut soal1 dengan default nilai awal error=10; Z0=0; dan n=1
soal1 <- function(error=10, Z0=0, n=1){
while (error > 10^-5){
Z <- Z0 + Fibo(n)
error <- stopping_criteria(Z, Z0)
Z0 <- Z
n <- n+1
}
cbind(Z, error)
}
soal1()## Z error
## [1,] 3.359872 8.237707e-06
Soal 2
Susunlah sintaks untuk penjumlahan deret berikut! \[Z = 10-2 + 0.4-0.08 + ...\]
1) Mendefinisikan function dari rumus fungsi di atas
deret <- function(n){
# Mendefinisikan variabel untuk menampung vektor suku ke-n (U)
U = c()
# Suku ke-1/U[1] didefinsikan bernilai 10
U[1] = 10
# Untuk n=1, menampilkan nilai U[n]=10
if (n==1){
return(U[n])
}
# Untuk n>=2, membangkitkan nilai suku ke-n sesuai soal
else{
for (i in 2:n){
U[i] = U[i-1]/5
}
return(U[i] * (-1)^(i+1))
}
}2) Mendefinisikan kriteria stop
stopping_criteria <- function(y_current, y_before){
abs(y_current - y_before)
}3) Mendefinisikan function soal yang memuat iterasi untuk mencari jumlah deret
Menuliskan proses iterasi di dalam function yang disebut soal2 dengan default nilai awal error=10; Z0=0; dan n=1
## mendifinsikan fungsi yg memuat iterasi
soal2 <- function(error=10, z0=0, n=1){
while (error > 10^-5){
z <- z0 + deret(n)
error <- stopping_criteria(z, z0)
z0 <- z
n <- n+1
}
cbind(z, error)
}
soal2()## z error
## [1,] 8.333332 5.12e-06
Soal 3
Buatlah fungsi untuk mengurutkan vektor berikut dari besar ke kecil. Bandingkan hasilnya dengan menggunakan fungsi sort yang ada di R.
\[X = [13,7,6,45,21,9,101,102]\] Mendefinisikan fungsi sortir dari terbesar ke terkecil yang didefinsikan ke dalam variabel bernama sort_max_to_min
x <- c(13,7,6,45,21,9,101,102)
# Fungsi sortir dari besar ke kecil
sort_max_to_min <- function(n){
# mendefinisikan objek baru yang akan digunakan untuk menampilkan hasil sortir
x_sort <- x
# Menghitung jumlah data
n_x <- length(x)
# iterasi tingkat 1
for (i in 1:(n_x-1)){
# iterasi tingkat 2
for(j in 1:(n_x-i)){
# Pemeriksaan kondisi apakah elemen ke j+1 < elemen ke j
if (x_sort[j+1] > x_sort[j]){
# Kondisi terpenuhi
# Tempat menampung sementara untuk simpan elemen ke j yang akan ditukar
tampung <- x_sort[j]
# Ganti nilai elemen ke j dengan nilai yang ada pada elemen ke j+1
x_sort[j] <- x_sort[j+1]
# Ganti nilai elemen j+i dengan nilai yang ada dalam objek "tampung"
x_sort[j+1] <- tampung
}
}
}
return(x_sort)
}sort_max_to_min(x)## [1] 102 101 45 21 13 9 7 6
Membandingkan hasil fungsi iterasi bernama sort_max_to_min() dengan fungsi sort bawaan R sort()
sort(x, decreasing = TRUE)## [1] 102 101 45 21 13 9 7 6
Membandingkan kecepatan running fungsi sort_max_to_min() dengan fungsi sort bawaan R sort()
microbenchmark::microbenchmark(sort(x), sort_max_to_min(x))## Unit: microseconds
## expr min lq mean median uq max neval
## sort(x) 63.8 77.45 101.278 103.1 107.70 253.9 100
## sort_max_to_min(x) 13.0 15.30 21.824 22.9 25.45 65.2 100
Referensi
Dito, Gery Alfa. 2021. Algoritma Iteratif. Diakses dari (https://gerrydito.github.io/Algoritma-Iteratif/)
Wigena, Aji Hamin. 2021. STA 561 Pemrograman Statistika: Algoritma Iteratif. Diakses dari (https://newlms.ipb.ac.id/)