sympy 中生成器数量未知的多项式环
Polynomial rings where number of generators is not known in 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
您的代码对我不起作用,但我发现使用 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()
我正在尝试创建一个代数集的坐标环(其中代数集由域上任意变量中的一些多项式集指定)。
所以我正在使用 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
您的代码对我不起作用,但我发现使用 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()