Newton-Raphson无法正常工作-到期价值年金到期公式

时间:2018-08-26 00:50:41

标签: python finance newtons-method

我正在编写“年金到期价值”计算器,该计算器使用户可以在公式中找到未知数。公式为fv = (1 + i) * pp * ((1 + i)**n - 1) / i;其中fv是终值,pp是定期付款,i是利率,n是期​​间数。作为示例,假设pp = 100i = .2735 (27.35%)n = 11,则获得fv = 6187.56。在不知道i的情况下,我可以将比率插值为25%,并希望使用Newton-Raphson迭代来获得更准确的答案。但是,我下面的代码已关闭,因为它有所不同(它似乎适用于较小的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 :(得分:2)

似乎您在函数值的实现中缺少一对(放在适当位置的)括号。脚本的第9行可能应该显示为

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及其派生词,对其进行测试,然后在Newton-Raphson方法中使用这些经过测试的函数。

顺便说一下,Newton-Raphson方法本身已经在scipy包中实现了(请参见here),以及其他查找根的方法。

答案 1 :(得分:0)

对于年金到期公式的终值,以上公式都缺少最后的定期付款(pp)。以下适用于正和负利率。

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