# ATMARIANI NOVA LARASATI
# 5003251102
# KOMPUTASI STATISTIKA (D)
# ASSIGNMENT 3 (WEEK 6)
# ============================================================
# TUGAS 3 - KOMPUTASI STATISTIKA
# ============================================================
# ============================================================
# SOAL 1a
# Menghitung nilai eksponensial exp(x) menggunakan deret Maclaurin
# Rumus:
# exp(x) ≈ 1 + x + x^2/2! + x^3/3! + ... + x^n/n!
# Fungsi menerima input x dan n (orde deret)
# ============================================================
# Fungsi faktorial manual
faktorial <- function(n){
hasil <- 1
if(n == 0){
return(1)
}
for(i in 1:n){
hasil <- hasil * i
}
return(hasil)
}
# Fungsi exp(x) dengan pendekatan deret Maclaurin
exp_maclaurin <- function(x, n){
jumlah <- 0
for(i in 0:n){
suku <- (x^i) / faktorial(i) # menghitung tiap suku
jumlah <- jumlah + suku # menjumlahkan semua suku
}
return(jumlah)
}
# Contoh perhitungan
hasil_exp <- exp_maclaurin(-1, 5)
print(paste("Hasil exp(-1) orde 5 =", hasil_exp))
## [1] "Hasil exp(-1) orde 5 = 0.366666666666667"
# ============================================================
# SOAL 1b
# Menghitung nilai sin(x) dengan deret Maclaurin
# Rumus:
# sin(x) ≈ x - x^3/3! + x^5/5! - x^7/7! + ...
# Perhitungan berhenti jika nilai suku terakhir < 10^-5
# ============================================================
sin_maclaurin <- function(x){
jumlah <- 0
i <- 0
tanda <- 1
repeat{
pangkat <- 2*i + 1
suku <- tanda * (x^pangkat) / faktorial(pangkat)
jumlah <- jumlah + suku
# kondisi berhenti jika suku sangat kecil
if(abs(suku) < 1e-5){
break
}
i <- i + 1
tanda <- -tanda
}
return(jumlah)
}
# Contoh perhitungan
hasil_sin <- sin_maclaurin(pi/6)
print(paste("Hasil sin(pi/6) =", hasil_sin))
## [1] "Hasil sin(pi/6) = 0.499999991869023"
# ============================================================
# SOAL 2
# Menghitung Moving Average dengan k = 3
# Rumus:
# Mt(3) = (Yt + Yt-1 + Yt-2) / 3
# ============================================================
moving_average <- function(data, k = 3){
n <- length(data)
hasil <- rep(NA, n)
for(i in k:n){
total <- 0
for(j in 0:(k-1)){
total <- total + data[i - j]
}
hasil[i] <- total / k
}
return(hasil)
}
# Data dari soal
data <- c(4.1, 4.9, 6.2, 6.9, 6.8, 4.4, 5.7, 5.8, 6.9, 4.7, 6.0, 4.9)
# Hitung Moving Average
hasil_MA <- moving_average(data, 3)
# Tampilkan hasil
t <- 1:length(data)
output <- data.frame(
t = t,
Data = data,
Mt3 = round(hasil_MA, 2)
)
print(output)
## t Data Mt3
## 1 1 4.1 NA
## 2 2 4.9 NA
## 3 3 6.2 5.07
## 4 4 6.9 6.00
## 5 5 6.8 6.63
## 6 6 4.4 6.03
## 7 7 5.7 5.63
## 8 8 5.8 5.30
## 9 9 6.9 6.13
## 10 10 4.7 5.80
## 11 11 6.0 5.87
## 12 12 4.9 5.20