Tugas Praktikum STA561

Soal 1 : Penjumlahan Deret

Susun sintaks R untuk penjumlahan deret berikut:

\(Z = 1 + 1 + \frac{1}{2} + \frac{1}{3} + \frac{1}{5} + \frac{1}{8} + ...\)

pola deret diatas adalah:

\[ Z = \frac{1}{x_1} + \frac{1}{x_2} + \sum_{i=3}^{\infty} \left(\frac{1}{x_{i-2} + x_{i-1}}\right) \] langkah-langkah
+ Menentukan dua nilai awal
+ Menentukan maksimal error
+ Menghitung \(Z = \frac{1}{x_1} + \frac{1}{x_2}\)
+ Menghitung elemen berikutnya, \(x_i\) dengan menjumlahkan dua elemen sebelumnya, \(x_{i-2} + x_{i-1}\),
+ Menghitung \(Z= Z + \frac{1}{x_i}\)

Z <- function(awal = c(1,1), maxe = 1e-6 ){
  
  deret <- awal
  
  err <- Inf
  while(err > maxe){
    nbaru <- sum(tail(deret,2)) 
    deret <- c(deret, nbaru)
    err <- 1/nbaru
    
    }
  
  return(sum(1/deret))
  
}
#final result
z <-Z()
z
## [1] 3.359884

Soal 2 : Penjumlahan Deret

Susun sintaks R untuk penjumlahan deret berikut:

$Z = 10 - 2 + 0.4 - 0.08 + … $

pola deret diatas adalah: \[ Z = \sum_{i=0}^{\infty} 10 \times \left(-\frac{1}{5} \right)^i \]

Menuliskan rumus fungsi dalam bentuk function

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

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 <- 0

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

Soal 3 : Mengurutkan Data

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 yang dapat digunakan untuk menjawab soal 3 adalah Bubble Sort

Cara 1

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

# 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] 102 101  45  21  13   9   7   6

Cara 2

fungsi_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]
      x[j] <- x[j+ 1]
      x[j+1] <- tmp
    }
  }
  }
  return(x)
}

#mencoba menerapkan fungsi urutan
fungsi_urutan(x)
## [1] 102 101  45  21  13   9   7   6

Menggunakan fungsi sort di R

x <- c(13,7,6,45,21,9,101,102)
sort(x, decreasing=TRUE)
## [1] 102 101  45  21  13   9   7   6