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

使用SymPy求解含符号常数的多项式实根遇报错求助

解决SymPy求解含参数多项式实根的报错问题

错误原因

你遇到的NotImplementedError是因为real_roots()方法需要对根进行排序,但当多项式系数包含参数c时,SymPy无法确定根的大小关系(根的取值会随c变化),因此不支持在RR[c](带参数的实数域)上使用该方法。

正确解法

要得到以c为变量的实根表达式,可以改用以下几种方式:

方法1:用roots()获取符号根后筛选实根

roots()会返回所有符号根(包括复数根),之后通过判断根的虚部是否为0来筛选实根:

from sympy.abc import x, c
from sympy import Poly, roots, im

# 定义多项式
poly = Poly(4 - 2*c**2*x + c**2*x**3, x)
# 获取所有根
all_roots = roots(poly)
# 筛选实根(虚部为0)
real_root_exprs = [root for root in all_roots if im(root).simplify() == 0]
print(real_root_exprs)

方法2:用solve()直接求解并指定实数域

使用solve()函数,结合domain=S.Reals直接获取实根:

from sympy.abc import x, c
from sympy import solve, S

expr = 4 - 2*c**2*x + c**2*x**3
real_roots = solve(expr, x, domain=S.Reals)
print(real_roots)

方法3:用solveset()获取实数解集合

solveset()更适合处理带参数的方程,返回集合形式的解:

from sympy.abc import x, c
from sympy import solveset, S

expr = 4 - 2*c**2*x + c**2*x**3
real_solutions = solveset(expr, x, domain=S.Reals)
print(real_solutions)

运行这些代码后,你会得到用c表示的实根表达式,结果包含关于c的根式形式,SymPy也会自动处理c≠0这类取值限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 11:05:31