Найти значение ежемесячной ставки по кредиту из формулы для расчета ежемесячного аннуитетного платежа

Есть формула для расчета ежемесячного аннуитентного платежа:

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),

desmos desmos

Отрицательные значения r нас не интересуют (сейчас бы кредит под отрицательные проценты), для нулевых в коде сделал поправку.

→ Ссылка