数字字段简介

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

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

以上所述创建 two Sage之物, \(K\)\(\alpha\) . 在这里 \(K\) “是”(同构于)数字字段 \(\QQ(\sqrt[3]{{2}})\) ,我们确认如下:

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

\(\alpha\) 是的根 \(x^3 - 2\) 如此 \(\alpha\) 是一个抽象的选择 \(\sqrt[3]{{2}}\) (没有具体嵌入数字字段 \(K\) 进入之内 \(\CC\) 在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 在包含实际错误消息的最后一行之前。

注解

重要的 :每当您使用Sage时,遇到一个很大的错误,请查看最后一行中的实际错误,只有当您感到冒险时才查看其余行。在笔记本中,用 ... 上面没有显示;要查看它,只需单击单词的左侧 追溯 回溯就会出现。

如果你重新定义 \(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(以及Mathematica和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}}\) 就像在帕里或岩浆中一样。下面我们通过调用Pari(通过gp解释器)和Sage内部的Magma来说明这一点。在我们评估了以下两个输入行之后,GP/Pari和Magma的副本正在运行,Sage和这些会话之间存在持久的连接。

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

当岩浆开始上升时,你可能注意到了第二行的停顿。另外,请注意 # optional 注释,这表示如果没有安装Magma,这条线将无法工作。

数值计算sqrt(2)

顺便说一下,如果你想用数值计算 \(\sqrt{{2}}\) 在Sage中,只需选择 prec 论据 sqrt 函数,它接受所需数量的 bits (二进制数字)精度。

sage: sqrt(2, prec=100)
1.4142135623730950488016887242

重要的是要注意在这样的计算中没有 先验的 保证 prec 一些 回答 都是正确的。取而代之的是,Sage创造了数字 \(2\) 作为浮点数 \(100\) 然后让paulzimmerman的mpfrclibrary计算这个近似数的平方根。

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) ,它有一个 完全不同 Sage的意思。意思是“试着从 \(a\) ”因此 QQ(a) 在Sage中是 QQ!a 在岩浆中(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)
<html><script type="math/tex">\newcommand{\Bold}[1]{\mathbf{#1}}-\frac{1}{2} ...
\[-{1}{1}{2},{(i,sqrt{3}+1)}{{1}{18},sqrt{8,sqrt{2{2}+675}sqrt{3}{3}-分形{5}{2})}}{1{1{3{3{3{3{3{3{3{3}{1}{1{6{6{6{6{6}6}{{(-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\) .

警告

以下测试目前中断,直到 :trac:`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