Newton-Raphson 不工作 - 未来价值年金到期公式
Newton-Raphson not working - future value annuity due formula
我正在编写一个 '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%,并希望使用 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('')
看起来您在函数值的实现中缺少一对(正确放置的)括号。脚本的第 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),以及其他求根方法。
对于到期年金公式的终值,上述公式都缺少末尾的定期付款 (pp)。以下适用于正利率和负利率。
newton_raphson_i = i - ((1+i)*pp*((1+i)**n - 1) - fv*i) / ((n+1)*pp*(1+i)**n - fv - pp)
我正在编写一个 '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%,并希望使用 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('')
看起来您在函数值的实现中缺少一对(正确放置的)括号。脚本的第 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),以及其他求根方法。
对于到期年金公式的终值,上述公式都缺少末尾的定期付款 (pp)。以下适用于正利率和负利率。
newton_raphson_i = i - ((1+i)*pp*((1+i)**n - 1) - fv*i) / ((n+1)*pp*(1+i)**n - fv - pp)