楼主: shadowaver
1000 8

[程序分享] 线性内插法计算内部收益率IRR的python代码 [推广有奖]

随心所欲不逾矩

已卖:1243份资源

教授

56%

还不是VIP/贵宾

-

威望
0
论坛币
8309 个
通用积分
689.8825
学术水平
18 点
热心指数
22 点
信用等级
13 点
经验
29706 点
帖子
889
精华
0
在线时间
1365 小时
注册时间
2007-9-27
最后登录
2025-12-30

楼主
shadowaver 在职认证  发表于 2025-3-15 13:27:56 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
内部收益率(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]:



二维码

扫码加我 拉你入群

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

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

关键词:python 收益率 内插法 IRR Discount 线性内插法计算内部收益率IRR的python代码

shadowaver@163.com
QQ 540722048

沙发
xujingjun 发表于 2025-3-16 08:55:18

藤椅
军旗飞扬 发表于 2025-3-16 09:23:08

板凳
HappyAndy_Lo 发表于 2025-3-16 15:02:51

报纸
albertwishedu 发表于 2025-3-16 15:03:15

地板
yiyijiayuan 发表于 2025-3-16 15:35:36
看不懂哦。

7
uandi 发表于 2025-3-16 19:45:36
谢谢分享,可以录入python试试看。

8
512661101 发表于 2025-3-16 20:57:14

9
sunnyzhxg 发表于 2025-3-16 22:31:44
谢谢分享!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 08:34