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