如何在 Pytho 中使用 sympy 更改域即多项式环?

问题描述

我正处于一项大型(坦率地说非常困难)项目的中间,所以虽然这是我的第一次审讯,但它可能不会是最后一次。另外:英语不是我的第一门语言,所以“对不起,英语不好”,我正在手机上写这个,“对不起,格式不好”。 好的:我正在尝试在 Python 中实现通用数字字段筛选,至少目前我严重依赖 sympy。

这是我正在苦苦挣扎的一段代码。在下面的代码中,gpc(N,m)一个浮动列表。

From sympy import poly
From sympy.abc import x

g = poly(gpc(N,m),x) [*]

但是,当我这样做时,我得到了域 RR 上的多项式,我非常想将其切换到另一个域 D(其中 D 最终为 ZZ['x'],但我希望此函数能够一般)

我知道我可以稍微修改 [*]

g = poly(gpc(N,x,domain = D)

得到我想要的。然而,这还不够。在我的代码中的其他地方,我需要能够更改已构造的多项式的域,而此解决方案无济于事。

当我查找它时,我找到了 change_ring 方法,所以我尝试了这个:

f = g.change_ring(D)

但是,在执行时,我收到错误消息:

'poly' object has no attribute 'change_ring'

所以我猜这个函数不存在。 有谁知道如何改变多项式的域?

非常感谢!

解决方法

看起来创建一个新的 Poly 实例是最好的方法;有一些类方法可以提供帮助(查看 Poly.from_* 类方法)

例如:

from sympy import Poly
from sympy.abc import x,a

g = Poly(x**3 + a*x*2 - 5*x + 6,x)
print(g)  # Poly(x**3 + (2*a - 5)*x + 6,x,domain='ZZ[a]')

f = Poly.from_poly(g,*g.gens,domain='ZZ[a,b]')
print(f)  # Poly(x**3 + (2*a - 5)*x + 6,b]')

我也想知道在某个时候合理化你的浮动是否会有所帮助 - 参见例如nsimplify