表示代数整数的环
Representing rings of algebraic integers
我正在尝试代表戒指;
其中 theta 是具有 d 次整数系数的一元不可约多项式 f 的根。
这个环是代数整数的子环,它本身是域的子环;
我可以用sympy的AlgebraicField
class
来表示这个字段
Q_theta = sympy.polys.domains.AlgebraicField(QQ,theta)
有没有办法用类似的方式表示上面的整数子环?
这里是物理学家:我听懂了其中的一些话,但也许我还是能帮上忙:-D
你试过了吗SymPyIntegerRing?
class sympy.polys.domains.SymPyIntegerRing
Integer ring based on SymPy’s Integer type.
我怀疑这可能不是 sympy
的功能,原因如下:
首先,如果 theta 不是整数上的代数,则将 theta 与整数上的多项式环相连,是同构的。
例如,pi 不是整数的代数,因为没有整数系数与 pi 和 pi 的幂相结合会等于零。
要证明这些实际上是同构的,只需取对 pi 处的每个多项式求值的求值环同态。
这可能不是一个现成的功能,因为计算一个数字在任何环上是否是非代数的是非常重要的。例如,确定 e + pi
是否是代数仍然是一个悬而未决的问题。
这可以在 sympy
中通过
实现
from sympy.polys.domains import ZZ, QQ, RR, FF, EX
x, y, z, t = symbols('x y z t')
ZZ['theta']
或
ZZ[t]
One can easily test 事实上,这确实为您提供了整数上的多项式环。
二,代数的数,(像虚数i
这样的数是整数的根值多项式)可以通过取多项式环模和它的唯一一元多项式产生的想法来获得。
所以如果 theta 是虚数 i
,它具有唯一的一元多项式 x^2+1
>>> QQ.old_poly_ring(x).ideal(x**2+1)
<x**2 + 1>
>>> ZZ.old_poly_ring(x).ideal(x**2+1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/sympy/polys/domains/ring.py", line 91, in ideal
return ModuleImplementedIdeal(self, self.free_module(1).submodule(
File "/usr/local/lib/python2.7/dist- packages/sympy/polys/domains/old_polynomialring.py", line 192, in free_module
return FreeModulePolyRing(self, rank)
File "/usr/local/lib/python2.7/dist-packages/sympy/polys/agca/modules.py", line 455, in __init__
+ 'got %s' % ring.dom)
NotImplementedError: Ground domain must be a field, got ZZ
此外,试试这个:
>>> QQ.old_poly_ring(x).quotient_ring([x**2])
QQ[x]/<x**2>
>>> ZZ.old_poly_ring(x).quotient_ring([x**2])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/sympy/polys/domains/ring.py", line 115, in quotient_ring
e = self.ideal(*e)
File "/usr/local/lib/python2.7/dist-packages/sympy/polys/domains/ring.py", line 91, in ideal
return ModuleImplementedIdeal(self, self.free_module(1).submodule(
File "/usr/local/lib/python2.7/dist-packages/sympy/polys/domains/old_polynomialring.py", line 192, in free_module
return FreeModulePolyRing(self, rank)
File "/usr/local/lib/python2.7/dist-packages/sympy/polys/agca/modules.py", line 455, in __init__
+ 'got %s' % ring.dom)
NotImplementedError: Ground domain must be a field, got ZZ
However, useful functionality is only implemented for polynomial rings over fields, and various localizations and quotients thereof.
简而言之,除非 theta 在整数上是非代数的,否则这在 sympy 的框架内可能是不可能的。
但是,可以通过制作 类 并使用 Python 的魔术方法覆盖 的常规行为来实现以这种方式表示环=20=]和*
,本质上就是我们研究环所需要的。
这里是上面提到的Gaussian Integers的例子。这段代码可以很容易地重新用于给你,比方说,2 的平方根,或任何其他整数代数数。
我正在尝试代表戒指;
其中 theta 是具有 d 次整数系数的一元不可约多项式 f 的根。
这个环是代数整数的子环,它本身是域的子环;
我可以用sympy的AlgebraicField
class
Q_theta = sympy.polys.domains.AlgebraicField(QQ,theta)
有没有办法用类似的方式表示上面的整数子环?
这里是物理学家:我听懂了其中的一些话,但也许我还是能帮上忙:-D
你试过了吗SymPyIntegerRing?
class sympy.polys.domains.SymPyIntegerRing
Integer ring based on SymPy’s Integer type.
我怀疑这可能不是 sympy
的功能,原因如下:
首先,如果 theta 不是整数上的代数,则将 theta 与整数上的多项式环相连,是同构的。
例如,pi 不是整数的代数,因为没有整数系数与 pi 和 pi 的幂相结合会等于零。
要证明这些实际上是同构的,只需取对 pi 处的每个多项式求值的求值环同态。
这可能不是一个现成的功能,因为计算一个数字在任何环上是否是非代数的是非常重要的。例如,确定 e + pi
是否是代数仍然是一个悬而未决的问题。
这可以在 sympy
中通过
from sympy.polys.domains import ZZ, QQ, RR, FF, EX
x, y, z, t = symbols('x y z t')
ZZ['theta']
或
ZZ[t]
One can easily test 事实上,这确实为您提供了整数上的多项式环。
二,代数的数,(像虚数i
这样的数是整数的根值多项式)可以通过取多项式环模和它的唯一一元多项式产生的想法来获得。
所以如果 theta 是虚数 i
,它具有唯一的一元多项式 x^2+1
>>> QQ.old_poly_ring(x).ideal(x**2+1)
<x**2 + 1>
>>> ZZ.old_poly_ring(x).ideal(x**2+1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/sympy/polys/domains/ring.py", line 91, in ideal
return ModuleImplementedIdeal(self, self.free_module(1).submodule(
File "/usr/local/lib/python2.7/dist- packages/sympy/polys/domains/old_polynomialring.py", line 192, in free_module
return FreeModulePolyRing(self, rank)
File "/usr/local/lib/python2.7/dist-packages/sympy/polys/agca/modules.py", line 455, in __init__
+ 'got %s' % ring.dom)
NotImplementedError: Ground domain must be a field, got ZZ
此外,试试这个:
>>> QQ.old_poly_ring(x).quotient_ring([x**2])
QQ[x]/<x**2>
>>> ZZ.old_poly_ring(x).quotient_ring([x**2])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/sympy/polys/domains/ring.py", line 115, in quotient_ring
e = self.ideal(*e)
File "/usr/local/lib/python2.7/dist-packages/sympy/polys/domains/ring.py", line 91, in ideal
return ModuleImplementedIdeal(self, self.free_module(1).submodule(
File "/usr/local/lib/python2.7/dist-packages/sympy/polys/domains/old_polynomialring.py", line 192, in free_module
return FreeModulePolyRing(self, rank)
File "/usr/local/lib/python2.7/dist-packages/sympy/polys/agca/modules.py", line 455, in __init__
+ 'got %s' % ring.dom)
NotImplementedError: Ground domain must be a field, got ZZ
However, useful functionality is only implemented for polynomial rings over fields, and various localizations and quotients thereof.
简而言之,除非 theta 在整数上是非代数的,否则这在 sympy 的框架内可能是不可能的。
但是,可以通过制作 类 并使用 Python 的魔术方法覆盖 的常规行为来实现以这种方式表示环=20=]和*
,本质上就是我们研究环所需要的。
这里是上面提到的Gaussian Integers的例子。这段代码可以很容易地重新用于给你,比方说,2 的平方根,或任何其他整数代数数。