g
gqzhang
V1
2022/12/06阅读:15主题:默认主题
用二分法计算汪小菲的房贷利率
根据汪小菲最近发的微博和账单显示,他在台湾买的房子的购入价格为4亿新台币,首付了2.4亿,还款期限为20年,即240个月,每月房贷还款额为106万新台币,那么他的房贷利率是多少呢?
这个问题实际上和计算投资回报率是一样的。从银行的角度来看:
-
在初始时刻,投资了(贷出)1.6亿新台币。 -
接下来的240个月,每个月可以收回106万新台币。
首先假设年利率为 ,月利率为 ,那么
以上公式的单位为1万新台币。
令
我们要找的实际上就是方程 的解。
首先可以观察到:
-
-
-
是一个递减函数。
所以 在 上有唯一解。
但是由于这个方程涉及高阶多项式,无法求得显式解,所以我们需要用数值方法。
一种简单有效的解方程的办法是二分法。
-
首先选择两个点 , 使得 , 。 -
计算 : -
如果 ,说明解在 上,所以把 赋给 。 -
如果 ,说明解在 上,所以把 赋给 。 -
如果 ,那么解为 。
-
-
重复以上过程直至 区间足够小或者解已经找到。
由于每次区间都要减半,所以我们达到预设容忍误差的速度是很快的。假如容忍误差为 ,初始区间为 ,那么我们最多需要
这么多次循环。
接下来我们用Python来实现二分法。
import numpy as np
# 定义函数 f(r)
def f(r):
return -16000+(106/(1+r/12.0)**np.arange(1,241,1)).sum()
# 求解 f(r)=0
# 根据常理推断,房贷利率应在0.01到0.1之间
# 经试验f(0.01)>0, f(0.1)<0
# 所以初始化a, b如下
a, b = 0.01, 0.1
# 循环停止的误差界
err_tol = 1e-6
while b-a>err_tol:
fm = f((a+b)/2)
if fm>0:
a = (a+b)/2
elif fm<0:
b = (a+b)/2
elif fm==0:
break
print((a+b)/2)
最后的计算结果为(精确到小数点后六位)
所以汪小菲的房贷利率为 ,网传台湾的首套利率是 左右,不知道他的为什么这么高,可能因为是豪宅?
作者介绍
g
gqzhang
V1