IMPLEMENTASI ALGORITMA ITERATIF

Soal No.1

Susunlah sintaks R untuk penjumlahan deret berikut!

\(z = 1 +\ 1+\frac{1}{2}+\frac{1}{3}+\frac{1}{5}+\frac{1}{8}+...\)

Rumus

Rumus dari deret tersebut adalah

\(z=\frac{1}{y_1}+\frac{1}{y_2}+\Sigma_{n=3}^{\infty} \frac{1}{y_{n-2}+y_{n-1}}\)

Algoritma

  1. Mulai

  2. Tentukan dua nilai awal, misalnya \(y_1=1 \ dan \ y_2=1\)

  3. Tentukan batas toleransi

  4. Hitung \(Z = \frac {1}{y_1} + \frac {1}{y_2}\)

  5. Hitung elemen berikutnya, \(y_i\) dengan menjumlahkan dua elemen sebelumnya, \(y_{i−2}+y_{i−1}\)

  6. Hitung \(Z=Z+ \frac{1}{y_i}\)

  7. Periksa apakah elemen deret masih dalam batas toleransi

  8. Ulangi langkah 5, 6 dan 7 hingga batas toleransi tidak lagi terpenuhi

  9. Print nilai Z

  10. Selesai

Program R

iterasi1 <- function(init.values = c(1,1), tol = 1e-7 ){
  
  series.sum <- sum(1/init.values)
  
  end.loop <- FALSE
  while(!end.loop){
    new.value <- sum(init.values) 
    new.value.inv <- 1/new.value
    series.sum <- series.sum + new.value.inv
  
    init.values <- c(init.values, new.value)[-1]

    # periksa kriteria stoping
    if(new.value.inv < tol){ end.loop <- TRUE }
    
    }
  
  return(series.sum)
  
}

Solusi

Z <- iterasi1 ()
Z
## [1] 3.359886

Soal No. 2

Susunlah sintaks R untuk penjumlahan deret berikut!

\(z = 10-2+0.4-0.08+...\)

Rumus

\(Z = \Sigma_{n=0}^{\infty} \ 10 × \ (-\frac{1}{5})^n\)

Algoritma

  1. Mulai

  2. Tentukan batas toleransi

  3. Tentukan awalan \(Z=0\)

  4. Untuk \(n=0\), hitung \(Z=Z+[10×(-\frac{1}{5})^0]\)

  5. Ulangi langkah ke-4 untuk \(n=n+1\) hingga batas toleransi tidak lagi terpenuhi

  6. Print nilai Z

  7. Selesai

Program R

iterasi2 <- function(n=0, tolerance = 1e-7){
  
  series.sum <- 0
  
  end.loop <- FALSE
  while(!end.loop){
    new.value <- (10)*(-1/5)^n
    series.sum <- series.sum + new.value
  
  n <- n+1
  
  if(abs(new.value) < tolerance){ end.loop <- TRUE }
  
  }
  
  return(series.sum)
  
}

Solusi

Z <- iterasi2()
Z
## [1] 8.333333

Soal No. 3

Buatlah fungsi untuk mengurutkan vektor Berikut dari besar ke kecil.

Bandingkan hasilnya dengan mengguakan fungsi sort yang ada di R.

\(x=[13,7,6,45,21,9,101,102]\)

Algoritma

Untuk melakukan pengurutan, iterasi yang akan digunakan terdiri dari dua tingkat,

  1. iterasi untuk memastikan semua elemen diperiksa

  2. Iterasi untuk mengakses elemen-elemen vektor yang digunakan untuk penukaran antar elemen

Pada iterasi tingkat kedua nilai-nilai yang kecil akan semakin terdorong ke-belakang sehingga

elemen-elemen belakang vektor tidak perlu diperiksa lagi.

Misal pada saat iterasi tingkat pertama sama dengan 13 maka elemen yang akan dibandingkan hanya dari

element 1 sampai 6 saja (ingat ada j+1). Semakin meningkat iterasi tingkat 1 maka banyaknya iterasi

tingkat 2 semakin mengecil (pada kasus ini diakomodir dengan n_x-i).

Program R

x <- c(13,7,6,45,21,9,101,102)

urutan <- function(x){
n_x <- length(x)

for(i in 1:(n_x-1)){
  for(j in 1:(n_x-i)) {
    if(x[j+1] > x[j]) {
      tmp <- x[j+1]
      x[j+1] <- x[j]
      x[j] <- tmp
    }
  }
  }
  return(x)
}

Solusi

#mencoba menerapkan fungsi urutan
urutan(x)
## [1] 102 101  45  21  13   9   7   6

Fungsi R

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

Hasil pembandingan menunjukkan hasil yang sama.