Tugas Praktikum 8 STA561

Deri Siswara G1501211036

2021-10-30

Soal 1

Susunlah sintaks R untuk penjumlahan deret berikut!

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

Menuliskan rumus fungsi dalam bentuk function

Pembilang untuk deret di atas konstan bernilai 1, sedangkan penyebutnya merupakan deret Fibonacci, yakni setiap sukunya merupakan penjumlahan dari 2 suku sebelumnya.

fz <- function(n){
  fibo=function(n){ #Fungsi Fibonacci
    x = numeric(n)
    x[1:2] = c(1,1)
    for(i in 3:n) x[i] = x[i-1] + x[i-2]
    return(x)
  }
  ifelse((n>2),1/fibo(n)[n],1)
}

Mendefinisikan kriteria stopping

stopping_criteria <- function(y_current,y_before){
  abs(y_current-y_before)
}

Mendefinisikan nilai-nilai awal

#nilai awal kriteria stopping
error <- 10

#nilai awal deret

z0 <- 0
# nilai awal iterasi
n <- 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] 3.359872
# criteria stoppingerror
error
[1] 8.237707e-06

Soal 2

SSusunlah sintaks R untuk penjumlahan deret berikut!

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

Deret di atas merupakan barisan bilangan geometri, antar suku pada deret tersebut memiliki rasio −1/5 dan nilai awal 10. Rumus fungsi dapat mengikuti \(Un=ar^{n-1}\)

Menuliskan rumus fungsi dalam bentuk function

Pembilang untuk deret di atas konstan bernilai 1, sedangkan penyebutnya merupakan deret Fibonacci, yakni setiap sukunya merupakan penjumlahan dari 2 suku sebelumnya.

fz2 <- function(n){
 10 * (-1/5) ^ (n-1) 
}

Mendefinisikan kriteria stopping

stopping_criteria <- function(y_current,y_before){
  abs(y_current-y_before)
}

Mendefinisikan nilai-nilai awal

#nilai awal kriteria stopping
error <- 10

#nilai awal deret

z0 <- 0
# nilai awal iterasi
n <- 1

Menuliskan iterasi untuk mencari jumlah deret

while (error>0.00001){
  z <- z0 + fz2(n)
  error <- stopping_criteria(z,z0)
  z0 <- z
  n <- n + 1
}
# final result
z
[1] 8.333332
# criteria stoppingerror
error
[1] 5.12e-06

Soal 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 ]

Membuat fungsi sort

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

Uji coba fungsi sort

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

fungsi_sort(x, urutan="desc")
[1] 102 101  45  21  13   9   7   6

Menggunakan fungsi sort dari R

#descending
sort(x,TRUE)
[1] 102 101  45  21  13   9   7   6
microbenchmark::microbenchmark(sort(x),fungsi_sort(x))
Unit: microseconds
           expr  min    lq   mean median    uq   max neval
        sort(x) 43.1 44.40 47.192  45.25 46.70 158.9   100
 fungsi_sort(x) 13.9 14.45 15.680  15.30 16.15  24.7   100