问题描述
我正处于一项大型(坦率地说非常困难)项目的中间,所以虽然这是我的第一次审讯,但它可能不会是最后一次。另外:英语不是我的第一门语言,所以“对不起,英语不好”,我正在手机上写这个,“对不起,格式不好”。 好的:我正在尝试在 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
。