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
Mulai
Tentukan dua nilai awal, misalnya \(y_1=1 \ dan \ y_2=1\)
Tentukan batas toleransi
Hitung \(Z = \frac {1}{y_1} + \frac {1}{y_2}\)
Hitung elemen berikutnya, \(y_i\) dengan menjumlahkan dua elemen sebelumnya, \(y_{i−2}+y_{i−1}\)
Hitung \(Z=Z+ \frac{1}{y_i}\)
Periksa apakah elemen deret masih dalam batas toleransi
Ulangi langkah 5, 6 dan 7 hingga batas toleransi tidak lagi terpenuhi
Print nilai Z
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
Mulai
Tentukan batas toleransi
Tentukan awalan \(Z=0\)
Untuk \(n=0\), hitung \(Z=Z+[10×(-\frac{1}{5})^0]\)
Ulangi langkah ke-4 untuk \(n=n+1\) hingga batas toleransi tidak lagi terpenuhi
Print nilai Z
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,
iterasi untuk memastikan semua elemen diperiksa
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.
Blog: https://profeksis.blogspot.com, Email: mistereko@apps.ipb.ac.id, Rpubs: https://rpubs.com/profeksis↩︎