Algoritma Iteratif

Tugas

Nomor 1

Susunlah sintaks R untuk penjumlahan deret berikut!

𝑧 = 1 + 1 + 1/2 + 1/3 + 1/5 + 1/8 + ⋯

Deret diatas, pada bagian penyebut memiliki pola bilangan Fibonacci, yakni setiap sukunya merupakan penjumlahan dari 2 suku sebelumnya. Sedangkan pada bagian pembilang memiliki nilai yang sama yaitu 1.

Bilangan fibonacci sendiri dapat ditunjukkan :

\(f_1 = 1\)

\(f_2 = 1\)

\(f_{n} = f_{n-1} + f_{n-2}\) untuk n \(\small \geq\) 3

sehingga fungsi deret diatas dapat dinotasikan :

\({Z =} \left(\dfrac {1}{1}\right) + \left(\dfrac {1}{1}\right)\) \(\Large {+}\sum_{n=3}^{\infty}\) \(\left(\dfrac {1}{x_{n-1} } \right)\) + \(\left(\dfrac {1}{x_{n-2} } \right)\)

Berikut ini merupakan syntax yang digunakan untuk deret tersebut

#fibonacci function
#Membuat fungsi fibonacci dengan paramater yang dimasukan terdapat 3 yaitu, error, a, dan b

generate_fibo <- function(err_param, a, b){     
  fibo <- c(a,b)
  n <- length(fibo)
  x <- fibo[n]+fibo[n-1] 
  err = 10                        #inisiasi err awal
  while (abs(err) > err_param){   #stopping criteria
    n <- n+1
    fibo[n] <- x
    x <- fibo[n]+fibo[n-1]
    err = (1/fibo[n])-(1/fibo[n-1])
  }
  return(fibo)
}

#fibonacci sum operation
#Membuat penjumlahan dari deret 

calculate_fibo <- function(fibo){
  sum_fibo <- 0
  for (i in fibo){
    sum_fibo <- (sum_fibo + (1/i))
  }
  return(sum_fibo)
}

fibo <- generate_fibo(10**(-6),1,1)
calculate_fibo(fibo)
## [1] 3.359884

Nilai final yang diperoleh dari penjumlahan deret tak hingga tersebut adalah 3.359884

Nomor 2

Susunlah sintaks R untuk penjumlahan deret berikut!

z = 10 -2 + 0.4 -0.08 +. ..

Deret diatas merupakan barisan bilangan dengan pola deret geometri, antar suku pada deret tersebut memiliki rasio \(-\frac{1}{5}\). Secara langsung dengan rumus deret geometri kita dapat tentukan :

\(a = 10\)

\({r= - } \dfrac {1}{5}\)

\({Un= a} {r}^{n-1}\) = \({10} {\sf x} (-\dfrac {1}{5}) ^{n-1}\)

Sehingga penjumlahan deret diatas dapat kita notasikan sebagai berikut

\({Z =} \sum_{n=1}^{\infty} 10 {\sf x} (-\dfrac {1}{5}) ^{n-1}\)

Syntax yang digunakan untuk deret tersebut adalah :

  1. Menentukan fungsi deret
fnz <- function(n){
 10 * (-1/5) ^ (n-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 > 10^-5) {
  z <- z0 + fnz(n)
  error <- stopping_criteria(z,z0)
  z0 <- z
  n <- n+1
}
# final result
z 
## [1] 8.333332

Nilai final yang diperoleh dari penjumlahan deret tak hingga tersebut adalah 8.333332

# criteria stopping
error
## [1] 5.12e-06

Nomor 3

Buatlah fungsi untuk mengurutkan vektor berikut dari besar ke kecil. Bandingkan hasilnya dengan menggunakan fungsi sort yang ada di R.

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

Berikut syntax yang digunakan untuk membuat fungsi mengurutkan vektor.

#Membuat fungsi sort

function_sort = function(x, type="desc") {
  n <- length(x)
  for (i in 1:(n-1)) {
    for (j in (i+1):n) {
      
      if (type == "asc" && (x[i] > x[j]) ||
          type == "desc" && (x[i] < x[j]))
        {
        tmp = x[i]; x[i] = x[j]; x[j] = tmp
      }
    }
  }
  return(x)
}

Insert data

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

Sorting Data

  1. Menggunakan fungsi function_sort
#descending
function_sort(x)
## [1] 102 101  45  21  13   9   7   6
#ascending
function_sort(x,"asc")
## [1]   6   7   9  13  21  45 101 102
  1. Menggunakan fungsi sort dari R
#descending
sort(x,TRUE)
## [1] 102 101  45  21  13   9   7   6
#ascending
sort(x)
## [1]   6   7   9  13  21  45 101 102

Data yang diurutkan dengan function_sort () dan fungsi sort() dari R memberikan output yang sama.