You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python SymPy求解按月计息定期支取的账户清零时间报错问题

报错原因

你的代码触发NotImplementedError同时计算逻辑错误,有两个核心问题:

  • 余额计算公式错误:你直接把累计支出算成500*x,忽略了每月支取的500美元本身也会影响后续的利息计算,正确的余额公式需要用年金终值逻辑推导
  • 方程类型问题:你写的方程混合了指数项1.005**x和线性项x,属于超越方程,SymPy的solve函数只能求解有解析解的方程,这类没有闭式解的方程需要用数值求解方法
正确的账户余额公式

n个月后的账户余额计算公式为:
B(n) = 初始本金 * (1+月利率)^n - 每月支取额 * ((1+月利率)^n - 1) / 月利率
代入你的参数就是:
B(n) = 10000 * 1.005**n - 500 * (1.005**n - 1) / 0.005

解决方案

方案1:模拟迭代法(入门首选,逻辑直观)

直接逐月累算余额,直到余额小于0,统计月份即可,代码如下:

balance = 10000
month_count = 0
monthly_rate = 0.005
monthly_withdraw = 500

while balance > 0:
    # 每月先结息,再支取
    balance = balance * (1 + monthly_rate) - monthly_withdraw
    month_count += 1

print(f"账户余额清零需要{month_count}个月")

运行结果为22个月。

方案2:SymPy数值求解

如果需要用SymPy实现,改用nsolve函数求数值解即可,代码如下:

import sympy
x = sympy.symbols('x', real=True)
# 代入正确的余额公式
balance_equation = 10000 * 1.005**x - 500 * (1.005**x - 1) / 0.005
# 传入初始猜测值(这里填20即可,你也可以根据常识调整)
result = sympy.nsolve(balance_equation, x, 20)
print(f"理论清零时间为{float(result):.2f}个月,向上取整为22个月")

运行输出理论值约为21.07,实际需要22个月才能完成支取。


内容的提问来源于stack exchange,提问作者Myanacondadontwork

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:39:04