Algoritma Iteratif

ArifuddinR

Soal Latihan

  1. Misalkan saja ada sebuah vektor \(x=[3,1,4,1,5,9,2,6,5]\), buat program untuk mengurutkan vektor tersebut dari kecil ke besar, kemudian bandingkan hasilnya dengan fungsi sort! Gunakan algoritme pada slide kuliah ke-16 !

Jawaban:

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 besar akan semakin terdorong ke-belakang sehingga elemen-elemen belakang vektor tidak perlu diperiksa lagi. Misal pada saat iterasi tingkat pertama sama dengan 3 maka elemen yang akan dibandingkan hanya dari element 1 sampai 7 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).

x <- c(3,1,4,1,5,9,2,6,5)

# mendefinisikan objek baru yang akan digunakan untuk menampilkan hasil sortir
x_sort <- x

#jumlah amatan 
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 lebih kecil dari elemen ke-j
    if(x_sort[j+1] < x_sort[j]) {
      # jika terpenuhi
      #Buat tempat sementara untuk menyimpan elemen ke-j yang akan ditukar
      tmp <- 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+1 dengan nilai yang ada dalam objek temp
      x_sort[j+1] <- tmp
    }
  }
  }

x_sort
## [1] 1 1 2 3 4 5 5 6 9
sort(x)
## [1] 1 1 2 3 4 5 5 6 9
  1. Berdasarkan jawaban nomor 1, Buatlah fungsi yang bernama fungsi_urutan dengan yang memiliki input x dan outputnya merupakan vector yang sudah terurut!
## [1] 1 1 2 3 4 5 5 6 9
  1. Susunlah sintaks R untuk penjumlahan deret berikut!

\(z = 2-\frac{6}{5}+\frac{8}{10}-\frac{10}{17}+\frac{12}{26}-...\)

hint: Cari terlebih dahulu formula/rumus dari deret tersebut

Jawaban:

Rumus dari deret tersebut adalah

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

  1. Menuliskan rumus fungsi dalam bentuk function
fz <- function(n){
  (-1)^(n+1)*((2*n+2)/((n^2)+1))
}
  1. Mendefinisikan kriteria stopping
stopping_criteria <- function(y_current,y_before){
  abs(y_current-y_before)
}
  1. Mendefinisikan nilai-nilai awal
#nilai awal kriteria stopping
error <- 10
#nilai awal deret
z0 <- 0
# nilai awal iterasi
n <- 1
  1. Menuliskan iterasi untuk mencari jumlah deret
while (error>0.00001) {
  z <- z0 + fz(n)
  error <- stopping_criteria(z,z0)
  z0 <- z
  n <- n+1
}
# final result
z 
## [1] 1.267197
# criteria stopping
error
## [1] 1e-05
  1. Susunlah sintaks R untuk penjumlahan deret berikut!

\(z = \frac{2}{5}+\frac{3}{40}+\frac{6}{135}+\frac{11}{320}+\frac{18}{625}+\frac{27}{1080}+...\)

hint: Cari terlebih dahulu formula/rumus dari deret tersebut

Jawaban:

Rumus dari deret tersebut adalah

$z= _{n=1}^{} $

  1. Menuliskan rumus fungsi dalam bentuk function
fz <- function(n){
  ((n^2) - 2*n + 3) / (5*n^3)
}
  1. Mendefinisikan kriteria stopping
stopping_criteria <- function(y_current,y_before){
  abs(y_current-y_before)
}
  1. Mendefinisikan nilai-nilai awal
#nilai awal kriteria stopping
error <- 10
#nilai awal deret
z0 <- 0
# nilai awal iterasi
n <- 1
  1. Menuliskan iterasi untuk mencari jumlah deret
while (error>0.00001) {
  z <- z0 + fz(n)
  error <- stopping_criteria(z,z0)
  z0 <- z
  n <- n+1
}
# final result
z 
## [1] 2.159406
# criteria stopping
error
## [1] 1e-05