教程:使用Sage笔记本,导航帮助系统,第一个练习

这张工作表是威廉·斯坦因的 JPL09__intro_to_sage.sws 工作表和 Sage days 20.5_demo 工作表,旨在通过练习成为对Sage的交互式介绍。你将学习如何使用笔记本和呼叫帮助。

将此帮助页制作为工作表

如果您以静态网页的形式浏览此文档,则可以看到所有示例;但是,您需要逐个复制并粘贴它们才能进行实验。使用 Upload worksheet 按钮并复制粘贴此页面的URL,以获得笔记本中的可编辑副本。

如果您是作为Sage的live文档的一部分浏览此文档,您可以在这里直接使用示例;但是关闭此页面时,您所做的更改将丢失。使用 Copy worksheet from the File... 此页顶部的菜单可在笔记本中获取可编辑副本。

在实时教程和笔记本中,可以通过选择清除所有输出 Delete All Output from the Action... 菜单旁边 File... 工作表顶部的菜单。

输入、输入和编辑

评估代码 在Sage笔记本中,将代码键入输入单元格,然后按 shift-enter 或单击 evaluate 链接。现在用一个简单的表达式(例如。, 2+3 ). 自新的Sage进程启动以来,第一次计算单元格所需的时间比后续时间长:

sage: 2 + 3
5

sage: # edit here

sage: # edit here

创造 新输入单元格 ,单击移动鼠标时显示在单元格之间的蓝线。现在试试看:

sage: 1 + 1
2

sage: # edit here

你可以 回去 并通过单击任何单元格(或使用键盘上的箭头键上下移动)来编辑它。回去把你的 2+3 以上至 3+3 重新评估。空单元格可以是 删除 用退格键。

你也可以 编辑此文本 在这里双击它,这将打开tinymcejavascript文本编辑器。你甚至可以使用美元符号,像TeX或LaTeX那样,把嵌入的数学放入$sin(x)-y^3$。

帮助系统

在Sage中有很多方法可以帮助你。

  • 浏览文档(有一个链接 Help 在工作表的右上角),

  • tab 完成,

  • 上下文帮助。

下面我们通过实例详细介绍后两种方法。

完成和上下文文档

开始键入内容并按 tab 钥匙。接口尝试用命令名完成它。如果有一个以上的完成,那么它们都会呈现给你。记住Sage是区分大小写的,即区分大小写。因此 tab 完成 klein 不会给你看 KleinFourGroup 生成组的命令 ZZ/2 times ZZ/2 作为一个置换群。在下一个单元格中尝试:

sage: klein<tab>

sage: Klein<tab>

要查看命令的文档和示例,请键入问号 ? 在命令名的末尾,按 tab 密钥如下:

sage: KleinFourGroup?<tab>
sage: # edit here

练习A

最大的要素是什么 600851475143 是吗?

sage: factor?<tab>
sage: # edit here

在上面的操作中,我们没有存储任何数据供以后使用。这可以在Sage中用 = 符号如下:

sage: a = 3
sage: b = 2
sage: a+b
5

这可以理解为Sage评价表达的权利 = 签名并创建适当的对象,然后将该对象与左侧给出的标签相关联(参见 教程:Python和Sage中的对象和类 了解详情)。可以一次完成多个分配:

sage: a,b = 2,3
sage: a
2
sage: b
3

这允许我们直接交换两个变量的值:

sage: a,b = 2,3
sage: a,b = b,a
sage: a,b
(3, 2)

我们还可以同时为多个变量指定一个公共值:

sage: c = d = 1
sage: c, d
(1, 1)
sage: d = 2
sage: c, d
(1, 2)

注意当我们使用这个词时 变量 在计算机科学的意义上,我们指的是“一个附加在Sage存储的数据上的标签”。一旦一个对象被创建,一些 方法 应用它。这意味着 功能 而不是写作 f(my_object) 你写的 my_object.f() ::

sage: p = 17
sage: p.is_prime()
True

教程:Python和Sage中的对象和类 了解详情。要知道对象的所有方法,可以再次使用制表符完成。输入对象的名称,后跟一个点,然后按 tab

sage: a.<tab>

sage: # edit here

练习B

创建置换51324并将其分配给变量 p .

sage: Permutation?<tab>
sage: # edit here

什么是 inverse 属于 p 是吗?

sage: p.inv<tab>

sage: # edit here

ppattern 123个?1234呢?还有312?(即使您不知道什么是模式,也应该能够找到一个执行此操作的命令)。

sage: p.pat<tab>

sage: # edit here

一些线性代数

练习C

使用 matrix() 命令创建以下矩阵。

\[M=左(begin{array}{rrrrr}10&4&1&1\4&6&5&1\1&5&6&4\1&1&4&10结束{array}right)\]
sage: matrix?<tab>
sage: # edit here

然后,利用矩阵的方法,

  1. 计算矩阵的行列式。

  2. 计算矩阵的梯形形式。

  3. 计算矩阵的特征值。

  4. 计算矩阵的核。

  5. 计算矩阵的LLL分解(如果需要,可以查阅文档了解LLL是什么!)

sage: # edit here

sage: # edit here

既然你知道了如何使用矩阵的不同方法,

  1. 创建向量 v = (1,-1,-1,1) .

  2. 计算两个乘积: Mcdot vvcdot M . 塞奇暗地里在做什么数学上的边界运算?

sage: vector?<tab>
sage: # edit here

注解

Sage中的向量是行向量。一种方法,如 eigenspaces 可能不会返回您期望的值,因此最好指定 eigenspaces_lefteigenspaces_right 相反。内核也是一样 (left_kernelright_kernel ),以此类推。

一些阴谋

这个 plot() 命令允许您绘制函数图。回想一下,您可以通过按 tab 写入后的密钥 plot? 在单元格中:

sage: plot?<tab>
sage: # edit here

下面是一个简单的例子:

sage: var('x')   # make sure x is a symbolic variable
x
sage: plot(sin(x^2), (x,0,10))
Graphics object consisting of 1 graphics primitive

这是一个更复杂的情节。尝试以某种方式更改plot命令的每一个输入,并评估会发生什么:

sage: P = plot(sin(x^2), (x,-2,2), rgbcolor=(0.8,0,0.2), thickness=3, linestyle='--', fill='axis')
sage: show(P, gridlines=True)

上面我们用了 show() 命令显示创建后的绘图。你也可以使用 P.show 取而代之的是:

sage: P.show(gridlines=True)

试着把光标放在后面 P.show( 然后按tab键可获得一个选项列表,其中列出了如何更改给定输入的值。

sage: P.show(

一次绘制多个函数就像将它们相加一样简单:

sage: P1 = plot(sin(x), (x,0,2*pi))
sage: P2 = plot(cos(x), (x,0,2*pi), rgbcolor='red')
sage: P1 + P2
Graphics object consisting of 2 graphics primitives

符号表达式

下面是一个符号函数的示例:

sage: f(x) = x^4 - 8*x^2 - 3*x + 2
sage: f(x)
x^4 - 8*x^2 - 3*x + 2

sage: f(-3)
20

这是 数学的 变量 x . 当Sage开始时,它定义了符号 x 成为一个数学变量。如果要对变量使用其他符号,必须先定义它们:

sage: x^2
x^2
sage: u + v
Traceback (most recent call last):
...
NameError: name 'u' is not defined

sage: var('u v')
(u, v)
sage: u + v
u + v

不过,在不首先定义符号函数变量的情况下,也可以定义符号函数:

sage: f(w) = w^2
sage: f(3)
9

在这种情况下,这些变量是隐式定义的:

sage: w
w

练习D

定义符号函数 f(x) = x sin(x^2) . 情节 f 在域上 [-3,3] 把它涂成红色。使用 find_root() 数值逼近根的方法 f 在中场休息时 [1,2] ::

sage: # edit here

计算切线 fx=1 ::

sage: # edit here

情节 f 相切线 fx=1 在一幅图像中:

sage: # edit here

练习E(高级)

求解下列方程 y

\[y=1+x y^2\]

有两种解决方案,以其中一种为例 lim_{{xto0}}y(x)=1 . (别忘了创建变量 xy !).

sage: # edit here

展开 y 作为一个截断的泰勒级数 0 包含 n=10 条款。

sage: # edit here

你知道泰勒级数展开的系数吗?您可能需要使用 On-Line Encyclopedia of Integer Sequences 或者更好的是,萨奇的课 OEIS 其中查询百科全书:

sage: oeis?<tab>
sage: # edit here

恭喜你完成了第一个Sage教程!