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

使用sympy求解含求和项的方程根返回空列表问题求助

问题原因
  • 代码中直接将未求值的sympy.Sum离散求和对象传入solve函数,SymPy不支持直接求解这种包含求和符号、以求和上限m为变量的隐式方程,因此返回空列表。
  • 你定义的s1是首项为1、公比为a的等比数列前(m-1)项和,可先转换为闭式解析表达式再求解。
解决方法

方法1:先符号求解闭式方程再代入数值

先利用等比数列求和公式把离散求和转换为解析表达式,再调用solve求解:

import sympy

m, n, D_star, a = sympy.symbols('m n D_star a', real=True)
# 等比数列前(m-1)项和闭式表达式,a≠1时成立
s1 = (a**(m-1) - 1) / (a - 1)
rhs = 6 * sympy.sqrt((D_star * (1 + a)*(n - 1))/2)
# 求解方程,只保留正实根
solve_res = sympy.solve(s1 - rhs, m, dict=True)
m_expr = solve_res[0][m]
# 转换为可传入数值的函数
temp = sympy.lambdify((a, n, D_star), m_expr, 'numpy')

# 代入参数计算
n_val = 100
a_val = 1.2
D_star_val = 2.0
ms = temp(a_val, n_val, D_star_val)
print(ms)
# 输出结果:17.06519713880871

方法2:直接数值求解(和Mathematica FindRoot逻辑一致)

不需要提前做符号推导,直接给初始值调用nsolve做数值求解:

import sympy

m, n, D_star, a, j = sympy.symbols('m n D_star a j')
s1 = sympy.Sum(a**(j-1),(j, 1, m-1))
rhs = 6 * sympy.sqrt((D_star * (1 + a)*(n - 1))/2)
# 代入参数后给初始值10求解
expr = s1 - rhs
expr_sub = expr.subs({n:100, a:1.2, D_star:2.0})
ms = sympy.nsolve(expr_sub, m, 10)
print(ms)
# 输出结果:17.0651971388087

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:15:04