Algoritma Iteratif

Soal

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 dari besar ke kecil.

Vektor

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

Fungsi untuk mengurutkan vektor dari besar ke kecil

Alur dari algoritma berikut adalah mengumpulkan bilangan yang kecil ke bagian belakang.

sort_desc <- function(v){
  n <- length(v)
  for (i in 1:(n-1)){
    for (j in 1:(n-i)) {
      if (v[j]<v[j+1]){
        tmp <- v[j]
        v[j] <- v[j+1]
        v[j+1] <- tmp
      }
    }
  }
  return(v)
}

Hasil running fungsi sort_desc di atas

sort_desc(x)
## [1] 102 101  45  21  13   9   7   6

Hasil running fungsi sort built-in di R

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

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