相同月利率条件下不同还款方式贷款的APR与IRR研究

前提假设

  1. 因为常见的信贷产品还款期数定义都是按照月,假设只借一期的利率(月利率)为r,在此条件下,研究不同还款方式下的APR和IRR计算结果与r、期数n、本金C这几个变量的关系;
  2. 约束条件:1)月利率为r;2)在第n期期末结束时,还清所有本息;
  3. IRR:根据净现值等于0时的折现率计算出实际月利率, I R R = 12 r a c t IRR=12r_{act} IRR=12ract
  4. APR:年化利率,以一年(12个月)为计息长度时,利息总和占本金的百分比;

一次性还本付息

  1. 计算现金流:
    P i = { − C , i = 0 0 , 0 < i < n C + C r n , i = n P_i= \begin{cases} -C, i=0 \\ 0, 0<i<n \\ C+Crn, i=n \end{cases} Pi= C,i=00,0<i<nC+Crn,i=n
  2. 计算IRR: ∑ i = 0 n P i ( 1 + r a c t ) i = 0 \sum_{i=0}^{n}\frac{P_i}{(1+r_{act})^i}=0 i=0n(1+ract)iPi=0,求得 I R R = ( ( 1 + r n ) 1 / n − 1 ) ∗ 12 IRR=((1+rn)^{1/n}-1)*12 IRR=((1+rn)1/n1)12
  3. 计算APR:利息总和*12/C/n,求得 A P R = 12 r APR=12r APR=12r;

先息后本

  1. P i = { − C , i = 0 C r , 0 < i < n C + C r , i = n P_i= \begin{cases} -C, i=0 \\ Cr, 0<i<n \\ C+Cr, i=n \end{cases} Pi= C,i=0Cr,0<i<nC+Cr,i=n
  2. 计算IRR: ∑ i = 0 n P i ( 1 + r a c t ) i = 0 \sum_{i=0}^{n}\frac{P_i}{(1+r_{act})^i}=0 i=0n(1+ract)iPi=0 − C + C r ( 1 ( 1 + r a c t ) 1 + . . . + 1 ( 1 + r a c t ) n − 1 ) + C + C r ( 1 + r a c t ) n = 0 -C+Cr(\frac{1}{(1+r_{act})^1}+...+\frac{1}{(1+r_{act})^{n-1}})+\frac{C+Cr}{(1+r_{act})^n}=0 C+Cr((1+ract)11+...+(1+ract)n11)+(1+ract)nC+Cr=0,简化得 ( r a c t − r ) = ( r a c t − r ) ( 1 + r a c t ) n (r_{act}-r)=(r_{act}-r)(1+r_{act})^n (ractr)=(ractr)(1+ract)n,得 I R R = 12 r IRR=12r IRR=12r
  3. 计算ARR:利息总和*12/C/n,求得 A P R = 12 r APR=12r APR=12r

等额本息

  1. P i = { − C , i = 0 C r ( 1 + r ) n ( 1 + r ) n − 1 , 0 < i < = n P_i= \begin{cases} -C, i=0 \\ C\frac{r(1+r)^n}{(1+r)^n-1}, 0<i<=n \end{cases} Pi={C,i=0C(1+r)n1r(1+r)n,0<i<=n
  2. 本质上等额本息的利息计算就是在考虑复利情况下计算出来的,所以 I R R = 12 r IRR=12r IRR=12r
  3. 计算APR:利息总和*12/C/n,求得 A P R = ( r ( 1 + r ) n ( 1 + r ) n − 1 − 1 n ) ∗ 12 APR=(\frac{r(1+r)^n}{(1+r)^n-1}-\frac{1}{n})*12 APR=((1+r)n1r(1+r)nn1)12;

等额本金

  1. P i = { − C , i = 0 C n + n + 1 − i n C r = 1 + ( n + 1 − i ) r n C , 0 < i < = n P_i= \begin{cases} -C, i=0 \\ \frac{C}{n}+\frac{n+1-i}{n}Cr=\frac{1+(n+1-i)r}{n}C, 0<i<=n \end{cases} Pi={C,i=0nC+nn+1iCr=n1+(n+1i)rC,0<i<=n
  2. 计算IRR: ∑ i = 0 n P i ( 1 + r a c t ) i = 0 \sum_{i=0}^{n}\frac{P_i}{(1+r_{act})^i}=0 i=0n(1+ract)iPi=0 − C + C ∑ i = 1 n ( 1 + ( n + 1 − i ) r n ) 1 ( 1 + r a c t ) i = 0 -C+C\sum_{i=1}^{n}(\frac{1+(n+1-i)r}{n})\frac{1}{(1+r_{act})^i}=0 C+Ci=1n(n1+(n+1i)r)(1+ract)i1=0,使用数值方法求解IRR,IRR与C无关,与r和n有关;实际计算可得,近似 I R R = 12 r IRR=12r IRR=12r;
  3. 计算APR:利息总和*12/C/n,求得 A P R = 6 r ( n + 1 ) n APR=\frac{6r(n+1)}{n} APR=n6r(n+1);

简单二分法求解IRR的程序

输入:现金流list;
输出:IRR;

def cal_irr(cash_flow_list):
    r_min, r_max = 0,2
    flag = False
    cnt = 0
    while((flag==False)&(cnt<=100)):
        cnt += 1
        r = (r_min + r_max) / 2
        npv = 0
        for ix,i in enumerate(cash_flow_list):
            npv += i/(1+r)**ix
        if abs(npv)<=0.00001:
            flag = True
            break
        else:
            if npv>0:
                r_min = r
            else:
                r_max = r
    return r*12

汇总

还款方式IRRAPR
一次性还本付息 ( ( 1 + r n ) 1 / n − 1 ) ∗ 12 ((1+rn)^{1/n}-1)*12 ((1+rn)1/n1)12 12 r 12r 12r
先息后本 12 r 12r 12r 12 r 12r 12r
等额本息 12 r 12r 12r ( r ( 1 + r ) n ( 1 + r ) n − 1 − 1 n ) ∗ 12 (\frac{r(1+r)^n}{(1+r)^n-1}-\frac{1}{n})*12 ((1+r)n1r(1+r)nn1)12
等额本金 ∑ i = 1 n 1 + ( n + 1 − i ) r n ( 1 + r a c t ) i − 1 = 0 \sum_{i=1}^{n}\frac{1+(n+1-i)r}{n(1+r_{act})^i}-1=0 i=1nn(1+ract)i1+(n+1i)r1=0的解 r a c t r_{act} ract乘以12, ≈ 12 r \approx12r 12r 6 r ( n + 1 ) n \frac{6r(n+1)}{n} n6r(n+1)

实验对比

  • 以月利率r(取0.005,0.01,0.03),期数n(取1、6、12、24、240),还款方式为自变量,APR和IRR为因变量,对比结果如如下。
  1. IRR计算结果:
    在这里插入图片描述

  2. APR计算结果:
    在这里插入图片描述

  3. r=1%,n=12时,各还款方式下IRR和APR对比:
    在这里插入图片描述

  4. r=1%,等额本金和等额本息还款方式下APR随着期数n的变化:
    (1)等额本金,APR随着n的增大单调递减,最终趋近6r;
    (2)等额本息,APR随着n的增大先下降再上升,最终趋近12r;
    (3)等额本息APR > 等额本息APR。
    在这里插入图片描述

  5. r=1%,本金C=30w,贷款36期(3年),月供流水对比:
    在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。
Hutool是一个Java工具包,它包含了一系列方便开发的工具类,涵盖了字符串处理、日期操作、加密解密、文件操作、集合操作等多种功能。对于实现IRR(利息收入比率,Interest Rate Ratio)这个概念,Hutool本身并没有直接提供计算IRR的函数,因为它是一个工具库,而非专门的金融计算库。 然而,如果你需要在Java项目中计算IRR,你可能需要借助于开源的数学库,比如Apache Commons Math或Joda-Time等,它们提供了更专业的金融计算功能。你可以使用这些库的复利计算方法来实现IRR的计算,步骤大致如下: 1. **设置现金流数据**:定义一系列现金流的时间点和金额,这通常是投资项目的收益或支出。 2. **创建序列或数组**:将现金流数据组织成适合复利计算的数据结构,比如时间序列或二维数组。 3. **计算内部收益率**:调用相关的金融函数,如`IRRCalculation`(如果有的话)或自定义复利公式,输入现金流数据来计算IRR。 例如,使用Apache Commons Math,你可以这样做: ```java import org.apache.commons.math3.finance.IRR; import org.apache.commons.math3.finance.SimpleCashFlow; List<CashFlow> cashFlows = ...; // 你的现金流数据 double irr = IRR.compute(cashFlows, SimpleCashFlow.PAYMENT_AT_TIME); ``` 如果你想要用Hutool来简化这个过程,可能需要结合其他库,或者自定义一些函数来封装这些计算。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值