Algoritma Iteratif

Soal

  1. Susunlah sintaks R untuk penjumlahan deret berikut! \[\begin{equation} z=1+1+\frac{1}{2}+\frac{1}{3}+\frac{1}{5}+\frac{1}{8}+ \cdots \end{equation}\]

  2. Susunlah sintaks R untuk penjumlahan deret berikut! \[\small{Z = 10 - 2 + 0.4 - 0.08 + \cdots}\]

  3. Buatlah fungsi untuk mengurutkan vektor berikut. Bandingkan hasilnya dengan menggunakan fungsi sort yang ada di R. \[x = [13,7,6,45,21,9,101,102]\]

Jawaban Soal 1

Penjumlahan Deret \[\begin{equation} z=\frac{1}{1}+\frac{1}{1}+\frac{1}{2}+\frac{1}{3}+\frac{1}{5}+\frac{1}{8}+ \cdots \end{equation}\]

Perhatikan bahwa penyebut dari deret ini membentuk barisan fibonacci. Agar memudahkan, perlu dibuat sebuah fungsi yang menghasilkan nilai untuk tiap suku barisan fibonacci.

Fungsi untuk menghasilkan suku ke-i barisan bilangan fibonacci.

# Bottom Up Method
fibonacci = function(n){
  fib <- numeric(n)
  for (i in 1:n){
    if (i<=2){
      fib[i] <- 1
    } else{
      fib[i] <- fib[i-1] + fib[i-2]
    }
  }
  #return(fib)
  return(fib[i])
}

#Contoh 10 suku pertama barisan fibonacci
sapply(1:10,fibonacci)
##  [1]  1  1  2  3  5  8 13 21 34 55

Rumus untuk soal 1

Rumus dari deret pada soal dapat dituliskan sebagai \[z = \sum_{n=1}^{\infty} \frac{1}{fibonacci(n)}\]

#Rumus fungsi
z <- function(n){
  1/fibonacci(n)
}

#nilai awal
e <- 10
z0 <- 0    
n <- 1

#Mencari jumlah deret
while (e > 10^(-7)) {
  z1 <- z0 + z(n)
  e <- abs(z1-z0)
  z0 <- z1
  n <- n+1
}
cbind.data.frame(Hasil=z1,Selisih=e)
##      Hasil      Selisih
## 1 3.359886 6.697766e-08

Nilai pendekatan untuk deret ini adalah 3.359886 dimana suku terakhir yang dijumlahkan pada deret ini mengakibatkan perubahan nilai sebesar 6.697766 x \(10^{-8}\). Perubahan yang cukup kecil. Artinya, jika penjumlahan pada deret ini dilanjutkan ke suku berikutnya, akan mengakibatkan perubahan kecil terhadap nilai yang didapatkan ini.

Jawaban Soal 2

Penjumlahan Deret

Perhatikan bahwa \[\small{Z = 10 - 2 + 0.4 - 0.08 + \cdots}\] dapat dituliskan menjadi \[\small{Z = \frac{10}{5^0} - \frac{10}{5^1} + \frac{10}{5^2} - \frac{10}{5^3} + \cdots}\]

Rumus untuk soal 2

\[z = \sum_{n=0}^{\infty} (-1)^{n} \frac{10}{5^{n}}\]

#Rumus fungsi
z <- function(n){
  (-1)^(n) * (10/(5^n))
}

#Nilai awal
e <- 10
z0 <- 0 
n <- 0

#Mencari jumlah deret
while (e > 10^(-7)) {
  z1 <- z0 + z(n)
  e <- abs(z1-z0)
  z0 <- z1
  n <- n+1
}

cbind.data.frame(Hasil=z1,Selisih=e)
##      Hasil   Selisih
## 1 8.333333 4.096e-08

Nilai pendekatan untuk deret ini adalah 8.333333 dimana suku terakhir yang dijumlahkan pada deret ini mengakibatkan perubahan nilai sebesar 4.096 x \(10^{-8}\). Perubahan yang cukup kecil. Artinya, jika penjumlahan pada deret ini dilanjutkan ke suku berikutnya, akan mengakibatkan perubahan kecil terhadap nilai yang didapatkan ini.

Jawaban Soal 3

Mengurutkan vektor

Vektor

(x <- c(13,7,6,45,21,9,101,102))
## [1]  13   7   6  45  21   9 101 102

Fungsi untuk mengurutkan vektor kecil ke besar.

Alur dari algoritma berikut adalah mengumpulkan bilangan yang paling besar ke bagian belakang dalam setiap kali iterasi.

sort_asc <- function(v){
  n <- length(v)
  for (i in 1:(n-1)){   # iterasi luar: Lihat iterasi dalam dulu!
    for (j in 1:(n-i)){ # iterasi dalam: membawa bilangan paling besar ke belakang.
      if (v[j]>v[j+1]){ # Jika bil. pertama lebih besar daripada yg kedua, tukarkan!
        tmp <- v[j]
        v[j] <- v[j+1]
        v[j+1] <- tmp
      }
    }
  }
  return(v)
}

Perbandingan

sort_asc(x) # buatan
## [1]   6   7   9  13  21  45 101 102
sort(x)     # bawaan R
## [1]   6   7   9  13  21  45 101 102

Fungsi untuk mengurutkan vektor dari besar ke kecil

Alur dari algoritma berikut adalah mengumpulkan bilangan yang paling kecil ke bagian belakang dalam setiap kali iterasi.

sort_desc <- function(v){
  n <- length(v)
  for (i in 1:(n-1)){   # iterasi luar: Lihat iterasi dalam dulu!
    for (j in 1:(n-i)){ # iterasi dalam: membawa bilangan paling kecil ke belakang.
      if (v[j]<v[j+1]){ # Jika bil. pertama lebih kecil daripada yg kedua, tukarkan!
        tmp <- v[j]
        v[j] <- v[j+1]
        v[j+1] <- tmp
      }
    }
  }
  return(v)
}

Perbandingan

sort_desc(x)            # buatan
## [1] 102 101  45  21  13   9   7   6
sort(x,decreasing = T)  # bawaan R
## [1] 102 101  45  21  13   9   7   6

Kesimpulan: Hasilnya sama, maka fungsi buatan sort_asc dan sort_desc berjalan dengan baik.

Author

IRVANAL HAQ

S2 Statistika dan Sains Data IPB
LPDP PK-174 Pelita Aksara

path1= "E:\\IRVANAL HAQ.jpeg"
knitr::include_graphics(path1)