如何解决如果在 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.npv API。
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)
解决方法
您可以将 NPV 公式与最高次幂或 (1+r)
相乘,然后用 polyroots
求多项式的根(只需取唯一的实根,忽略复数):
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
事实证明给出的公式不完整,请参见 p. 14 链接文章。可以使用标准优化程序求解正确的方程,例如optimize.root
提供合理的初步猜测:
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]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。