数字字段简介¶
在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
解三次方程¶
作为符号操作的一个稍微次要的说明,考虑一下三次方程
在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)
您还可以看到粘贴所需的 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