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

