You need to enable JavaScript to run this app. SymPy的solve函数返回结果异常,如何获取浮点格式的实数根列表?
优惠活动
大模型
产品
解决方案
定价
更多

SymPy的solve函数返回结果异常,如何获取浮点格式的实数根列表?

SymPy获取方程浮点格式根的正确方法

核心解决方案

SymPy 原生支持将符号解析解转换为浮点数值,无需自行拆分解析表达式:

from sympy import solve, symbols, N

x = symbols('x')
# 求解方程得到解析解
solutions = solve(x**2 + x - 1/x, x)
# 批量转换为保留3位小数的浮点数
float_solutions = [round(N(sol), 3) for sol in solutions]
print(float_solutions)
# 输出:[-1.379 + 0.724j, -1.379 - 0.724j, 0.755]

如果仅需要实根,可以增加筛选条件:

real_float_solutions = [round(N(sol), 3) for sol in solutions if sol.is_real]
print(real_float_solutions)
# 输出:[0.755]

原有代码错误原因

你自定义的solver函数错误地仅提取了Add类型表达式的第一个项,三次方程的解析解是多个项相加的结构,你只取了第一个项-1/3,因此所有输出都是-0.333,属于处理逻辑错误,并非SymPy本身的问题。

拓展:直接获取数值解

如果不需要解析解,可直接使用nsolve函数指定初始猜测值,直接得到数值根,效率更高:

from sympy import nsolve
# 求解x=1附近的实根
real_root = nsolve(x**2 + x - 1/x, 1)
print(round(real_root, 3))
# 输出:0.755

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 13:15:00