Sage入门教程

这个 Sage 该文件是为MAA预习班“Sage:对本科生使用开源数学软件”(NSF提供资金,到期日0817071)的一系列教程中的第一篇。它是根据Creative Commons Attribution -ShareLiked 3.0许可证授权的 (CC BY-SA

如果您不确定如何登录到Sage服务器、开始使用本地安装或创建新工作表,您可能会找到 prelude on logging in 乐于助人。

否则,您可以继续本教程,该教程包含以下部分:

本教程只介绍最基本的功能级别。以后的教程将讨论微积分、高级绘图和各种各样的特定数学主题。

评估Sage命令

或者,我如何让萨奇做一些数学?

我们这里有两个平行的小节,它们涵盖(大致)相同的内容。

在Jupyter笔记本上评估

在Jupyter工作表中,有一些小盒子叫做 输入单元格代码单元 . 它们应该和你的浏览器差不多宽。

prep/media/BlankJupyter.png

在Jupyter细胞里做数学,必须做两件事。

  • 首先,在单元格内部单击,使单元格处于活动状态(即,具有亮绿色边框)。上面第一个牢房已经是这样了。(如果是蓝色,则Jupyter笔记本处于“命令模式”)。输入一些数学。

prep/media/InputJupyter.png
  • 然后,有两种选择。可以单击录制设备上看起来像“播放”符号的不太明显的图标:

    prep/media/RunCellIcon.png

    也可以使用键盘快捷键,即按住Shift键的同时按Enter键。我们称之为“转换中心”。

Sage在细胞下方打印出它的反应(这是 4 下面,萨奇证实了这一点 \(2+2=4\) ). 还请注意,Sage已经自动创建了一个新的单元格,并在您对第一个单元格进行了评估之后将其激活。

prep/media/OutputJupyter.png

要做更多的数学,就用更多的细胞做同样的事情!

prep/media/MoreCells.png

与SageNB不同的是,人们必须学习各种键盘快捷键或单击各种菜单项来操作单元格。有一个帮助菜单可以帮助您开始这项工作;Jupyter开发人员还维护 an example notebook 可能对你有帮助。

prep/media/JupyterHelpMenu.png

在SageNB笔记本中评估

在任何一个Sage工作表中,都有一个称为 输入单元格代码单元 . 它们应该和你的浏览器差不多宽。

prep/media/FirstCell.png

计算输入单元格的内容非常容易。

  • 首先,单击单元格内部,使该单元格处于活动状态(即,具有亮蓝色边框)。

    prep/media/ActiveCell.png
  • 然后,在左边单元格的正下方,会出现一个“evaluate”链接;单击此链接对单元格求值。

    prep/media/EvaluateCell.png

如果您使用的是此文档的实时版本,请尝试评估以下单元格。

sage: 2+2
4

Sage在细胞下方打印出它的反应(这是 4 上面,所以Sage证实了这一点 \(2+2=4\) ). 还请注意,Sage会在您评估第一个单元格后自动激活下一个单元格。

也可以使用键盘快捷键计算单元格。

  • 如果某个单元格未处于活动状态(如下面的live文档中),请单击它。

  • 然后按住Shift键,同时按Enter键。

我们称之为“转换中心”。尝试使用此单元格进行Shift -Enter。

sage: factor(2012)
2^2 * 503

如果一个输入单元格只能做一件事,那么它就没什么用处了,所以你可以编辑一个单元格,然后再对它求值。只需单击内部,然后像往常一样通过键入来进行任何更改。

试着换个号码 2012 以上至 2011 然后评估细胞以找到它的因子分解(惊讶吗?);然后试试你自己喜欢的号码。

为了进行更多的数学运算,我们需要能够创建新的输入单元格。这也很简单。

  • 将光标移到另一个单元格上方或下方的空间上。

  • 一条与浏览器宽度相同的蓝色水平线。

  • 单击该行以插入新单元格。

prep/media/ClickBlueLine.png

如果出于某种原因需要删除或删除输入单元格,只需删除其中的所有文本,然后在空单元格中按backspace。

尝试在下面创建几个新的输入单元格,在这些单元格中执行一些运算,然后删除其中一个输入单元格。

'Do some arithmetic in me, and make some other cells after me!'

Sage中的函数

首先,让我们探讨如何在Sage中定义和使用函数。

对于一个典型的数学函数,定义它是非常简单的。下面,我们定义一个函数。

\[f(x)=x^2\]
sage: f(x)=x^2

因为我们只想创建函数 \(f(x)\) ,Sage只是这样做,不打印任何东西给我们。

我们可以通过询问Sage什么来检查定义 f(x) 是:

sage: f(x)
x^2

如果我们问Sage什么 f 是(相对于 f(x) ),Sage打印出映射变量的函数的标准数学符号 \(x\) 价值观 \(x^2\) (使用“地图到”箭头 \(\mapsto\) 作为 |-->

sage: f
x |--> x^2

我们可以评估 \(f\) 以不同的价值。

sage: f(3)
9
sage: f(3.1)
9.61000000000000
sage: f(31/10)
961/100

注意,输出类型的变化取决于输入是否有十进制数;我们将在下面再次看到这一点。

当然,我们不局限于 \(x\) 作为变量。在下一个单元格中,我们定义函数 \(g(y)=2y-1\) .

sage: g(y)=2*y-1

但是,如果我们使用一个新变量,我们需要确保我们确实定义了一个函数。在下一个单元格中,我们将看到如果我们尝试单独使用随机输入会发生什么。

sage: z^2
Traceback (most recent call last):
...
NameError: name 'z' is not defined

下面的教程将对此进行详细说明。在这一点上,知道使用函数表示法就足够了(比如 g(y) )告诉塞奇你是认真的 y 作为一个变量。

你也可以用 var('z') 符号如下。

sage: var('z')
z
sage: z^2
z^2

这也证明了我们可以在一个单元格中放置多个命令,每个命令都放在单独的行上。最后一个命令的输出(如果有)将作为单元的输出进行打印。

Sage knows various common mathematical constants, like \(\pi\) (pi) and \(e\).

sage: f(pi)
pi^2
sage: f(e^-1)
e^(-2)

为了查看表达式的数值近似值,只需在 N() .

sage: N(f(pi))
9.86960440108936

另一个选项,通常在实践中更有用,是将表达式紧跟在 .n() (注意点)。

sage: f(pi).n()
9.86960440108936

现在,我们不会深入解释这种语法背后的原因,这对您来说可能是新的。对于那些感兴趣的人,Sage经常使用这种类型的语法(称为“面向对象”),因为。。。

  • Sage使用Python编程语言,它使用这种语法“在引擎盖下”,并且

  • 因为这样更容易区分

  • 数学对象,

  • 你对它所做的一切

  • 任何辅助论点。

For example, the following numerically evaluates (n) the constant \(\pi\) (pi) to twenty digits (digits=20).

sage: pi.n(digits=20)
3.1415926535897932385

Sage has lots of common mathematical functions built in, like \(\sqrt{x}\) (sqrt(x)) and \(\ln(x)\) (ln(x) or log(x)).

sage: log(3)
log(3)

请注意,没有理由用数值计算 \(\log(3)\) 所以Sage把它当作象征。下一个牢房也是如此- \(2\log(3)=\log(9)\) ,但没有任何理由这么做;毕竟,取决于你想要什么, \(\log(9)\) 可能比你需要的简单或不那么简单。

sage: log(3)+log(3)
2*log(3)
sage: log(3).n()
1.09861228866811

请再次注意,Sage尽量尊重输入的类型;加上小数告诉Sage我们有近似的输入,并且需要一个更近似的答案。(对于本文的介绍,完整的细节有点过于复杂。)

sage: log(3.)
1.09861228866811
sage: sqrt(2)
sqrt(2)

如果我们想让它看起来更好,我们可以使用 show 命令。我们将在下面看到更多类似的事情。

sage: show(sqrt(2))
\[qRT { 2 }\]
sage: sqrt(2).n()
1.41421356237310

你还记得什么吗 \(f\) 做?

sage: f(sqrt(2))
2

我们也可以很容易地绘制函数。

sage: plot(f, (x,-3,3))
Graphics object consisting of 1 graphics primitive

在另一个教程中,我们将更深入地研究绘图。这里,请注意,首选语法在圆括号中有绘图域的变量和端点,用逗号分隔。

如果你觉得很大胆,就把 sqrt 在0到100之间的下一个单元格中函数。

内助Sage

在Sage中有很多方法可以帮助你做事情。当你在Sage工作表中工作时,以下是几种常见的获得帮助的方法。

文档

Sage包括涵盖数千个函数的大量文档,其中包括许多示例、教程和其他帮助。

  • 访问这些文件的一种方法是单击任何工作表右上角的“帮助”链接,然后单击帮助页面顶部的首选选项。

  • 他们也可以随时在线在 Sage website ,其中有许多其他链接,如视频介绍。

  • 这个 Quick Reference cards 是另一个有用的工具,一旦你熟悉了Sage。

不过,我们在本教程中的主要关注点是帮助您可以从工作表中立即访问,而您不必这样做 any 那些东西。

制表符完成

笔记本中最有用的帮助是“tab completion”。这个想法是,即使你不能百分之百地确定一个命令的名称,前几个字母也应该足以帮助你找到它。这里有一个例子。

  • 假设你想做一个特定类型的图-也许是一个斜坡场图-但不太确定什么样的图。

  • 不过,从命令开始似乎是合理的 pl .

  • 然后就可以打字了 pl 在输入单元格中,然后按tab键查看以字母开头的所有命令 pl .

尝试在 pl 在下面的单元格中查看以字母开头的所有命令 pl . 你应该看看 plot_slope_field 是其中之一。

sage: pl

要选择一个,只需单击它;要停止查看它们,请按Escape/esc键。

你也可以用这个来看看你能对一个表达式或数学对象做些什么。

  • 假设您的表达式有一个名称,请键入它;

  • 然后在后面键入句点,

  • 然后按tab键。

您将看到一个列表,其中列出了您可以对表达式执行的所有操作。

若要尝试此操作,请对以下单元格求值,以确保 \(f\) 定义。

sage: f(x)=x^2

现在将光标放在句点之后,然后按tab键。

sage: f.

同样,Escape应该删除列表。

上面列出的其中一件事是 integrate . 我们试试吧。

sage: f.integrate(x)
x |--> 1/3*x^3

查找文档

或者,为什么所有的问号?

在前面的示例中,您可能会想知道为什么我需要 f.integrate(x) 而不仅仅是 f.integrate() ,通过类比 sqrt(2).n() .

为了找出答案,有另一个帮助工具可以使用从笔记本的权利。Sage中几乎所有的文档都有大量的示例,可以说明如何使用该函数。

  • 与制表符补全一样,键入表达式、句点和函数名。

  • 然后键入一个问号。

  • 按tab键 or 评估以查看文档。

要查看此帮助的工作原理,请将光标移到下面的问号后,然后按tab键。

sage: f.integrate?

示例说明语法需要 f.integrate(x) 不仅如此 f.integrate() . (毕竟,如果已经定义了几个变量,那么后者可能是模棱两可的)。

要在按tab键后停止查看文档,可以按Escape键,就像完成选项一样。

如果您想让文档长期可见,您可以 评价 一个带有问号(如下所示)的命令,用于访问文档,而不仅仅是制表符。然后它将一直保持在那里,直到您删除输入单元格。

sage: binomial?

用另一个函数试试这个!

寻找源头

从长远来看,还有一个帮助的来源可能对你有用,尽管可能不是立即的。

  • 一个人可以用 two 函数名后的问号以提取文档 and 函数的源代码。

  • 同样,要查看此帮助,您可以像下面这样计算单元格,也可以将光标移到问号后按tab键。

能够看到代码(计算机的底层指令)是Sage的一大优势。你可以看到 all 代码 一切 .

这意味着:

  • You 可以看到Sage在做什么。

  • 你好奇的学生可以看到发生了什么。

  • 如果你找到一个更好的方法去做某件事,那么你就可以看到如何改变它!

sage: binomial??

用Sage注释

无论是在课堂上还是在研究中使用Sage,向读者描述正在做的事情通常是有帮助的,比如在你现在阅读的描述中。

朱庇特注释

感谢一种叫做 Markdown TeX渲染引擎调用 MathJax ,您可以在Sage中键入比Sage命令更多的内容。这种具有数学意识的设置使Sage非常适合注释计算。

虽然Jupyter笔记本没有SageNB那样功能齐全的文字处理器,但我们仍然可以做相当多的工作。要使用此功能,我们创建一个 标记单元格 (与 输入单元 包含Sage计算的Sage命令)。

要在不使用键盘快捷键的情况下执行此操作,每个单元格都有一个菜单;选择“Markdown”。

prep/media/MarkDownMenu.png

现在你可以输入任何你想要的东西,包括使用 Latex 的数学。

prep/media/MDInput.png

然后计算单元格(例如,使用“Shift -Enter”):

prep/media/MDOutput.png

Markdown支持大量的基本格式,如粗体、下划线、基本列表等。

输入相当复杂的数学会很有趣,比如:

\[zeta(s)=sum{n=1}^{infty}frac{1}{n^s}=prod}left(frac{1}{1-p^{-s}right)。\]

只需键入以下内容:

$$\zeta(s)=\sum_{n=1}^{\infty}\frac{1}{n^s}=\prod_p \left(\frac{1}{1-p^{-s}}\right)$$

在一个降价的牢房里。

prep/media/Riemann.png

SageNB注释

多亏了 the mini-word processor TinyMCE 以及一个名为 MathJax ,您可以在SageNB笔记本工作表中键入比Sage命令更多的内容。这种具有数学意识的设置使Sage非常适合注释计算。

要使用字处理器,我们创建一个 文本单元格 (与 输入单元 包含Sage计算的Sage命令)。

要创建文本单元格,请执行以下操作。

  • 首先,在两个输入单元格之间移动光标,直到出现蓝色细线。

  • 然后按住Shift键并单击蓝色细线。

    prep/media/ClickBlueLine.png

因此,要创建一个输入单元格,只需单击鼠标,只需按一下Shift键,即可创建文本单元格。以下是您的文本单元格的外观。

prep/media/TextEditor.png

在live文档中,尝试在下面的输入单元格之间插入文本单元格。

2+2
2+2

TinyMCE在许多方面使格式化文本变得容易。试着用平常的 bold 按钮、下划线按钮、不同的文本字体和颜色、有序和无序列表、居中等等。根据你所熟悉的文字处理系统的一些快捷键,也可以根据你所熟悉的一些快捷键。

你还可以利用工作表在网上的优势做另外两件事。

  • 很容易链接到其他有用的网站以获取更多信息。

  • 在编辑器中,突出显示一两个单词,然后单击按钮右下角的小链接。

  • 您现在可以键入要链接到的网址。

  • 一定要事先准备好 http:// 地址。通常,还应该选择它以在新窗口中显示(这样Sage会话不会因有人单击它而中断)。

  • 你可能已经注意到上面的一些描述有排版数学。事实上,我们可以添加几乎任意 Latex 到我们的文本单元格!

  • 例如,添加类似

    \[zeta(s)=sum{n=1}^{infty}frac{1}{n^s}=prod}left(frac{1}{1-p^{-s}right)。\]
  • 只需键入以下内容:

    $$\zeta(s)=\sum_{n=1}^{\infty}\frac{1}{n^s}=\prod_p \left(\frac{1}{1-p^{-s}}\right)$$
    

    在字处理器中。

  • 这是否显示得尽可能好取决于您的浏览器中的字体,但它应该是易读的。

  • 更现实地说,我们可以打字 $f(x)=x^2$ 让我们记住这一点 \(f(x)=x^2\) 在此工作表中。

这里有一个简单的例子。

sage: f(x)=x^2
sage: f(9)
81

如果 \(f(x)=x^2\) 然后 \(f(9)=81\) .

编辑文本单元格很简单,只需双击文本即可。

如果您是本教程的实时版本,请尝试双击此文本以编辑此文本单元格(或任何文本单元格),以查看我们如何键入数学!

当然,由于Sage可以在 Python 编程语言,以及输出格式良好的HTML等。如果你有足够的编程经验来做这样的事情,那就去做吧!

sage: html("Sage is <a style='text-decoration:line-through'>somewhat</a> <b>really</b> cool! <p style='color:red'>(It even does HTML.)</p>")

结论

介绍性教程到此结束。我们希望现在您可以尝试在Sage中找到并使用简单的命令和函数。记住,帮助就像笔记本一样接近,或者 the Sage website .