# Nama : Brenanda Caesa Pamudya
# NRP : 5003251085
# Kelas : D
#Soal No.1 A
my_factorial <- function(n) {
result <- 1
if (n == 0) return(1)
for (i in 1:n) {
result <- result * i
}
result
}
maclaurin_exp <- function(x, n) {
result <- 0
for (k in 0:n) {
result <- result + x^k / my_factorial(k)
}
result
}
cat("exp(-1) orde 5 =", maclaurin_exp(-1, 5), "\n")
exp(-1) orde 5 = 0.3666667
#Soal No.1 B
my_factorial <- function(n) {
result <- 1
if (n == 0) return(1)
for (i in 1:n) {
result <- result * i
}
result
}
maclaurin_sin <- function(x) {
result <- 0
k <- 0
repeat {
term <- (-1)^k * x^(2*k + 1) / my_factorial(2*k + 1)
if (abs(term) < 1e-5) break
result <- result + term
k <- k + 1
}
result
}
cat("sin(pi/6) =", maclaurin_sin(pi / 6), "\n")
sin(pi/6) = 0.5000021
#Soal No.2
moving_average <- function(data, k) {
n <- length(data)
result <- rep(NA, n)
for (t in k:n) {
total <- 0
for (i in 0:(k - 1)) {
total <- total + data[t - i]
}
result[t] <- total / k
}
result
}
data <- c(4.1, 4.9, 6.2, 6.9, 6.8, 4.4, 5.7, 5.8, 6.9, 4.7, 6, 4.9)
mt3 <- moving_average(data, 3)
print(data.frame(t = 1:length(data), Data = data, Mt3 = mt3), row.names = FALSE)
t Data Mt3
1 4.1 NA
2 4.9 NA
3 6.2 5.066667
4 6.9 6.000000
5 6.8 6.633333
6 4.4 6.033333
7 5.7 5.633333
8 5.8 5.300000
9 6.9 6.133333
10 4.7 5.800000
11 6.0 5.866667
12 4.9 5.200000
LS0tCnRpdGxlOiAiQXNzaWdubWVudCAzIEtvbXB1dGFzaSBTdGF0aXN0aWthIgphdXRob3I6ICJCcmVuYW5kYSBDYWVzYSBQYW11ZHlhIHwgNTAwMzI1MTA4NSIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CiMgTmFtYSAgOiBCcmVuYW5kYSBDYWVzYSBQYW11ZHlhCiMgTlJQICAgOiA1MDAzMjUxMDg1CiMgS2VsYXMgOiBECgojU29hbCBOby4xIEEKbXlfZmFjdG9yaWFsIDwtIGZ1bmN0aW9uKG4pIHsKICByZXN1bHQgPC0gMQogIGlmIChuID09IDApIHJldHVybigxKQogIGZvciAoaSBpbiAxOm4pIHsKICAgIHJlc3VsdCA8LSByZXN1bHQgKiBpCiAgfQogIHJlc3VsdAp9CgptYWNsYXVyaW5fZXhwIDwtIGZ1bmN0aW9uKHgsIG4pIHsKICByZXN1bHQgPC0gMAogIGZvciAoayBpbiAwOm4pIHsKICAgIHJlc3VsdCA8LSByZXN1bHQgKyB4XmsgLyBteV9mYWN0b3JpYWwoaykKICB9CiAgcmVzdWx0Cn0KCmNhdCgiZXhwKC0xKSBvcmRlIDUgPSIsIG1hY2xhdXJpbl9leHAoLTEsIDUpLCAiXG4iKQpgYGAKCmBgYHtyfQojU29hbCBOby4xIEIKbXlfZmFjdG9yaWFsIDwtIGZ1bmN0aW9uKG4pIHsKICByZXN1bHQgPC0gMQogIGlmIChuID09IDApIHJldHVybigxKQogIGZvciAoaSBpbiAxOm4pIHsKICAgIHJlc3VsdCA8LSByZXN1bHQgKiBpCiAgfQogIHJlc3VsdAp9CgptYWNsYXVyaW5fc2luIDwtIGZ1bmN0aW9uKHgpIHsKICByZXN1bHQgPC0gMAogIGsgPC0gMAogIHJlcGVhdCB7CiAgICB0ZXJtIDwtICgtMSleayAqIHheKDIqayArIDEpIC8gbXlfZmFjdG9yaWFsKDIqayArIDEpCiAgICBpZiAoYWJzKHRlcm0pIDwgMWUtNSkgYnJlYWsKICAgIHJlc3VsdCA8LSByZXN1bHQgKyB0ZXJtCiAgICBrIDwtIGsgKyAxCiAgfQogIHJlc3VsdAp9CgpjYXQoInNpbihwaS82KSA9IiwgbWFjbGF1cmluX3NpbihwaSAvIDYpLCAiXG4iKQpgYGAKCmBgYHtyfQojU29hbCBOby4yCm1vdmluZ19hdmVyYWdlIDwtIGZ1bmN0aW9uKGRhdGEsIGspIHsKICBuIDwtIGxlbmd0aChkYXRhKQogIHJlc3VsdCA8LSByZXAoTkEsIG4pCiAgZm9yICh0IGluIGs6bikgewogICAgdG90YWwgPC0gMAogICAgZm9yIChpIGluIDA6KGsgLSAxKSkgewogICAgICB0b3RhbCA8LSB0b3RhbCArIGRhdGFbdCAtIGldCiAgICB9CiAgICByZXN1bHRbdF0gPC0gdG90YWwgLyBrCiAgfQogIHJlc3VsdAp9CgpkYXRhIDwtIGMoNC4xLCA0LjksIDYuMiwgNi45LCA2LjgsIDQuNCwgNS43LCA1LjgsIDYuOSwgNC43LCA2LCA0LjkpCgptdDMgPC0gbW92aW5nX2F2ZXJhZ2UoZGF0YSwgMykKCnByaW50KGRhdGEuZnJhbWUodCA9IDE6bGVuZ3RoKGRhdGEpLCBEYXRhID0gZGF0YSwgTXQzID0gbXQzKSwgIHJvdy5uYW1lcyA9IEZBTFNFKQpgYGAKCg==