ActiveState Recipes站点有一个在Python中实现Internal Rate of Return的函数:
def irr(cashflows, iterations=100):
"""The IRR or Internal Rate of Return is the annualized effective
compounded return rate which can be earned on the invested
capital, i.e., the yield on the investment.
>>> irr([-100.0, 60.0, 60.0, 60.0])
0.36309653947517645
"""
rate = 1.0
investment = cashflows[0]
for i in range(1, iterations+1):
rate *= (1 - npv(rate, cashflows) / investment)
return rate
这段代码返回正确的值(至少对于我在Excel上检查过的几个示例),但是我想知道为什么为什么。在
有什么想法吗?在
在我看来也是假的。在
该方法称为定点迭代;例如,请参阅维基百科文章http://en.wikipedia.org/wiki/Fixed_point_iteration。在
其思想是,如果
rate
包含正确的值(即IRR),那么NPV为零,因此不会更改
rate
。因此,一旦找到IRR,迭代将不会改变它。不动点迭代有时收敛到正确的值,有时不收敛。@Gareth和@unutbu的例子表明,在这里它并不总是收敛的。在收敛的标准如下。在循环中编写update语句
^{pr2}$现在,如果右边对
rate
的导数在1和-1之间,那么该方法就会收敛。我不知道在什么情况下会发生这种情况。在您可能想知道为什么迭代没有做到
没有奇怪的
investment
变量。实际上,我也在想,如果导数条件满足,这也是一种不动点方法,它会收敛到IRR。我的猜测是,对于您给出的方法,导数条件在某些情况下是满足的,而对于没有investment
的方法则不是。在在我看来这是假的。收敛速度太慢,无法实际应用。在
相关问题 更多 >
编程相关推荐