我正在尝试表示该环:
其中theta是具有整数系数的首一不可约多项式f的根,f的次数为d。
此环是代数整数的子环,而代数整数本身是该域的子环:
我可以使用sympy的AlgebraicField
类来表示这个域
Q_theta = sympy.polys.domains.AlgebraicField(QQ,theta)
有没有一种类似的方式来表示上述整数子环?
我怀疑这可能不是 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]
通过测试,可以轻松得知这确实给出了整数上的多项式环。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
查看文档:
然而,有用的功能仅实现在域上的多项式环中,以及各种本地化和商环。
简而言之,除非 $\theta$ 在整数上是非代数的,否则这可能在 sympy 框架内是不可能的。
然而,通过创建类并使用 Python 的魔术方法来覆盖 +
和 *
的常规行为,可以实现以这种方式表示环,这本质上就是我们需要研究环的内容。
以下是上面提到的高斯整数的示例。该代码可以轻松重新定制,以给出您想要的任何其他整数上的代数数,例如 $\sqrt{2}$。
我是一名物理学家:我理解了其中的一些词,但也许我可以帮忙 :-D
你尝试过使用SymPyIntegerRing吗?
class sympy.polys.domains.SymPyIntegerRing
Integer ring based on SymPy’s Integer type.