Bootstrap

等额本息 or 等额本金?月供不变 or 期数不变

目录

  • 0、变量约定
  • 1、前提知识
  • 2、等额本息
    • 2、1 基本推导
    • 2、2 提前还贷
      • 2、2、1 保持月供不变,缩短还贷期限
      • 2、2、2 保持还贷期限不变,缩短月供
    • 2、3 python实现
  • 3、等额本金
    • 3、1 基本推导
    • 3、2 提前还贷
    • 3、3 python实现
  • 参考文献:

0、变量约定

Input \textup{Input} Input
本金,其实就是向银行的贷款,即负债 \textup{本金,其实就是向银行的贷款,即负债} 本金,其实就是向银行的贷款,即负债 P P P
贷款期数: \textup{贷款期数:} 贷款期数: n n n
贷款利率: \textup{贷款利率:} 贷款利率: i i i ,一般按月偿还,如果是年化利率需要除以12得到月利率, \textup{,一般按月偿还,如果是年化利率需要除以12得到月利率,} ,一般按月偿还,如果是年化利率需要除以12得到月利率, L R P / 12 LRP/12 LRP/12

Output \textup{Output} Output
累计本息之和: \textup{累计本息之和:} 累计本息之和: S S S
利息总和: \textup{利息总和:} 利息总和: I I I
每月月供: \textup{每月月供:} 每月月供: Y Y Y
每月月供中应还本金: \textup{每月月供中应还本金:} 每月月供中应还本金: Y k P Y_{k}^{P} YkP
每月月供中应还利息: \textup{每月月供中应还利息:} 每月月供中应还利息: Y k I Y_{k}^{I} YkI
已还 \textup{已还} 已还 k k k 期之后剩余本金: \textup{期之后剩余本金:} 期之后剩余本金: P k P_{k} Pk (这里是指如果k期之后不选择继续背负贷款而是一次性结清所需要付的钱)

1、前提知识

复利计息:是指借款人在每期末不提取利息,而将该期利息转为下期的本金,下期再按照本息和的总额计息,即不但本金产生利息,而且利息部分也产生利息的计息方式。如果按照复利计息方式计息,则本息和的计算公式为: S = P ∗ ( 1 + i ) n S=P*(1+i)^{n} S=P(1+i)n,贷款和存钱都可以按照复利进行计算
等比数列前N项和公式: S n = a 1 ∗ q n − 1 q − 1 ( q ≠ 1 ) S_{n}=a_{1}*\frac{q^n-1}{q-1}(q \neq 1) Sn=a1q1qn1(q=1)
等差数列前N项和公式: S n = n ∗ a 1 + a n 2 S_{n}=n*\frac{a_{1}+a_{n}}{2} Sn=n2a1+an

2、等额本息

2、1 基本推导

银行贷款之后本人其实就已经事实拥有本金等值的资产,这笔钱已经付给开发商。
我们开始推导 Y Y Y P k P_{k} Pk

  • 我们第0期之后剩余本金, P 0 = P P_{0}=P P0=P
  • 我们第1期之后剩余本金, P 1 = P ∗ ( 1 + i ) − Y P_{1}=P*(1+i)-Y P1=P(1+i)Y,本金已经复利一个月,产生了一个月的时间价值,本月我们又换款了一个月的月供,所以如果还款一个月之后立即结清贷款所需本金就是上面的数值
  • 我们第2期之后剩余本金,需要根据第一个月剩余的本金进行复利, P 2 = P 1 ∗ ( 1 + i ) − Y = ( P ∗ ( 1 + i ) − Y ) ( 1 + i ) − Y = P ∗ ( 1 + i ) 2 − Y ( ( 1 + i ) + 1 ) P_{2}=P_{1}*(1+i)-Y=(P*(1+i)-Y)(1+i)-Y=P*(1+i)^2-Y((1+i)+1) P2=P1(1+i)Y=(P(1+i)Y)(1+i)Y=P(1+i)2Y((1+i)+1)
  • 同理,我们第k期之后剩余本金,需要根据第k-1个月剩余的本金进行复利, P k = P k − 1 ∗ ( 1 + i ) − Y = P ∗ ( 1 + i ) k − Y ( ( 1 + i ) k − 1 + . . . + 1 ) = P ∗ ( 1 + i ) k − Y ( ( 1 + i ) k − 1 ) i ) = ( P − Y i ) ∗ ( 1 + i ) k + Y i P_{k}=P_{k-1}*(1+i)-Y=P*(1+i)^k-Y((1+i)^{k-1}+...+1)=P*(1+i)^k-Y(\frac{(1+i)^k-1)}{i})=(P-\frac{Y}{i})*(1+i)^k+\frac{Y}{i} Pk=Pk1(1+i)Y=P(1+i)kY((1+i)k1+...+1)=P(1+i)kY(i(1+i)k1))=(PiY)(1+i)k+iY,这是一个指数函数 y = a x + b ( a ≠ 1 ) y=a^x+b(a \neq 1) y=ax+b(a=1)
  • 如果我们中间不会提前还款,一直按月还款直到第n期结束,那么此时我们第n期之后剩余本金应该是0,即表示贷款全部结清,
    P n = P n − 1 ∗ ( 1 + i ) − Y = P ∗ ( 1 + i ) n − Y ( ( 1 + i ) n − 1 + . . . + 1 ) = P ∗ ( 1 + i ) n − Y ( ( 1 + i ) n − 1 ) i ) = 0 P_{n}=P_{n-1}*(1+i)-Y=P*(1+i)^n-Y((1+i)^{n-1}+...+1)=P*(1+i)^n-Y(\frac{(1+i)^n-1)}{i})=0 Pn=Pn1(1+i)Y=P(1+i)nY((1+i)n1+...+1)=P(1+i)nY(i(1+i)n1))=0,所以 Y = P ∗ ( 1 + i ) n ∗ i ( 1 + i ) n − 1 Y=\frac{P*(1+i)^n*i}{(1+i)^n-1} Y=(1+i)n1P(1+i)ni,这也就是在房贷合同上写的月供公式。进而可知 Y = P ∗ i ∗ ( 1 + i ) n ( 1 + i ) n − 1 > P ∗ i Y=P*i*\frac{(1+i)^n}{(1+i)^n-1}>P*i Y=Pi(1+i)n1(1+i)n>Pi,等价于, P − Y i < 0 P-\frac{Y}{i}<0 PiY<0,由此 P k P_{k} Pk一定是递减的函数,即每月还款之后所剩本金一直是递减的,而不是递增的,(当然不能越还越多)

接下来开始推导 Y k P Y_{k}^{P} YkP Y k I Y_{k}^{I} YkI

  1. 每月所还利息和所还本金加和等于本月的月供, Y k P + Y k I = Y Y_{k}^{P} + Y_{k}^{I} = Y YkP+YkI=Y
  2. 每月所还利息应该是上一个月所剩本金乘以利率得到的, Y k I = P k − 1 ∗ i = ( P − Y i ) ∗ i ∗ ( 1 + i ) k − 1 + Y = ( i ∗ P − Y ) ∗ ( 1 + i ) k − 1 + Y Y_{k}^{I}=P_{k-1}*i=(P-\frac{Y}{i})*i*(1+i)^{k-1}+Y=(i*P-Y)*(1+i)^{k-1}+Y YkI=Pk1i=(PiY)i(1+i)k1+Y=(iPY)(1+i)k1+Y,由此 Y k P = Y − Y k I = ( Y − i ∗ P ) ∗ ( 1 + i ) k − 1 Y_{k}^{P}=Y-Y_{k}^{I}=(Y-i*P)*(1+i)^{k-1} YkP=YYkI=(YiP)(1+i)k1

利息总和为 I = Y n I + Y n − 1 I + . . . + Y 1 I = ( i ∗ P − Y ) [ ( 1 + i ) n − 1 + . . . + 1 ] + n ∗ Y = n ∗ Y + ( i ∗ P − Y ) ∗ ( 1 + i ) n − 1 i = P ∗ ( ( 1 + i ) n − 1 ) + Y i ∗ ( n i + 1 − ( 1 + i ) n ) = P ∗ ( ( 1 + i ) n − 1 ) + P ∗ ( 1 + i ) n ( 1 + i ) n − 1 ∗ ( n i + 1 − ( 1 + i ) n ) = P ∗ ( 1 + i ) n ∗ i ∗ n ( 1 + i ) n − 1 − P I= Y_{n}^{I}+Y_{n-1}^{I}+...+Y_{1}^{I}=(i*P-Y)[(1+i)^{n-1}+...+1]+n*Y=n*Y+(i*P-Y)*\frac{(1+i)^n-1}{i}=P*((1+i)^n-1)+\frac{Y}{i}*(ni+1-(1+i)^n)=P*((1+i)^n-1)+\frac{P*(1+i)^n}{(1+i)^n-1}*(ni+1-(1+i)^n)=\frac{P*(1+i)^n*i*n}{(1+i)^n-1}-P I=YnI+Yn1I+...+Y1I=(iPY)[(1+i)n1+...+1]+nY=nY+(iPY)i(1+i)n1=P((1+i)n1)+iY(ni+1(1+i)n)=P((1+i)n1)+(1+i)n1P(1+i)n(ni+1(1+i)n)=(1+i)n1P(1+i)ninP

所还的本息总和为 S = ( Y n I + Y n P ) + . . . + Y 1 I + Y 1 I = n ∗ Y S=(Y_{n}^{I}+Y_{n}^{P}) +...+Y_{1}^{I}+Y_{1}^{I}=n*Y S=(YnI+YnP)+...+Y1I+Y1I=nY

综上:

  1. Y = P ∗ ( 1 + i ) n ∗ i ( 1 + i ) n − 1 Y=\frac{P*(1+i)^n*i}{(1+i)^n-1} Y=(1+i)n1P(1+i)ni
  2. P k = ( P − Y i ) ∗ ( 1 + i ) k + Y i P_{k}=(P-\frac{Y}{i})*(1+i)^k+\frac{Y}{i} Pk=(PiY)(1+i)k+iY
  3. Y k I = ( i ∗ P − Y ) ∗ ( 1 + i ) k − 1 + Y Y_{k}^{I}=(i*P-Y)*(1+i)^{k-1}+Y YkI=(iPY)(1+i)k1+Y
  4. Y k P = ( Y − i ∗ P ) ∗ ( 1 + i ) k − 1 Y_{k}^{P}=(Y-i*P)*(1+i)^{k-1} YkP=(YiP)(1+i)k1
  5. I = P ∗ ( 1 + i ) n ∗ i ∗ n ( 1 + i ) n − 1 − P I=\frac{P*(1+i)^n*i*n}{(1+i)^n-1}-P I=(1+i)n1P(1+i)ninP
  6. S = n ∗ Y = n ∗ P ∗ ( 1 + i ) n ∗ i ( 1 + i ) n − 1 S=n*Y=n*\frac{P*(1+i)^n*i}{(1+i)^n-1} S=nY=n(1+i)n1P(1+i)ni

2、2 提前还贷

假设第k期之后开始提前还贷,那么
提前还贷的金额, \textup{提前还贷的金额,} 提前还贷的金额, T T T
贷款利率: \textup{贷款利率:} 贷款利率: i i i 不变
新的本金, \textup{新的本金,} 新的本金, P k ′ = P k − T P_{k}^{'}=P_{k}-T Pk=PkT
新的贷款期数: \textup{新的贷款期数:} 新的贷款期数: n ′ n^{'} n
新的月供, \textup{新的月供,} 新的月供, Y ′ = P k ′ ∗ ( 1 + i ) n ′ ∗ i ( 1 + i ) n ′ − 1 Y^{'}=\frac{P_{k}^{'}*(1+i)^{n^{'}}*i}{(1+i)^{n^{'}}-1} Y=(1+i)n1Pk(1+i)ni
新的本息和, \textup{新的本息和,} 新的本息和, S ′ = Y ′ ∗ n ′ S^{'}=Y^{'}*n^{'} S=Yn
提前还款之后本息和的差值 \textup{提前还款之后本息和的差值} 提前还款之后本息和的差值 Δ S = S − k ∗ Y − S ′ − T \Delta S=S-k*Y-S^{'}-T ΔS=SkYST

2、2、1 保持月供不变,缩短还贷期限

新的月供和旧的月供相等, Y ′ = P k ′ ∗ ( 1 + i ) n ′ ∗ i ( 1 + i ) n ′ − 1 = Y Y^{'}=\frac{P_{k}^{'}*(1+i)^{n^{'}}*i}{(1+i)^{n^{'}}-1}=Y Y=(1+i)n1Pk(1+i)ni=Y
可以得到 n ′ = l o g ( Y / ( Y − i ∗ ( P k − T ) ) ) l o g ( 1 + i ) n^{'}=\frac{log(Y/(Y-i*(P_{k}-T)))}{log(1+i)} n=log(1+i)log(Y/(Yi(PkT)))
提前还款之后本息和的差值 \textup{提前还款之后本息和的差值} 提前还款之后本息和的差值 Δ S = S − k ∗ Y − S ′ − T = ( n − k − n ′ ) ∗ Y − T \Delta S=S-k*Y-S^{'}-T=(n-k-n^{'})*Y-T ΔS=SkYST=(nkn)YT,是一个关于T和k的函数,

2、2、2 保持还贷期限不变,缩短月供

新的贷款期数: \textup{新的贷款期数:} 新的贷款期数: n ′ = n − k n^{'}=n-k n=nk
新的月供, Y ′ = P k ′ ∗ ( 1 + i ) n − k ∗ i ( 1 + i ) n − k − 1 Y^{'}=\frac{P_{k}^{'}*(1+i)^{n-k}*i}{(1+i)^{n-k}-1} Y=(1+i)nk1Pk(1+i)nki
提前还款之后本息和的差值 \textup{提前还款之后本息和的差值} 提前还款之后本息和的差值 Δ S = S − k ∗ Y − S ′ − T = n ∗ Y − k ∗ Y − ( n − k ) ∗ Y ′ − T = ( n − k ) ( Y − Y ′ ) − T \Delta S=S-k*Y-S^{'}-T=n*Y-k*Y-(n-k)*Y^{'}-T=(n-k)(Y-Y^{'})-T ΔS=SkYST=nYkY(nk)YT=(nk)(YY)T,是一个关于T和k的函数,

2、3 python实现

import numpy as np


def inputParam():
    print("您选择等额本息方式进行贷款")
    lpr = float(input("请输入您的LRP:(单位为%) "))
    P = int(input("请输入您的本金:(单位为万) ")) * 10000
    n = int(input("请输入您的贷款期数:"))
    i = round(lpr / 1200, 6)
    print("您输入的参数为:P={}, n={}, i={}".format(P, n, i))
    return P,n,i


def calculate(P, n, i):
    iofn = (1 + i) ** n
    Y = round((i * iofn * P) / (iofn - 1), 4)
    I = round((i * iofn * P * n) / (iofn - 1) - P, 4)
    Pk = calculatePk(P, Y, i, n)
    YI = calculateYI(P, Y, i, n)
    YP = calculateYP(P, Y, i, n)
    print("计算可得以下参数:Y={}, I={} ".format(Y, I))
    for k in range(1,n):
        print("还款{}期之后剩余本金{}, 当期支付利息{}, 当期支付本金{}".format(k, Pk[k], YI[k], YP[k]))



def calculatePk(P, Y, i, n):
    tmp = Y / i
    result = np.ones(n+1)
    for k in range(1,n):
        result[k] = (P - tmp) * (1 + i) ** k + tmp
    return result


def calculateYI(P, Y, i, n):
    result = np.ones(n+1)
    for k in range(1,n):
        result[k] = (i * P - Y) * (1 + i) ** (k-1) + Y
    return result


def calculateYP(P, Y, i, n):
    result = np.ones(n+1)
    for k in range(1,n):
        result[k] = (Y - i * P) * (1 + i) ** (k-1)
    return result


if __name__ == '__main__':
    P, n, i = inputParam()
    calculate(P, n, i)

3、等额本金

3、1 基本推导

等额本金是指每月所还的本金是固定的,即 Y k P = P n Y_{k}^{P}=\frac{P}{n} YkP=nP,
每个月的剩余本金, P k = P − k ∗ P n P_{k}=P-k*\frac{P}{n} Pk=PknP
每个月的利息是,上一个月的本金乘以利息, Y k I = P k − 1 ∗ i = ( P − ( k − 1 ) ∗ P n ) ∗ i Y_{k}^{I}=P_{k-1}*i=(P-(k-1)*\frac{P}{n})*i YkI=Pk1i=(P(k1)nP)i
每月的月供, Y k = Y k P + Y k I = ( P − ( k − 1 ) ∗ P n ) ∗ i + P n Y_{k}=Y_{k}^{P}+Y_{k}^{I}=(P-(k-1)*\frac{P}{n})*i+\frac{P}{n} Yk=YkP+YkI=(P(k1)nP)i+nP
利息之和, I = Y n I + . . . + Y 1 I = i ∗ ( n ∗ P − P n ∗ n ( n − 1 ) 2 ) = ( n + 1 ) ∗ i ∗ P 2 I=Y_{n}^{I}+...+Y_{1}^{I}=i*(n*P-\frac{P}{n}*\frac{n(n-1)}{2})=\frac{(n+1)*i*P}{2} I=YnI+...+Y1I=i(nPnP2n(n1))=2(n+1)iP
累计本息和, S = Y n + . . . + Y 1 = ( n + 1 ) ∗ i ∗ P 2 + P S=Y_{n}+...+Y_{1}=\frac{(n+1)*i*P}{2}+P S=Yn+...+Y1=2(n+1)iP+P

3、2 提前还贷

3、3 python实现

参考文献:

https://www.cnblogs.com/mq0036/p/5209823.html
https://zhuanlan.zhihu.com/p/617706691?utm_psn=1716045786893381632

;