查找多项式函数的根 Python Sympy

问题描述

我尝试找到多项式函数的根,并使用以下代码

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

https://en.wikipedia.org/wiki/Abel%E2%80%93Ruffini_theorem