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
相关产品推荐
相关产品推荐

