问题描述
import sympy
from sympy import poly,roots
g=sympy.var("x")
p = poly(x**25-96*x**12-4*x**3+2,gen=g)
print(roots(p))
我不知道为什么它不起作用。如果我使用像 x**2-1 这样更简单的多项式函数,它会起作用
解决方法
roots
函数用于计算根的符号根。由于 Abel-Ruffini 定理,通常不可能计算 5 次或更多次多项式的根。 SymPy 的 RootOf
可以象征性地表示这些根,例如:
In [7]: r = RootOf(x**25-96*x**12-4*x**3+2,0)
In [8]: r
Out[8]:
⎛ 25 12 3 ⎞
CRootOf⎝x - 96⋅x - 4⋅x + 2,0⎠
In [9]: r.evalf()
Out[9]: -0.763733782729520
如果您只想要根的数值近似值,那么您可以使用 nroots
方法有效地计算它们:
In [10]: Poly(x**25-96*x**12-4*x**3+2,x).nroots()
Out[10]:
[-0.76373378272952,0.670586457724312,1.42079389150078,-1.37945211815055 - 0.340175934440882⋅ⅈ,-1.37945211815055 + 0.34017593
4440882⋅ⅈ,-1.06319298080894 - 0.941998724697874⋅ⅈ,-1.06319298080894 + 0.941998724697874⋅ⅈ,-0.611146252548878 - 0.404661250727
9⋅ⅈ,-0.611146252548878 + 0.4046612507279⋅ⅈ,-0.503926321737819 - 1.32829285156355⋅ⅈ,-0.503926321737819 + 1.32829285156355⋅ⅈ,-
0.335293228608336 - 0.580740856215139⋅ⅈ,-0.335293228608336 + 0.580740856215139⋅ⅈ,-0.0448923539768514 - 0.73158885083763⋅ⅈ,-0.
0448923539768514 + 0.73158885083763⋅ⅈ,0.171380585123656 - 1.41042748193864⋅ⅈ,0.171380585123656 + 1.41042748193864⋅ⅈ,0.3818668
72385803 - 0.66145201247479⋅ⅈ,0.381866872385803 + 0.66145201247479⋅ⅈ,0.656038617401695 - 0.326927596015531⋅ⅈ,0.65603861740169
5 + 0.326927596015531⋅ⅈ,0.807048139834163 - 1.16893577654226⋅ⅈ,0.807048139834163 + 1.16893577654226⋅ⅈ,1.25774575783827 - 0.66
0302613302175⋅ⅈ,1.25774575783827 + 0.660302613302175⋅ⅈ]
https://docs.sympy.org/latest/modules/polys/reference.html#sympy.polys.rootoftools.ComplexRootOf
https://docs.sympy.org/latest/modules/polys/reference.html#sympy.polys.polytools.nroots