数学建模——房屋贷款问题——python实现

本文通过Python代码演示了等额本息和等额本金两种还款方式,针对一笔30年期、年利率5.8%、总额130万元的商业贷款,计算了每月及按季度和年度还款的详细情况。结果显示,还款周期缩短并不意味着总还款额减少,实际上,月还款、季度还款和年还款的总额分别是2746004.22元、2750911.78元和2772940.78元,表明周期越短,总还款额越大。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

软件:

python3.10版

内容:

现有一房子商业贷款总额为130万元,期限30年,年利率5.8%。

  1. 请分别用等额本息和等额本金两种还款方式计算每月的利息、本金、还款金额与还款总额。
  2. 在等额本息还款方式下,改变还款周期为一个季度和一年(相应r也改变),分别计算两种新周期下的还款总额。并说明是否周期越短还款总额越小?

建模:

设贷款额为x0,月利率为r,年利率为R,贷款月数n,贷款年数N

R=R/12,n=Nx12

等额本息还款模型:
每月还款:a=xr(1+r)n/((1+r)n-1)
还款总额:A1=na=n xr(1+r)n/((1+r)n-1)
总利息:s=A1-x

等额本金还款模型:
每月还款:x=x/n+x*(1-(k-1)/n)r k=1,2,….,n
还款总额:A2=x+xr*(n+1)/2
总利息:s=A2-x
 


python代码:

(1)每个月的

# 贷款额为x0,月利率为r,年利率为R,贷款月数为n,贷款年数为N
# x0 = int(input("请输入贷款额(元):"))
# R = float(input("请输入年利率(如5.8%,输入:0.058):"))
# N = int(input("请输入贷款年数(年):"))
# r = R / 4
# n = N * 4

# test data
x0=1300000
R=0.058
N=30
r = R / 12
n = N * 12

# 月均还款(本金+利息)
a = x0 * r * pow((1 + r), n) / (pow((1 + r), n) - 1)

# 还款利息总和
Y = n * x0 * r * pow((1 + r), n) / (pow((1 + r), n) - 1) - x0


print("-----等额本息计算-----")

# 还款总额
A1 = n * a
print("第1个月,利息:%s,本金:%s,还款金额(本金+利息):%s,还款总额:%s" % (x0 * r, a - x0 * r, a, A1))
# 第2 - n个月还款利息
for t in range(2, n + 1):
    ci = (x0 * r - a) * pow((1 + r), (t - 1)) + a       # 每月的利息
    bi = a - ci                                         # 每月的本金
    print("第%d个月,利息:%s,本金:%s,还款金额(本金+利息):%s,还款总额:%s" % (t, ci, bi, a, A1))

print("-----等额本金计算-----")

# 每月应还本金
d = x0 / n
A2 = 0
for m in range(1, n + 1):
    f = (x0 - d * (m - 1)) * r  # 每月应还利息
    g = d + f                   # 每月应还本金
    A2 = A2 + g                 # 已还款金额

    print("第%d个月,利息:%s,本金:%s,还款金额(本金+利息):%s" % (m, f, d, g))
print("还款总额:%s" % A2)

(2)每个季度的

#test data
x0=1300000
R=0.058
N=30
r = R / 4
n = N * 4
# 月均还款(本金+利息)
a = x0 * r * pow((1 + r), n) / (pow((1 + r), n) - 1)
# 还款利息总和
Y = n * x0 * r * pow((1 + r), n) / (pow((1 + r), n) - 1) - x0
print("-----等额本息计算-----")
# 还款总额
A1 = n * a
print("第1年,利息:%s,本金:%s,还款金额(本金+利息):%s,还款总额:%s" % (x0 * r, a - x0 * r, a, A1))
# 第2 - n个月还款利息
for t in range(2, n + 1):
    ci = (x0 * r - a) * pow((1 + r), (t - 1)) + a       # 每月的利息
    bi = a - ci                                         # 每月的本金
    print("第%d年,利息:%s,本金:%s,还款金额(本金+利息):%s,还款总额:%s" % (t, ci, bi, a, A1)

 每一年的

#test data
x0=1300000
R=0.058
N=30
r = R / 1
n = N * 1

print("-----等额本息计算-----")
# 月均还款(本金+利息)
a = x0 * r * pow((1 + r), n) / (pow((1 + r), n) - 1)
# 还款利息总和
Y = n * x0 * r * pow((1 + r), n) / (pow((1 + r), n) - 1) - x0
# 还款总额
A1 = n * a
print("第1年,利息:%s,本金:%s,还款金额(本金+利息):%s,还款总额:%s" % (x0 * r, a - x0 * r, a, A1))
# 第2 - n个月还款利息
for t in range(2, n + 1):
    ci = (x0 * r - a) * pow((1 + r), (t - 1)) + a       # 每月的利息
    bi = a - ci                                         # 每月的本金
    print("第%d年,利息:%s,本金:%s,还款金额(本金+利息):%s,还款总额:%s" % (t, ci, bi, a, A1))


输出结果:

等额本息

 每月还款金额:7627.789494946575元

还款总额:2746004.2181807673元

等额本金:

 第一个月还款金额:9894.444444444445元

第二个月还款金额:3628.5648148148143元

还款总额:2434141.666666667

(2)

周期为一个季度:

还款总额:2750911.7763269176

周期为一个年: 

还款总额:2772940.7758005406

问:说明是否周期越短还款总额越小?

答:对比:

月的还款总额:2746004.2181807673元

季的还款总额:2750911.7763269176元

年的还款总额:2772940.7758005406元

对比发现周期越短还款总额是越大的

则不能说明。

评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿童学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值