同情 mignotte_bound 和戒指

sympy mignotte_bound and ring

我正在尝试将 dup_zz_mignotte_bound(f, K) 的结果与其他边界进行比较,但我未能在所有边界中使用变量 x当我添加 dup_zz_mignotte_bound。例如:

from sympy.polys import ring, ZZ
from sympy.abc import x
from sympy import factor

R, x = ring('x', ZZ)

poly =  x**8 +8*x**7 +47*x**6 +136*x**5 +285*x**4 +171*x**3 - 20*x**2 - 21*x+2

print(factor(poly, x)) # this is an example of a function which is used in other bounds

p = R.dup_zz_mignotte_bound(poly) #Sympys function

print(p)


这 returns 在尝试调用 factor() 时出错。我怎样才能同时使用这两个功能? 非常感谢您的宝贵时间!

你使用环变量创建的poly对象是一个多项式对象,一个PolyElement,它不构成sympy.

中的表达式

factor 但是,需要一个表达式。好消息是您可以轻松地将多项式转换为表达式(并且您不应该发送 x 作为参数):

>>> factor(poly.as_expr())
(x**4 + 4*x**3 + 15*x**2 + 3*x - 2)*(x**4 + 4*x**3 + 16*x**2 + 9*x - 1)

我的教授给出了以下答案,他通过首先从 sympy 导入它来相应地操作函数 dup_zz_mignotte_bound。这是正确的解决方案,因为我们不使用 ring() 函数破坏 x。所以解决方案是:

from sympy.polys.factortools import dup_zz_mignotte_bound
from sympy.abc import x
from sympy import factor, Poly, ZZ

poly =  x**8 +8*x**7 +47*x**6 +136*x**5 +285*x**4 +171*x**3 - 20*x**2 - 21*x+2

print(factor(poly, x), '\n') # this is an example of a function which is used in other bounds

p = dup_zz_mignotte_bound(Poly(poly).all_coeffs(), ZZ) #Sympys function

print(p)