全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 python论坛
1001 8
2025-03-15
内部收益率(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​−NPV2​NPV1​⋅(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]:



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2025-3-16 08:55:18
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2025-3-16 09:23:08
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2025-3-16 15:02:51
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2025-3-16 15:03:15
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2025-3-16 15:35:36
看不懂哦。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群