内部收益率(IRR)是使项目净现值(NPV)等于零的折现率,用于评估投资项目的盈利能力。以下是其计算方法和步骤:
一、IRR的计算公式IRR满足以下方程:
NPV=∑t=0nCt(1+IRR)t=0NPV=t=0∑n(1+IRR)tCt=0其中:
- CtCt:第 tt 期的现金流(C0C0 为初始投资,通常为负值)。
- IRRIRR:内部收益率。
- nn:项目周期数。
二、计算步骤(手动试错法)- 列出现金流序列
确定每期的现金流入和流出。例如:
C0=−100, C1=30, C2=50, C3=40C0=−100, C1=30, C2=50, C3=40 - 设定NPV公式并寻找IRR范围
假设一个折现率 rr,计算对应的NPV。若:
- NPV > 0:说明IRR > rr,需尝试更大的 rr。
- NPV < 0:说明IRR < rr,需尝试更小的 rr。
示例试算:
- 当 r=10%r=10%:
NPV=301.1+501.12+401.13−100≈5.3 (正)NPV=1.130+1.1250+1.1340−100≈5.3 (正) - 当 r=15%r=15%:
NPV≈301.15+501.152+401.153−100≈−4.9 (负)NPV≈1.1530+1.15250+1.15340−100≈−4.9 (负)
- 线性插值法估算IRR
利用两个邻近的 rr 值(一个使NPV正,一个使NPV负),通过插值估算IRR:
IRR=r1+NPV1⋅(r2−r1)NPV1−NPV2IRR=r1+NPV1−NPV2NPV1⋅(r2−r1)代入示例数据(r1=10%,NPV1=5.3r1=10%,NPV1=5.3; r2=15%,NPV2=−4.9r2=15%,NPV2=−4.9):
IRR≈10%+5.3⋅(15%−10%)5.3−(−4.9)≈12.6%IRR≈10%+5.3−(−4.9)5.3⋅(15%−10%)≈12.6%
上代码:
# 内部收益率:NPV=0的时候的贴现率,即回报率
total=0
for i in range(10):
cash_flow=10000/(1+0.05)**(i+1)
total+=cash_flow
print(total)
# In[7]:
# 以上封装成函数
def discount(n,cp,r):
total=0
for i in range(10):
cash_flow=cp/(1+r)**(i+1)
total+=cash_flow
return total
# In[8]:
discount(10,10000,0.05)
# In[15]:
cash_flows_A=[-120,10,30,50,40,10]
for i,cash_flow in enumerate(cash_flows_A):
print(i,cash_flow)
# In[16]:
def npv_f(rate,cash_flows):
total=0
for i,cash_flow in enumerate(cash_flows):
total+=cash_flow/(1+rate)**(i+1)
return total
# In[17]:
npv_f(0.05,cash_flows_A)
# In[53]:
# 线性内插法计算内部收益率IRR
# 有两个项目的现金流:
cash_flows_A=[-120,10,30,50,40,10]
cash_flows_B=[-100,10,20,30,40,10]
def irr_f(cash_flows):
rate_l=0
rate_u=1
rate=(rate_l+rate_u)/2
npv=npv_f(rate,cash_flows)
while abs(npv)>0.000001:
if npv>0:
rate_l=rate
rate=(rate_l+rate_u)/2
npv=npv_f(rate,cash_flows)
else:
rate_u=rate
rate=(rate_l+rate_u)/2
npv=npv_f(rate,cash_flows)
return rate
# In[54]:
# In[55]:
irr_f(cash_flows_A)
# In[56]:
irr_f(cash_flows_B)
# In[58]:
npv_f(0.051938556134700775,cash_flows_A)
# In[67]: