Похоже на амортизацию кредита, вы можете попытаться создать формулу до ее кодирования.
<К сожалению, я не совсем уверен, как визуализировать LaTeX в Markdown SO здесь. Извините за презентацию. >
Пусть L - начальная сумма кредита, я - рассрочка платежа, а r - процентная ставка.
В период n = 0 непогашенная сумма кредита составляет L.
В период, n = 1, непогашенная сумма кредита составляет (1 + r) * L - I.
В период n = 2 непогашенная сумма кредита составляет (1 + r) ^ 2 * L - (1 + r) * I - I.
В период n = 3 непогашенная сумма кредита составляет (1 + r) ^ 3 * L - (1 + r) ^ 2 * I - (1 + r) * I - I.
В период n, непогашенная сумма кредита составляет (1 + r) ^ n * L - I * sum_ {k = 0} ^ {n-1} (1 + r) ^ k.
После чего это вопрос кодирования этого:
amor <- function(L, r, I, nvec) {
vapply(nvec,
function(n) {
if (n < 1L) stop("n must be > 0.")
L * (1+r)^n - I * sum((1+r)^(seq_len(n) -1L))
},
numeric(1))
}
amor(1000, r, 100, seq_len(12))
выход:
[1] 905.00000 809.52500 713.57262 617.14049 520.22619 422.82732 324.94146 226.56617 127.69900 28.33749 -71.52082 -171.87843
Следующая проблема, которую нужно решить, это «Это должно продолжаться до тех пор, пока экспозиция не станет равной 0». Вы можете приблизить общее количество периодов, используя n * I> L * (1 + r) ^ n
maxN <- round(uniroot(function(n) I*n - (1+r)^n*L, c(1, 1000))$root)
Затем используйте replace
, чтобы установить эти отрицательные числа на 0.
Надеюсь, это поможет.