目录
- 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=a1∗q−1qn−1(q=1)
等差数列前N项和公式:
S
n
=
n
∗
a
1
+
a
n
2
S_{n}=n*\frac{a_{1}+a_{n}}{2}
Sn=n∗2a1+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)2−Y((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=Pk−1∗(1+i)−Y=P∗(1+i)k−Y((1+i)k−1+...+1)=P∗(1+i)k−Y(i(1+i)k−1))=(P−iY)∗(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=Pn−1∗(1+i)−Y=P∗(1+i)n−Y((1+i)n−1+...+1)=P∗(1+i)n−Y(i(1+i)n−1))=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)n−1P∗(1+i)n∗i,这也就是在房贷合同上写的月供公式。进而可知 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=P∗i∗(1+i)n−1(1+i)n>P∗i,等价于, P − Y i < 0 P-\frac{Y}{i}<0 P−iY<0,由此 P k P_{k} Pk一定是递减的函数,即每月还款之后所剩本金一直是递减的,而不是递增的,(当然不能越还越多)
接下来开始推导 Y k P Y_{k}^{P} YkP 和 Y k I Y_{k}^{I} YkI:
- 每月所还利息和所还本金加和等于本月的月供, Y k P + Y k I = Y Y_{k}^{P} + Y_{k}^{I} = Y YkP+YkI=Y
- 每月所还利息应该是上一个月所剩本金乘以利率得到的, 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=Pk−1∗i=(P−iY)∗i∗(1+i)k−1+Y=(i∗P−Y)∗(1+i)k−1+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=Y−YkI=(Y−i∗P)∗(1+i)k−1
利息总和为 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+Yn−1I+...+Y1I=(i∗P−Y)[(1+i)n−1+...+1]+n∗Y=n∗Y+(i∗P−Y)∗i(1+i)n−1=P∗((1+i)n−1)+iY∗(ni+1−(1+i)n)=P∗((1+i)n−1)+(1+i)n−1P∗(1+i)n∗(ni+1−(1+i)n)=(1+i)n−1P∗(1+i)n∗i∗n−P
所还的本息总和为 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=n∗Y
综上:
- Y = P ∗ ( 1 + i ) n ∗ i ( 1 + i ) n − 1 Y=\frac{P*(1+i)^n*i}{(1+i)^n-1} Y=(1+i)n−1P∗(1+i)n∗i
- P k = ( P − Y i ) ∗ ( 1 + i ) k + Y i P_{k}=(P-\frac{Y}{i})*(1+i)^k+\frac{Y}{i} Pk=(P−iY)∗(1+i)k+iY
- Y k I = ( i ∗ P − Y ) ∗ ( 1 + i ) k − 1 + Y Y_{k}^{I}=(i*P-Y)*(1+i)^{k-1}+Y YkI=(i∗P−Y)∗(1+i)k−1+Y
- Y k P = ( Y − i ∗ P ) ∗ ( 1 + i ) k − 1 Y_{k}^{P}=(Y-i*P)*(1+i)^{k-1} YkP=(Y−i∗P)∗(1+i)k−1
- 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)n−1P∗(1+i)n∗i∗n−P
- 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=n∗Y=n∗(1+i)n−1P∗(1+i)n∗i
2、2 提前还贷
假设第k期之后开始提前还贷,那么
提前还贷的金额,
\textup{提前还贷的金额,}
提前还贷的金额,
T
T
T
贷款利率:
\textup{贷款利率:}
贷款利率:
i
i
i 不变
新的本金,
\textup{新的本金,}
新的本金,
P
k
′
=
P
k
−
T
P_{k}^{'}=P_{k}-T
Pk′=Pk−T
新的贷款期数:
\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)n′−1Pk′∗(1+i)n′∗i
新的本息和,
\textup{新的本息和,}
新的本息和,
S
′
=
Y
′
∗
n
′
S^{'}=Y^{'}*n^{'}
S′=Y′∗n′
提前还款之后本息和的差值
\textup{提前还款之后本息和的差值}
提前还款之后本息和的差值,
Δ
S
=
S
−
k
∗
Y
−
S
′
−
T
\Delta S=S-k*Y-S^{'}-T
ΔS=S−k∗Y−S′−T
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)n′−1Pk′∗(1+i)n′∗i=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/(Y−i∗(Pk−T)))
提前还款之后本息和的差值
\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=S−k∗Y−S′−T=(n−k−n′)∗Y−T,是一个关于T和k的函数,
2、2、2 保持还贷期限不变,缩短月供
新的贷款期数:
\textup{新的贷款期数:}
新的贷款期数:
n
′
=
n
−
k
n^{'}=n-k
n′=n−k,
新的月供,
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)n−k−1Pk′∗(1+i)n−k∗i
提前还款之后本息和的差值
\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=S−k∗Y−S′−T=n∗Y−k∗Y−(n−k)∗Y′−T=(n−k)(Y−Y′)−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=P−k∗nP
每个月的利息是,上一个月的本金乘以利息,
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=Pk−1∗i=(P−(k−1)∗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−(k−1)∗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∗(n∗P−nP∗2n(n−1))=2(n+1)∗i∗P
累计本息和,
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)∗i∗P+P
3、2 提前还贷
3、3 python实现
参考文献:
https://www.cnblogs.com/mq0036/p/5209823.html
https://zhuanlan.zhihu.com/p/617706691?utm_psn=1716045786893381632