提问人:Michael 提问时间:4/28/2020 更新时间:4/28/2020 访问量:585
在 Python 中查找多项式的有理根
Finding Rational Root of Polynomial in Python
问:
我在解决 python 中的多项式时遇到了一个小问题。我想要的是找到理性的根源,而不是非理性的根源。我的尝试如下 -sympy.solvers
from sympy.solvers import solve
from sympy import Symbol
from fractions import Fraction
b_2=0
b_4= -10
b_6=32
b_8=-25
x_2p=-7/4
x = Symbol('x', real=True)
solution=solve(((4*x**3+b_2*x**2+2*b_4*x+b_6)*x_2p-(x**4-b_4*x**2-2*b_6*x-b_8)), x)
R=solution
if len(R) != 0:
print(Fraction(R[1]))
我得到了以下错误 -
Traceback (most recent call last):
File "C:\Users\Roy\Desktop\EXP_2704 - Copy.py", line 16, in <module>
print(Fraction(R[1]))
File "C:\Program Files\Python37\lib\fractions.py", line 161, in __new__
raise TypeError("argument should be a string "
TypeError: argument should be a string or a Rational instance
请注意,我需要从浮动中获得准确的分数。
我怎样才能找到有理根?
答:
2赞
smichr
4/28/2020
#1
如果使用,将获得一个 CRootOf 实例,该实例可以以任意精度进行计算。使用您的初始化和以下内容,我得到:real_roots
>>> from sympy import Rational, real_roots
>>> eq = ((4*x**3+b_2*x**2+2*b_4*x+b_6)*x_2p-(x**4-b_4*x**2-2*b_6*x-b_8)); eq
-x**4 - 7.0*x**3 - 10*x**2 + 99.0*x - 81.0
>>> real_roots(_)
[1, CRootOf(x**3 + 8*x**2 + 18*x - 81, 0)]
>>> r=_[1]
>>> Rational(r.n(2))
133/64
>>> Rational(r.n(20))
613677434358103191805/295147905179352825856
评论
0赞
Michael
4/28/2020
为什么我们需要.....你能根据我的代码提供完整的代码吗?eq -x**4 - 7.0*x**3 - 10*x**2 + 99.0*x - 81.0
0赞
smichr
4/28/2020
我只是定义为你的论点,然后我向你展示了它的样子。然后我用 .在代码中,替换 with 并留下 ...您将获得我在答案中显示的解决方案列表。eq
solve
real_roots
solve
solve
real_roots
, x
评论
-7/4
x_2p=-7/4
print(Fraction(R[1]))