如何在wxMaxima中计算指定任务的月供及利率调整后的新月供
解决可变利率抵押贷款的wxMaxima计算方案
一、计算初始月供
你的AIPV公式对应普通年金现值(每月月末还款,现值等于贷款本金),因此我们可以通过令贷款本金等于AIPV(A, r, t, m),解方程求月供A。
wxMaxima代码实现
/* 定义已知参数 */ PV: 130000; /* 贷款本金 */ r1: 0.0949; /* 初始年利率 */ t_total: 10; /* 总贷款年限 */ m: 12; /* 每年还款次数(复利频次) */ n_total: t_total * m;/* 总还款期数 */ /* 利用AIPV公式建立方程:贷款本金 = 年金现值 */ eq1: PV = AIPV(A, r1, t_total, m); /* 解方程求初始月供A */ solve(eq1, A); /* 提取数值结果(可选,直接计算精确值) */ A_initial: float(rhs(first(solve(eq1, A))));
运行后得到的初始月供数值,应与你Excel计算结果一致。
二、利率调整后的新月供计算
利率调整的核心是先算出调整日的剩余贷款本金,再用剩余本金、新利率、剩余还款期数重新计算月供。
步骤1:确定时间节点与已还款期数
贷款6月1日办理,每月月末还款,3月1日调整利率时,已完成9期还款(从6月末到2月末),剩余还款期数为n_remaining = n_total - 9 = 120 - 9 = 111。
步骤2:计算调整日的剩余本金
两种等效方法可选:
方法1:终值法
n_paid: 9; /* 已还款期数 */ rhs_total: PV*(1 + r1/m)^n_paid; /* 本金复利到调整日的终值 */ payment_fv: ADFV(A_initial, r1, n_paid/m, m); /* 已还款的年金终值 */ PV_remaining: float(rhs_total - payment_fv); /* 剩余本金 */
方法2:现值法(更简洁)
PV_remaining: float(AIPV(A_initial, r1, 111/12, m));
步骤3:用新利率计算新月供
新年利率r2 = 0.0949 - 0.02 = 0.0749,剩余期限为111/12年,再次用AIPV公式解方程:
r2: 0.0749; /* 调整后的年利率 */ t_remaining: 111/12; /* 剩余贷款年限 */ /* 建立方程:剩余本金 = 新月供的年金现值 */ eq2: PV_remaining = AIPV(A_new, r2, t_remaining, m); /* 解方程求新月供 */ solve(eq2, A_new); /* 提取数值结果 */ A_new: float(rhs(first(solve(eq2, A_new))));
关键说明
- 你的年金公式已覆盖所需的现值/终值计算,核心是理解利率调整时的剩余本金是连接两个阶段的关键。
- 确认时间节点时,注意利率调整日(3月1日)在当月还款(3月末)之前,因此首次按新利率还款为3月末,剩余期数需准确对应。
内容的提问来源于stack exchange,提问作者Pius Leofsige
相关产品推荐
相关产品推荐

