如果Python中已知现金流的总现值和未来时间序列,如何找到贴现率值

2024-06-26 13:38:31 发布

您现在位置:Python中文网/ 问答频道 /正文

当我通过一个article时,我遇到了一个情况,我遇到了下面的多项式方程

以下是方程式,仅供参考

15446 = 537.06/(1+r) + 612.25/(1+r)**2 + 697.86/(1+r)**3 + 795.67/(1+r)**4 + 907.07/(1+r)**5

这是贴现现金流时间序列值,我们在金融中使用它,在应用适当的贴现率后,得到未来现金流现值的概念

因此,根据上面的等式,我需要在python编程环境中计算变量r?。我真的希望一定有一些库可以用来解这些方程

我解决了这个问题,我想使用numpy.npvAPI

import numpy as np
presentValue = 15446
futureValueList = [537.06, 612.25, 697.86,795.67, 907.07]
// I know it is not possible to get r from below. Just put
// it like this to describe my intention.
presentValue = np.npv(r, futureValueList)
print(r)

Tags: tonumpynparticle时间情况it序列
1条回答
网友
1楼 · 发布于 2024-06-26 13:38:31

您可以将您的NPV公式与最高幂或(1+r)相乘,然后用^{}求多项式的根(只取唯一的实数根,忽略复数根):

import numpy as np

presentValue = 15446
futureValueList = [537.06, 612.25, 697.86,795.67, 907.07]

roots = np.polynomial.polynomial.polyroots(futureValueList[::-1]+[-presentValue])
r = roots[np.argwhere(roots.imag==0)].real[0,0] - 1
print(r)
#-0.3332398877886278

由于给出的公式不完整,请参见第页。链接文章的第14条。正确的方程可以通过标准优化程序求解,例如^{}提供合理的初始猜测:

from scipy import optimize

def fun(r):
    r1 = 1 + r
    return 537.06/r1 +  612.25/r1**2 + 697.86/r1**3 + 795.67/r1**4 + 907.07/r1**5 * (1 + 1.0676/(r-.0676)) - 15446

roots = optimize.root(fun, [.1])
print(roots.x if roots.success else roots.message)
#[0.11177762]

相关问题 更多 >