在sympy中不知道生成器数量的多项式环

凯文·约翰逊

我正在尝试创建一个代数集的坐标环(其中,代数集由字段上任意变量中的某些多项式集指定)。

所以我正在使用Sympy的poly_ring()函数

例如,当您已经知道要为其定义理想值的生成器时,通常用于创建坐标环。

CoordinateRing = QQ.poly_ring(x,y,z) / [y**2 - z*x, xy*2 + z]

但是我不想对代数集的定义多项式中使用的变量数量做任何假设。因此,我编写了一个函数get_symbols()该函数提取了定义多项式中使用的所有符号。有没有一种方法可以设置生成器,poly_ring()而不必将它们作为参数列出?

from sympy import * 

class AlgebraicSet(object):
    def __init__(self, polynomials,field):

        self.polynomials = polynomials
        self.field = field 

    def get_symbols(self):

        symbols = set()

        for f in self.polynomials:
            symbols = set(symbols | f.atoms(Symbol)) 

        return symbols

    def get_cooridinate_ring(self):
        return self.field.poly_ring(self.get_symbols(),order="ilex") / self.polynomials
阿米特·库玛·古普塔(Amit Kumar Gupta)

您的代码对我不起作用,但是我发现使用old_poly_ring而不是poly_ring这样做了:

from sympy import * 

class AlgebraicSet(object):
    def __init__(self, polynomials,field):

        self.polynomials = polynomials
        self.field = field 

    def get_symbols(self):

        symbols = set()

        for f in self.polynomials:
            symbols = set(symbols | f.atoms(Symbol)) 

        return symbols

    def get_coordinate_ring(self):
        poly_ring = self.field.old_poly_ring(*self.get_symbols(),order="ilex")
        return poly_ring / poly_ring.ideal(*self.polynomials)

from sympy.abc import x, y, z

print AlgebraicSet([y**2 - z*x, x*y*2 + z], QQ).get_coordinate_ring()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章