数字字段简介

在Sage中,我们可以创建数字字段 \(\QQ(\sqrt[3]{2})\) 具体如下。

sage: K.<alpha> = NumberField(x^3 - 2)

以上创建了 two Sage客体, \(K\)\(\alpha\) 。这里 \(K\) “is”(同构于数字字段) \(\QQ(\sqrt[3]{2})\) ,我们确认如下:

sage: K
Number Field in alpha with defining polynomial x^3 - 2

and \(\alpha\) is a root of \(x^3 - 2\), so \(\alpha\) is an abstract choice of \(\sqrt[3]{2}\) (no specific embedding of the number field \(K\) into \(\CC\) is chosen by default in Sage-3.1.2):

sage: alpha^3
2
sage: (alpha+1)^3
3*alpha^2 + 3*alpha + 3

变量 \(x\)

请注意,我们确实做到了 not 定义 \(x\) 在使用它之前,请在上面。您可以通过重新定义以下内容来“打破”上述示例 \(x\) 成为有趣的东西::

sage: x = 1
sage: K.<alpha> = NumberField(x^3 - 2)
Traceback (most recent call last):
...
TypeError: polynomial (=-1) must be a polynomial.

这个 Traceback 以上表示存在错误。可能会在单词后面给出大量关于错误的详细信息(“回溯” Traceback 在包含实际错误消息的最后一行之前。

备注

Important :每当你使用Sage并得到一个大错误时,查看最后一行的实际错误,只有在你感到冒险的情况下才查看其余的行。在笔记本中,由指示的部分 ... 上面没有显示;要查看它,请在单词左侧单击 Traceback 回溯就会出现。

如果你重新定义 \(x\) 如上所述,但需要使用不确定的 \(x\) ,您有几个选择。您可以重置 \(x\) Sage开始时的缺省值,您可以重新定义 \(x\) 作为符号变量,或者您可以定义 \(x\) 成为多项式不定(多项式):

sage: reset('x')
sage: x
x
sage: x = 1
sage: x = var('x')
sage: x
x
sage: x = 1
sage: x = polygen(QQ, 'x')
sage: x
x
sage: x = 1
sage: R.<x> = PolynomialRing(QQ)
sage: x
x

使用制表符补全来获取对象的方法

一个您已经创建了一个数字字段 \(K\) ,类型 K.[tab key] 以查看函数列表。类型,例如, K.minkowski_embedding?[tab key] 要查看有关 minkowski_embedding 指挥部。要查看源代码,请键入 K.minkowski_embedding??[tab key]

sage: K.<alpha> = NumberField(x^3 - 2)
sage: K.[tab key]

符号表达式

我们创建某些数字字段的另一种自然方法是创建一个符号表达式,并将其与有理数相连。与Pari和Magma不同(并且像数学和Maple一样),Sage还支持对符号表达式和解等式的操作,而无需定义抽象结构,如数字字段。例如,我们可以定义一个变量 \(a=\sqrt{2}\) 作为抽象符号对象,只需输入 a = sqrt(2) 。当我们打字时 parent(a) 下面,Sage告诉我们它所查看的数学对象 \(a\) 作为元素;在本例中,它是所有符号表达式的环。

sage: a = sqrt(2)
sage: parent(a)
Symbolic Ring

巴黎和岩浆的SQRT(2)

尤其是,输入 sqrt(2) 会吗? not 从数值上提取近似值 \(\sqrt{2}\) ,就像在巴黎或岩浆里一样。下面我们通过直接从Sage内部调用Pari(通过GP解释器)和Magma来说明这一点。在我们评估以下两个输入行之后,GP/PARI和MAGMA的副本正在运行,并且在Sage和这些会话之间存在持久连接。

sage: gp('sqrt(2)')
1.414213562373095048801688724...
sage: magma('Sqrt(2)')                  # optional - magma
1.414213562373095048801688724...

当Magma启动时,您可能注意到在评估第二行时出现了停顿。另外,请注意 # optional 注释,这表明如果您没有安装Magma,线路将不会工作。

数值求值SQRT(2)

顺便说一句,如果你想用数值计算 \(\sqrt{2}\) 在Sage中,只需给出可选的 prec 参数设置为 sqrt 函数,该函数接受所需数量的 bits (二进制位)的精度。

sage: sqrt(2, prec=100)
1.4142135623730950488016887242

重要的是要注意,在这样的计算中,没有 a priori 保证 prec 的比特 answer 都是正确的。取而代之的是,Sage创建了数字 \(2\) 作为浮点数,并使用 \(100\) 比特的精度,然后要求Paul Zimmerman的MPFR C库计算该近似值的平方根。

带SQRT的算术(2)

我们现在回到我们的象征性表达 \(a = \sqrt{2}\) 。如果你要求平分 \(a+1\) 你只需要得到正式的正方形。要展开这个正式正方形,我们使用Expand命令。

sage: a = sqrt(2)
sage: (a+1)^2
(sqrt(2) + 1)^2
sage: expand((a+1)^2)
2*sqrt(2) + 3

邻接一个符号表达式

给定Sage可以计算其最小多项式的任何符号表达式,您可以通过将该表达式邻接到来构造数值字段 \(\QQ\) 。表示法非常简单--只需输入 QQ[a] 哪里 a 是象征性的表达。

sage: a = sqrt(2)
sage: K.<b> = QQ[a]
sage: K
Number Field in sqrt2 with defining polynomial x^2 - 2 with sqrt2 = 1.414213562373095?
sage: b
sqrt2
sage: (b+1)^2
2*sqrt2 + 3
sage: QQ[a/3 + 5]
Number Field in a with defining polynomial x^2 - 10*x + 223/9 with a = 5.471404520791032?

胁迫:QQ [a] 对比QQ(A)

您不能创建数字字段 \(\QQ(a)\) 在Sage中输入 QQ(a) ,它有一个 very different 在Sage中的意思。它的意思是“试着从有理数 \(a\) .“因此 QQ(a) 在Sage中是类似于 QQ!a 在Magma(Pari没有环的概念,如 QQ )。

sage: a = sqrt(2)
sage: QQ(a)
Traceback (most recent call last):
...
TypeError: unable to convert sqrt(2) to a rational

一般而言,如果 \(X\) 是Sage中的环、向量空间或其他“父结构”,以及 \(a\) 是一个元素,类型 X(a) 使成为一种元素 \(X\) 从… \(a\) 。例如,如果 \(X\) 是有限阶域 \(7\) ,以及 \(a=2/5\) 是有理数,那么 X(a) 是有限域元素 \(6\) (作为一个快速练习,请检查这在数学上是否正确)。

sage: X = GF(7); a = 2/5
sage: X(a)
6

解三次方程

作为符号操作的一个稍微次要的说明,考虑一下三次方程

\[X^3+\sqrt{2}x+5=0。\]

在Sage中,我们可以创建这个方程,并找到精确的符号解。

sage: x = var('x')
sage: eqn =  x^3 + sqrt(2)*x + 5 == 0
sage: a = solve(eqn, x)[0].rhs()

上面的第一行确保符号变量 \(x\) 被定义,则第二个创建等式 eqn ,第三行解决了 eqn\(x\) ,提取第一个解(有三个),然后获取该解的右侧并将其赋给变量 a

查看复杂的符号表达式

若要查看正确的解决方案排版,请使用 pretty_print 命令

sage: pretty_print(a)
-1/2*(I*sqrt(3) + 1)*(1/6*sqrt(8/3*sqrt(2) + 225) - 5/2)^(1/3) + 1/6*sqrt(2)*(-I*sqrt(3) + 1)/(1/6*sqrt(8/3*sqrt(2) + 225) - 5/2)^(1/3)
\[-\frac{1}{2} \, {(i \, \sqrt{3} + 1)} {(\frac{1}{18} \, \sqrt{8 \, \sqrt{2} + 675} \sqrt{3} - \frac{5}{2})}^{\left(\frac{1}{3}\right)} + \frac{1}{6} \, \frac{{(-i \, \sqrt{3} + 1)} \sqrt{2}}{{(\frac{1}{18} \, \sqrt{8 \, \sqrt{2} + 675} \sqrt{3} - \frac{5}{2})}^{\left(\frac{1}{3}\right)}}\]

您还可以看到粘贴所需的 Latex \(a\) 通过键入以下内容将其转换为文件 latex(a) 。这个 latex 命令适用于大多数Sage对象。

sage: latex(a)
-\frac{1}{2} \, {\left(i \, \sqrt{3} + 1\right)} ...

邻接立方的根

接下来,我们构造通过邻接该解获得的数域 a\(\QQ\) 。请注意,根的最小多项式是 \(x^6 + 10x^3 - 2x^2 + 25\)

警告

以下测试目前处于中断状态,直到 :issue:`5338` 是固定的。

sage: K.<b> = QQ[a]
sage: K
Number Field in a with defining
polynomial x^6 + 10*x^3 - 2*x^2 + 25
sage: a.minpoly()
x^6 + 10*x^3 - 2*x^2 + 25
sage: b.minpoly()
x^6 + 10*x^3 - 2*x^2 + 25

现在我们可以计算数域的有趣的不变量了 \(K\)

sage: K.class_number()
5
sage: K.galois_group().order()
72