Ньютон-Рафсон не работает - будущая стоимость аннуитета из-за формулы - PullRequest
0 голосов
/ 26 августа 2018

Я кодирую калькулятор Future Value of Annuity Due, который позволяет пользователю найти неизвестное в формуле.Формула fv = (1 + i) * pp * ((1 + i)**n - 1) / i;где fv - будущая стоимость, pp - периодический платеж, i - процентная ставка, а n - количество периодов.В качестве примера, принимая pp = 100, i = .2735 (27.35%) и n = 11, получаем fv = 6187.56.Не зная i, я могу интерполировать скорость, скажем, 25%, и хотел бы использовать итерацию Ньютона-Рафсона, чтобы получить более точный ответ.Тем не менее, мой код ниже отключен, так как он расходится (кажется, работает для небольших значений i, то есть 5%).

fv = 11807.795
pp = 1000
n = 10
i = .03

def newton_raphson_method(fv,pp,i,n):
    newton_raphson_i = i
    for num in range(1,20):
        newton_raphson_i = i - (1+i)*(pp*(1+i)**n - pp-fv*i) / ((n +1)*pp*(1+i)**n - fv)
        i = newton_raphson_i
        print(i)
    i = round(i,11)
    print('')
    print ('The newton interest rate is ' + str("%.9f" % (i * 100)) + '%')
    print('')

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Для будущей стоимости формулы аннуитетного платежа в обеих вышеуказанных формулах отсутствовал периодический платеж (п.п.) в конце.Ниже работает с положительными и отрицательными процентными ставками.

newton_raphson_i = i - ((1+i)*pp*((1+i)**n - 1) - fv*i) / ((n+1)*pp*(1+i)**n - fv - pp)
0 голосов
/ 28 августа 2018

Похоже, что в вашей реализации значения функции отсутствует пара (правильных) скобок.Девятая строка вашего сценария, вероятно, должна читать

newton_raphson_i = i - ((1+i)*(pp*(1+i)**n - pp) - fv*i) / ((n +1)*pp*(1+i)**n - fv)

или, что эквивалентно,

newton_raphson_i = i - ((1+i)*pp*((1+i)**n - 1) - fv*i) / ((n +1)*pp*(1+i)**n - fv)

В более общем смысле, я бы посоветовал вам реализовать future_value(pp, i, n) как функцию в вашем сценарии иПопробуй это.Затем вы можете также реализовать функцию, для которой вы хотите найти корень, который является (future_value - fv) * i, а также его производную, протестировать их и использовать эти проверенные функции в методе Ньютона-Рафсона.

ByКстати, сам метод Ньютона-Рафсона уже реализован в пакете scipy (см. здесь ), а также другие методы поиска корня.

...