Tugas Praktikum 8 STA 561

Rafika Damayanti Sururin Nufus

1.) Susunlah sintaks R untuk penjumlahan deret berikut!

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

Deret tersebut memiliki nilai yang sama untuk pembilang yaitu 1, untuk bagian penyebut deret tersebut memiliki pola bilangan Fibonacci, yaitu deret angka yang diperoleh dengan menjumlahkan dua angka sebelumnya.

f <- function(n){
  fibo=function(n){ 
    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 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 > 10e-8){
  z <- z0 + f(n)
  error <- stopping_criteria(z,z0)
  z0 <- z
  n <- n+1
}

# final result
z
## [1] 3.359886
#criteria stopping
error
## [1] 6.697766e-08

2.) Susunlah sintaks R untuk penjumlahan deret berikut!

z = 10-2 +0.4 -0.08 +… Rumus dari deret tersebut adalah:

Menuliskan rumus fungsi dalam bentuk function

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

Mendefinisikan kriteria stopping

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

Mendefinisikan 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 > 10e-8){
  z <- z0 + f2(n)
  error <- stopping_criteria(z,z0)
  z0 <- z
  n <- n+1
}

# final result
z
## [1] 8.333333
#criteria stopping
error
## [1] 4.096e-08

3.) Buat lah 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 ]

x <- c(13,7,6,45,21,9,101,102)
sort_function <- 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]
      x[j] <- x[j+ 1]
      x[j+1] <- tmp
    }
  }
  }
  return(x)
}
sort_function(x)
## [1]   6   7   9  13  21  45 101 102
sort(x)
## [1]   6   7   9  13  21  45 101 102
microbenchmark::microbenchmark(sort(x),sort_function(x))
## Unit: microseconds
##              expr     min       lq      mean  median     uq     max neval
##           sort(x) 167.057 169.6235 177.99351 171.334 173.90 421.350   100
##  sort_function(x)  27.938  28.5080  31.90643  31.359  33.64  66.139   100