我试着找一个多项式函数的根,并使用下面的代码:
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,它就能工作
发布于 2021-03-23 00:46:43
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://stackoverflow.com/questions/66745103
复制相似问题