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.010.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