Sage 教程
Release 4.3
Sage 开发组
January 08, 2010
CONTENTS
1 简介
1.1 安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 使用 Sage 的方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3
Sage 的长期目标 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 导览
2.1 赋值,等式和算术运算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 获取帮助 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 函数,缩进和计数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4 基本的代数和微积分 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5 绘图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6 函数的一些常见问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.7 基本的环 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.8 线性代数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.9 多项式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.10 有限群,阿贝尔群 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.11 数论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.12 Some more advanced mathematics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3 交互命令行
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1 你的 Sage 会话 (session)
3.2 记录输入和输出 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 粘贴忽略提示符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4 查看命令执行的时间 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5 错误和异常 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6 反向查找和 Tab 补全 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.7 集成帮助系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.8 保存和读取个人的对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.9 保存和读取完整的会话 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.10 Notebook 界面 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
4
4
5
7
7
9
11
15
22
25
29
31
35
40
42
45
55
55
57
58
59
61
62
63
65
67
68
i
71
71
73
73
74
77
77
78
79
80
81
84
85
85
86
88
91
91
91
93
95
95
97
97
99
99
101
103
105
4 接口
4.1 GP/PARI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 GAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3
Singular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4 Maxima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5 编程
5.1 读取和附加 Sage 文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2 创建编译代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3 独立的 Python/Sage 脚本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4 数据类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.5 列表,元素和序列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.6 字典 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.7 集合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.8 迭代器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.9 循环,函数,控制语句和比较 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.10 性能分析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6 分布式计算
6.1 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 快速入门 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3 文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7 后记
7.1 为什么选择 Python? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2 我想做点贡献。怎么做?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3 如何引用 Sage? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8 附录
8.1 二元数学运算符优先级 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9 参考文献
10 Indices and tables
Bibliography
ii
Sage 教程, Release 4.3
Sage 是免费、开源的数学软件,可用于代数、几何、数论、密码学、数值计算以及其他相关领域的教学
和科研。Sage 的开发模型和所用到的技术强调开放、社区、合作以及协同工作:我们是造汽车,而不是重
新发明轮子。Sage 的总体目标是成为一个实用的、免费的、开源的数学软件以代替 Maple,Mathematica,
Magma 和 MATLAB。
本教程是在几个小时内熟悉 Sage 最好的办法。你可以阅读 HTML 或者 PDF 版本,或者在 Sage
notebook 中(点击 Help ,再点击 Tutorial )边阅读边使用。
本文档基于 Creative Commons Attribution-Share Alike 3.0 License 协议发布。
CONTENTS
1
Sage 教程, Release 4.3
2
CONTENTS
CHAPTER
ONE
简介
阅读本教程的全部内容最多只需要 3、4 个小时。你可以阅读 HTML 或 PDF 版本,或者在 Sage
notebook 中点击 Help ,再点击 Tutorial ,边阅读边使用 Sage。
虽然 Sage 主要是用 Python 实现的,但是不懂 Python 也可以阅读本教程。如果你想要学习一下 Python
(一种非常有趣的语言),网上有很多关于 Python 的优秀资源,比如 [PyT] 和 [Dive] 。如果你只是想快速的
尝试一下 Sage,阅读本教程就对了。比如:
sage: 2 + 2
4
sage: factor(-2007)
-1 * 3ˆ2 * 223
sage: A = matrix(4,4, range(16)); A
2 3]
1
[ 0
5
6 7]
[ 4
9 10 11]
[ 8
[12 13 14 15]
sage: factor(A.charpoly())
xˆ2 * (xˆ2 - 30*x - 80)
sage: m = matrix(ZZ,2, range(4))
sage: m[0,0] = m[0,0] - 3
sage: m
1]
[-3
[ 2
3]
sage: E = EllipticCurve([1,2,3,4,5]);
sage: E
Elliptic Curve defined by yˆ2 + x*y + 3*y = xˆ3 + 2*xˆ2 + 4*x + 5
over Rational Field
sage: E.anlist(10)
3
Sage 教程, Release 4.3
[0, 1, 1, 0, -1, -3, 0, -1, -3, -3, -3]
sage: E.rank()
1
sage: k = 1/(sqrt(3)*I + 3/4 + sqrt(73)*5/9); k
1/(I*sqrt(3) + 5/9*sqrt(73) + 3/4)
sage: N(k)
0.165495678130644 - 0.0521492082074256*I
sage: N(k,30)
0.16549568 - 0.052149208*I
sage: latex(k)
\frac{1}{I \, \sqrt{3} + \frac{5}{9} \, \sqrt{73} + \frac{3}{4}}
# 30 "bits"
1.1 安装
如果你没有安装 Sage,只是想试几个命令,可以使用在线的 Sage notebook:http://www.sagenb.org 。
要在自己的电脑上安装 Sage,请参考 Sage 主页 [Sage] 上的 Sage 安装指南。这里我们只强调两点:
1. Sage 的安装包是“内置电池”的。也就是说,虽然 Sage 用到了 Python,IPython,PARI,GAP,
Singular,Maxima,NTL,GMP 等等一些软件,但是你不需要单独安装这些软件,因为它们已经包含
在 Sage 的发行版里了。然而,要使用 Sage 的一些特定的功能,比如 Macaulay 或者 KASH,你必须安
装相关的 Sage 可选包或者已经单独安装了这些软件。Macaulay 和 KASH 都是 Sage 的扩展包(输入
sage -optional 可以得到可选扩展包列表,或者在 Sage 网站上浏览“下载”页)。
2. 安装编译好的二进制版本(可在 Sage 网站找到)可能比安装源码版更容易、更快。只需要解压缩之后
运行 sage 即可。
1.2 使用 Sage 的方法
使用 Sage 的方法有好几种。
• Notebook 图形界面: 参见参考手册中关于 Notebook 的章节,以及下面的 Notebook 界面 ;
• 交互命令行: 参见 交互命令行 ;
• 程序: 在 Sage 中编写解释型或者编译型的程序(参见 读取和附加 Sage 文件 和 创建编译代码 );
• 脚本: 在独立的 Python 脚本中调用 Sage 库文件(参见 独立的 Python/Sage 脚本 )。
4
Chapter 1. 简介