个人住房贷款计算器的数学原理
在上一篇随笔“用 C# 写个人住房贷款计算器”中提到,等本息法在利率不变的情况下,每月的还款额是固定的,并给出了计算公式,现在就让我们来推导出这个公式吧。本文还对等本息法和等本金法应付的总利息进行了比较,并讨论了利率为零时的等本息法的月还款额。
1. 等本息法月还款额计算公式的推导
在上一篇随笔“用 C# 写个人住房贷款计算器”中提到,等本息法在利率不变的情况下,每月的还款额是固定的,所以也称为“等额法”,计算公式如下:
月还款额 = | 贷款金额 x 月利率 x (1 + 月利率)期数 |
|
|
(1 + 月利率)期数 – 1 |
现在就让我们来推导出这个公式吧。
我们知道,等本息法的计算方法如下:
- 本月月还利息 = 上月剩余贷款余额 x 月利率
- 本月月还本金 = 月还款额 – 本月月还利息
- 本月剩余贷款余额 = 上月剩余贷款余额 – 本月月还本金
因此:
- 本月剩余贷款余额
- = 上月剩余贷款余额 – 本月月还本金
- = 上月剩余贷款余额 – (月还款额 – 本月月还利息)
- = 上月剩余贷款余额 – 月还款额 + 本月月还利息
- = 上月剩余贷款余额 – 月还款额 + 上月剩余贷款额 x 月利率
- = 上月剩余贷款余额 x (1 + 月利率) – 月还款额
设:
- A = 贷款金额
- r = 月利率
- n = 期数
- z = 月还款额
这样,各个月的剩余贷款余额如下表:
期数 | 剩余贷款余额 | |
---|---|---|
0 | A | A |
1 | A(1+r) – z | A(1+r) – z |
2 | [A(1+r) – z](1+r) – z | A(1+r)2 – z[(1+r) + 1] |
3 | {A(1+r)2 – z[(1+r) + 1]}(1+r) – z | A(1+r)3 – z[(1+r)2 + (1+r) + 1] |
… | … | … |
n | {A(1+r)n-1 – z[(1+r)n-2 + … + (1+r) + 1]}(1+r) – z | A(1+r)n – z[(1+r)n-1 + … + (1+r) + 1] |
根据上表,最后一期的剩余贷款余额是:
A(1+r)n – z[(1+r)n-1 + … + (1+r) + 1] = A(1+r)n – z[(1+r)n – 1] / r
上面的计算是根据等比数列的求和公式,Sn = a1(qn – 1) / (q – 1),其中 a1 = 1,q = 1+r 。
由于最后一期的剩余贷款余额必须为零,因此:
A(1+r)n – z[(1+r)n – 1] / r = 0
z[(1+r)n – 1] / r = A(1+r)n
z = A · r · (1+r)n / [(1+r)n – 1]
这就是本文一开头提到的等本息法月还款额的计算公式。
2. 等本息法应付的总利息
在利率不变的情况下,等本息法的月还款额是固定的,计算公式如下:
- 月还款额 = 贷款金额 x 月利率 x (1+月利率)期数 / [(1+月利率)期数 – 1]
- 本月月还利息 = 上月剩余贷款余额 x 月利率
- 本月月还本金 = 月还款额 – 本月月还利息
- 本月剩余贷款余额 = 上月剩余贷款余额 – 本月月还本金
因此:
总利息 = 总还款额 – 贷款金额 = 月还款额 x 期数 – 贷款金额 = z · n – A
将月还款额 z = A · r · (1+r)n / [(1+r)n – 1] 代入上式,得到:
总利息 = A · [1 + (n · r – 1) · (1+r)n] / [(1+r)n – 1]
上式中,贷款金额 A 和月利率 r 都是正实数,期数 n 是正整数。
思考题:
- 证明:按上式计算的总利息大于零。
- 当月利率 r 趋向于零时,按上式计算的总利息的极限是多少?
当贷款金额 A = 10 万元,月利率 r = 3.87% / 12,期数 n = 240 时,代入上式计算得到的总利息是 43,796.52 元。下图中使用个人住房贷款计算器计算出来的总利息是 43,796.00 元,两者相差 0.52 元,是因为该计算器在计算还款计划表时各个月的月还利息都必须进行舍入处理造成的。
3. 等本金法应付的总利息
在利率不变的情况下,等本金法的月还本金是固定的,计算公式如下:
- 月还本金 = 贷款金额 / 期数
- 本月月还利息 = 上月剩余贷款余额 x 月利率
- 本月月还款额 = 月还本金 + 本月月还利息
- 本月剩余贷款余额 = 上月剩余贷款余额 – 月还本金
这样,各个月的月还利息如下表:
期数 | 月还本金 | 月还利息 | 剩余贷款余额 |
---|---|---|---|
0 | A · (1 – 0/n) | ||
1 | A / n | r · A · (1 – 0/n) | A · (1 – 1/n) |
2 | A / n | r · A · (1 – 1/n) | A · (1 – 2/n) |
3 | A / n | r · A · (1 – 2/n) | A · (1 – 3/n) |
… | … | … | … |
n | A / n | r · A · [1 – (n-1)/n] | A · (1 – n/n) |
因此,将上表中各个月的月还利息加起来就得到:
总利息 = r · A · n – r · A · n · [0 + (n-1)/n] / 2
上面的计算是根据等差数列的求和公式,Sn = n · (a1 + an) / 2,其中 a1 = 0,an = (n-1)/n 。
化简后得到:
总利息 = A · (n+1) · r / 2
当贷款金额 A = 10 万元,月利率 r = 3.87% / 12,期数 n = 240 时,代入上式计算得到的总利息是 38,861.25 元。下图中使用个人住房贷款计算器计算出来的总利息是 38,860.94 元,两者相差 0.31 元,是因为该计算器在计算还款计划表时各个月的月还利息都必须进行舍入处理造成的。
4. 等本息法和等本金法应付的总利息的比较
那么,在贷款金额、利率和期限相同的情况下,哪种还款方式的成本更小呢?
在上面两个小节中,我们看到,当贷款金额为 10 万元,年利率为 3.87%,期限为 20 年时,等本息法应付的总利息为 43,796.00 元,而等本金法为 38,860.94 元,两者相差 4,935.06 元。
但是,在上述情况下,等本息法的月还款额固定为 599.15 元。而等本金法的月还款额第一个月为 739.17 元,以后逐月递减,直到最后一个月为 417.21 元。
可见,如果经济能力能够负担刚开始时比较大的月还款额,应该选择等本金法,可以节省不少利息。
当然,上面仅仅是一个特定的例子,并不是证明在所有情况下等本金法都会比等本息法节省利息。
根据前面的两个小节,我们知道:
等本息法的总利息 = A · [1 + (n · r – 1) · (1+r)n] / [(1+r)n – 1]
等本金法的总利息 = A · (n+1) · r / 2
利息差 = A · { [1 + (n · r – 1) · (1+r)n] / [(1+r)n – 1] – (n+1) · r / 2 }
上面的算式中,贷款金额 A 和月利率 r 都是正实数,期数 n 是正整数。
现在我们来证明利息差不小于零:
利息差 | ||
因为上式中第一个因子是大于零的,所以我们只要证明第二个因子不小于零就行了。令:
对该函数求导:
再次求导:
所以 是增函数。
因为
所以
所以 是增函数
而
所以
证毕。
注:上述证明来源于“数学研发论坛”中的一个帖子“求证一个不等式”。
下面是利息差关于月利率 r 的函数的图像,坐标原点在左下角,贷款金额为1元,期数为180个月,年利率从0%变化到10%,函数值(利息差)从0元变化到0.18元。
上面的 Plot 程序请参见我在2005年11月1日发表的随笔“画函数图形的C#程序(改进版)”。
5. 利率为零时的情况
如果天上掉馅饼下来,贷款的利率为零的话,月还利息就为零,月还款额等于月还本金,等于贷款金额除以期数,对于等本息法就和等本金法都是这样的。
在前面的第1小节,我们证明了等本息法的月还款额由以下公式决定:
z = A · r · (1+r)n / [(1+r)n – 1]
上式在月利率 r 趋向于零时的极限:
上面的计算中用到的规则:
其实,这个极限这也可以用初等方法(即不使用微积分)解出,如下:
上面的计算中使用了“二项式定理”:
下面是等本息法的月还款额关于月利率 r 的函数的图像,贷款金额为1元,期数为180个月,年利率从 -0.1% 变化到 10% ,函数值(月还款额)从 0.005514 元变化为 0.010746 元。注意:A/n = 1/180 = 0.005555… 。