Найти значение ежемесячной ставки по кредиту из формулы для расчета ежемесячного аннуитетного платежа
Есть формула для расчета ежемесячного аннуитентного платежа:
E = (S*r*(1+r)^m)/((1+r)^m-1)
где Е - ежемесячный аннуитентный платеж; S - сумма кредита; r - ежемесячная ставка кредитования в процентном выражении; m - срок кредитования, выраженный в месяцах.
Смог найти из формулы, чему равны S и m. А можно ли найти, чему равна r?
Ответы (1 шт):
Автор решения: extrn
→ Ссылка
Аналитическое решение вряд ли существует, но для численного должно быть достаточно Метода простой итерации с коэффициентом 1.
import math
def f(r, m):
if r == 0:
# функция не определена для r = 0 (жадные банкиры!)
# но в окрестностях стремится к 1/m
return 1 / m
else:
x = (1 + r) ** m
return r * x / (x - 1)
# сначала прямой расчет
S = 1000
r = 0.54321
m = 12
E = S * f(r, m)
# а теперь вычисляем r
k = E / S
r_n = 0
while not math.isclose(k_n := f(r_n, m), k):
r_n += k - k_n
print(r_n)
0.4628706856171801
0.5413339629682196
0.5431762228061379
0.5432093953880986
0.5432099891785781
0.5432099998063171
Вот так выглядят графики E/S = f(r, m) для разных m (красные для больших m),
Отрицательные значения r нас не интересуют (сейчас бы кредит под отрицательные проценты), для нулевых в коде сделал поправку.
