Soal 1
Susunlah sintaks R untuk penjumlahan deret berikut!
\[z=1+1+1/2+1/3+1/5+1/8+...\]
Jawab :
deret tersebut merupakan deret Reciprocal Fibonacci Constant, sehingga rumus dari deret tersebut adalah
\[z_{n}=\frac{1}{\frac{\phi^n-(1-\phi^n)}{\sqrt5}}\]
dengan \(\phi\) merupakan golden ratio yaitu \[\phi=\frac{1+\sqrt5}{2} = 1.618034...\]
- menuliskan fungsi dalam bentuk function
fa <- function(n){
1/(((1.618034)^n - (1-1.618034)^n)/sqrt(5))
}
- mendefinisikan kriteria stopping
stopping_criteria <- function(y_current,y_before){
abs(y_current-y_before)
}
- menentukan nilai awal untuk kriteria Stopping
#nilai awal kriteria stopping
error <- 10
#nilai awal deret
z0 <- 0
# nilai awal iterasi
n <- 1
- menuliskan iterasi untuk jumlah deret
while (error>0.00001) {
z <- z0 + fa(n)
error <- stopping_criteria(z,z0)
z0 <- z
n <- n+1
}
- jumlahan deret
z
## [1] 3.359872
- kriteria Stopping
error
## [1] 8.237706e-06
Soal 1 alternatif
untuk mencari jumlahan deret Reciprocal Fibonacci Constant dapat juga digunakan fungsi sebagai berikut
fib <- function(n) {
fibonacci = c()
Un = c()
fibonacci[1]=1
fibonacci[2]=1
Un[1]=1
Un[2]=1
if (n<3) {
return(Un[n])
}
else {
for (i in 3:n) {
fibonacci[i]=fibonacci[i-1]+fibonacci[i-2]
Un[i]=1/fibonacci[i]
}
return(Un[i])
}
}
- kriteria Stopping
stopping_criteria <- function(y_current,y_before){
abs(y_current-y_before)
}
- menentukan nilai awal
galat <- 10
#nilai awal deret
z0 <- 0
#nilai awal iterasi
n <- 1
- iterasi untuk jumlah deret
while (galat>0.00001) {
z1 <- z0 + fib(n)
galat <- stopping_criteria(z1,z0)
z0 <- z1
n <- n+1
}
- jumlahan deret
z1
## [1] 3.359872
- kriteria stopping
error
## [1] 8.237706e-06
Soal 2
Susunlah sintaks R untuk penjumlahan deret berikut!
\[Z=10-2+0.4-0.08+...\]
Jawab:
deret tersebut merupakan deret geometri dengan suku pertama \(a=10\) dan rasionya \(r=-\frac{1}{5}\), rumus untuk deret geometri tersebut yaitu
\[Z_{n}=10\times\left(-\frac{1}{5}\right)^{n}\]
- menuliskan rumus kedalam bentuk fungsi
fb<-function(n){
(10) * ((-1/5)^(n))
}
- kriteria stopping
stopping_criteria <- function(y_current,y_before){
abs(y_current-y_before)
}
- menentukan nilai awal
#nilai awal krtieria stopping
error <- 10
#nilai awal deret
z0 <- 0
#nilai awal iterasi
n <- 0
- iterasi untuk jumlahan deret
#iterasi untuk mencari jumlah deret
while (error>0.00001) {
z <- z0 + fb(n)
error <- stopping_criteria(z,z0)
z0 <- z
n <- n+1
}
- hasil jumlahan deret
z
## [1] 8.333332
- kriteria stopping
error
## [1] 5.12e-06
Soal 2 alternatif
untuk mencari jumlahan deret geometri \(Z\) dapat juga menggunakan fungsi berikut
\[Z_{n}=10\times\left(-\frac{1}{5}\right)^{n-1}\]
fc<-function(n){
(10) * ((-1/5)^(n-1))
}
#kriteria stopping
stopping_criteria <- function(y_current,y_before){
abs(y_current-y_before)
}
#nilai awal krtieria stopping
error <- 10
#nilai awal deret
z0 <- 0
#nilai awal iterasi
n <- 1
#iterasi untuk mencari jumlah deret
while (error>0.00001) {
z <- z0 + fc(n)
error <- stopping_criteria(z,z0)
z0 <- z
n <- n+1
}
- hasil jumlahan deret
z
## [1] 8.333332
- kriteria Stopping
error
## [1] 5.12e-06
Soal 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]\]
Jawab :
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
- fungsi berikut merupakan fungsi yang memiliki input
xdan outputnya merupakan vektor yang sudah terurut
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
- membandingkan dengan fungsi bawaan descending
sort(x,TRUE)
## [1] 102 101 45 21 13 9 7 6
- menggunakan library
microbenchmarkuntuk membandingkan kecepatan running user-defined-function antarafungsi_urutandan fungsi bawaan (sort).
library("microbenchmark")
microbenchmark::microbenchmark(sort(x,TRUE),fungsi_urutan(x))
## Unit: microseconds
## expr min lq mean median uq max neval
## sort(x, TRUE) 30.8 32.35 40.982 35.3 37.5 189.6 100
## fungsi_urutan(x) 6.1 7.10 8.646 7.8 8.5 30.4 100