# a. anuitas jiwa seumur hidup
ax.diskrit <- function(i, age, B, C, w) {
  v <- 1/(1+i)
  ax.awal <- NULL
  for (k in 1:(w-age-1)) { 
    ax.awal[k] <- v^(k-1) * 
      (exp((-B/log(C)) * (C^(age+k-1) - 1))) /
      (exp((-B/log(C)) * (C^(age) - 1)))
  }
  ax.akhir <- NULL
  for (k in 1:(w-age)) { 
    ax.akhir[k] <- v^(k) *
      (exp((-B/log(C)) * (C^(age+k) - 1))) /
      (exp((-B/log(C)) * (C^(age) - 1)))
  }
  cat("anuitas awal =", sum(ax.awal), "\n")
  cat("anuitas akhir =", sum(ax.akhir), "\n")
}
# b anuitas jiwa berjangka 20 tahun
axn.diskrit <- function(i, age, B, C, n) {
  v <- 1/(1+i)
  ax.awal <- NULL
  for (k in 1:(n-1)) { 
    ax.awal[k] <- v^(k-1) *
      (exp((-B/log(C)) * (C^(age+k-1) - 1))) /
      (exp((-B/log(C)) * (C^(age) - 1)))
  }
  ax.akhir <- NULL
  for (k in 1:n) { 
    ax.akhir[k] <- v^(k) *
      (exp((-B/log(C)) * (C^(age+k) - 1))) /
      (exp((-B/log(C)) * (C^(age) - 1)))
  }
  cat("anuitas awal =", sum(ax.awal), "\n")
  cat("anuitas akhir =", sum(ax.akhir), "\n")
}
maxn.diskrit <- function(i, age, B, C, n, m) {
  v <- 1/(1+i)
  
  # Anuitas awal
  ax.awal <- numeric(m+n-1)
  ax.awal[1:(m-1)] <- 0
  for (k in m:(m+n-1)) {
    ax.awal[k] <- v^(k-1) * 
      (exp((-B/log(C)) * (C^(age+k-1) - 1))) / 
      (exp((-B/log(C)) * (C^(age) - 1)))
  }
  
  # Anuitas akhir
  ax.akhir <- numeric(m+n)
  ax.akhir[1:m] <- 0
  for (k in (m+1):(m+n)) {
    ax.akhir[k] <- v^(k) * 
      (exp((-B/log(C)) * (C^(age+k) - 1))) / 
      (exp((-B/log(C)) * (C^(age) - 1)))
  }
  
  cat("anuitas awal =", sum(ax.awal), "\n")
  cat("anuitas akhir =", sum(ax.akhir), "\n")
}
axp.diskrit <- function(i, age, B, C, w, n) {
  v <- 1/(1+i)
  
  # Anuitas awal
  ax.awal <- numeric(w-age-1)
  ax.awal[1:(n-1)] <- 0
  for (k in n:(w-age-n-1)) {
    ax.awal[k] <- v^(k-1) *
      (exp((-B/log(C)) * (C^(age+k-1) - 1))) /
      (exp((-B/log(C)) * (C^(age) - 1)))
  }
  
  # Anuitas akhir
  ax.akhir <- numeric(w-age)
  ax.akhir[1:n] <- 0
  for (k in (n+1):(w-age-n)) {
    ax.akhir[k] <- v^(k) *
      (exp((-B/log(C)) * (C^(age+k) - 1))) /
      (exp((-B/log(C)) * (C^(age) - 1)))
  }
  
  awal.pasti <- (1-v^n) / (1-v)
  akhir.pasti <- (1-v^n) / i
  
  cat("anuitas awal =", awal.pasti + sum(ax.awal), "\n")
  cat("anuitas akhir =", akhir.pasti + sum(ax.akhir), "\n")
}
# Menjalankan fungsi-fungsi aktuaria
ax.diskrit(i=0.05, age=30, B=1e-5, C=1.09, w=100)
## anuitas awal = 19.85393 
## anuitas akhir = 18.89044
axn.diskrit(i=0.05, age=30, B=1e-5, C=1.09, n=20)
## anuitas awal = 12.66734 
## anuitas akhir = 12.43479
maxn.diskrit(i=0.05, age=30, B=1e-5, C=1.09, n=20, m=5)
## anuitas awal = 10.72979 
## anuitas akhir = 9.723377
axp.diskrit(i=0.05, age=30, B=1e-5, C=1.09, w=100, n=20)
## anuitas awal = 19.31594 
## anuitas akhir = 18.08584