python - 牛顿-拉夫森不起作用 - future 值(value)年金到期公式

标签 python finance newtons-method

我正在编写一个“到期年金的 future 值(value)”计算器,它允许用户在公式中找到未知数。公式为fv = (1 + i) * pp * ((1 + i)**n - 1) / i ;哪里fv是 future 值,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 中使用这些测试过的函数-拉夫森法。

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

关于python - 牛顿-拉夫森不起作用 - future 值(value)年金到期公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52022369/

相关文章:

python - Django/Python 中按查询集计数排序列表

python - 如何使用 Django 从数据库(MySQL)中选择 30 个唯一的随机值?

mysql - 基于重复项的 data.frame 条件求和

python - 在 Python (pandas) 中计算可变现金流 IRR

python - 类型错误:只能将元组(不是 "float")连接到元组

python - 剥离 URL - Python

javascript - 调用按键 :Value pair in Google Apps Script is returning "Undefined" instead of the value

c++ - 在 C++ 中作为输入的函数

scheme - Lisp (Scheme) 牛顿法

Python 不会打印到文本文件