Sage 入门指南
- peakgg
- 帖子: 1122
- 注册时间: 2006-10-10 9:40
Sage 入门指南
本文翻译自Sage Tutorial V3.4,进行中...
Sage是一个可以进行代数、几何、数论、密码学、数值计算及相关领域的研究和教学的自由开源数学软件。Sage开发模型和Sage本身的技术都非常突出于强调开放、社区、协作和合作:我们是在造车,而不是在重复发明轮子。Sage总的目标是建立一个替代Maple、Mathematica 、Magma 和 MATLAB的可用的自由开源软件。
本入门指南是在几小时内熟悉Sage的最好途径。你可以阅读HTML和PDF版或者Sage notebook上的版本(在Sage中点击Help然后点击Tutorial进入自带的入门指南进行交互式的实践)。
简介
安装
使用Sage的几种方法
Sage的长期目标
导览
赋值、等式和运算
获取帮助
函数,缩进和计数
基本代数和微积分
绘图
一些函数的常见问题
基本域
多项式
线性代数
有限群,交换群
数论
一些更高等的数学
交互式Shell
你的Sage会话
记录输入和输出
忽略提示的粘贴
计时命令
错误与异常
反向搜索和tab自动完成
集成帮助系统
保存和加载独立对象
保存和加载完整会话
Notebook接口
接口
GP/PARI
GAP
Singular
Maxima
编程
加载和加附Sage文件
创建编译代码
独立的Python /Sage脚本
数据类型
列表,元组,以及序列
词典
集
迭代器
循环,函数,控制语句和比较
程序概要分析
分布式计算
概览
快速启动
文件
后记
为什么Python?
我想贡献,我该如何?
我如何引用Sage?
附录
二元计算算符优先级
参考书目
Sage是一个可以进行代数、几何、数论、密码学、数值计算及相关领域的研究和教学的自由开源数学软件。Sage开发模型和Sage本身的技术都非常突出于强调开放、社区、协作和合作:我们是在造车,而不是在重复发明轮子。Sage总的目标是建立一个替代Maple、Mathematica 、Magma 和 MATLAB的可用的自由开源软件。
本入门指南是在几小时内熟悉Sage的最好途径。你可以阅读HTML和PDF版或者Sage notebook上的版本(在Sage中点击Help然后点击Tutorial进入自带的入门指南进行交互式的实践)。
简介
安装
使用Sage的几种方法
Sage的长期目标
导览
赋值、等式和运算
获取帮助
函数,缩进和计数
基本代数和微积分
绘图
一些函数的常见问题
基本域
多项式
线性代数
有限群,交换群
数论
一些更高等的数学
交互式Shell
你的Sage会话
记录输入和输出
忽略提示的粘贴
计时命令
错误与异常
反向搜索和tab自动完成
集成帮助系统
保存和加载独立对象
保存和加载完整会话
Notebook接口
接口
GP/PARI
GAP
Singular
Maxima
编程
加载和加附Sage文件
创建编译代码
独立的Python /Sage脚本
数据类型
列表,元组,以及序列
词典
集
迭代器
循环,函数,控制语句和比较
程序概要分析
分布式计算
概览
快速启动
文件
后记
为什么Python?
我想贡献,我该如何?
我如何引用Sage?
附录
二元计算算符优先级
参考书目
上次由 peakgg 在 2009-03-24 21:12,总共编辑 3 次。
- peakgg
- 帖子: 1122
- 注册时间: 2006-10-10 9:40
Re: Sage 入门指南
简介
通读本指南需花3-4小时。你可以阅读HTML或PDF版本,或者在Sage中单击帮助,然后单击教程进入自带的入门指南进行交互式阅读。
尽管Sage的大部分是通过Python实现的,没有Python背景的同学也可阅读本教程。也许你啥时候想学学Python (一个非常有趣的语言! ),那么网上有很多极好的免费资源让你学,比如[PyT] 和 [Dive]。如果你只想赶快试试Sage,本教程就是你起步的地方。例如:
安装
如果你不想在电脑上装Sage,只想试一些命令,可以到http://www.sagenb.org用在线版。
否则就到Sage主页上文档的Sage安装指南部分看怎么把Sage安装到你电脑上的介绍去吧。这里我只讲两句题外话。
1.下载的Sage文件都是“内装电池?鬼使神差?”的。换句话说,虽然Sage使用Python , IPython ,PARI, GAP,Singular,Maxima,NTL,GMP等等,但你不需要一个一个地去装,它们都含在Sage的发行版中。但是要使用某些Sage的功能,比如Macaulay或KASH ,则必须安装相关的可选软件包,或者至少你的计算机上安装了相关的程序。Macaulay和KASH是用来列出可用的可选软件包的Sage包(键入sage -optional,或浏览Sage网站上的“下载”页)。
2.Sage的预编译二进制版本(可在Sage网站获得)比源码版安装便捷。只要将文件解解压就可以run了。
使用Sage的几种方法
你可以通过下面几种途径使用Sage。
Notebook图形界面:你可以到参考手册上看Notebook的之章或者本教程下面的Notebook部分;
交互式命令行:参见交互Shell一章;
编程:在Sage中编写解释和编译程序(见加载和加附Sage文件和生成编译代码章节);及
脚本:通过编写使用Sage库的独立Python脚本(见独立Python/Sage脚本一章)。
Sage的长远目标
有用:Sage的应用对象是学数学的学生(从高中到研究生院) ,教师和搞研究的数学家。目的是提供可用于探索和研究代数,几何,数论,微积分,数值计算等数学结构的软件,Sage可以更容易地对数学对象进行交互实验。
高效率:速度。Sage使用像GMP,PARI,GAP和NTL这样的高度优化的成熟软件,所以某些操作是非常之快的。
自由和开放源码:源代码必须免费并具有可读性,使用户可以了解系统到底在干什么,从而更容易扩展。就像数学家通过细读或浏览证明来深入了解一个定理一样,做计算的人应该能够通过阅读源代码的方式了解计算如何进行。如果你发布的文章采用Sage做计算,你可以放心,你的读者将始终能够自由获得Sage和它所有的源代码,你甚至可以将你使用的Sage存档并重新发布版本。
轻松编译:不管是Linux , OS X还是Windows用户都应该可以很容易地从源代码编译Sage。以使用户可以在更改系统时更具灵活性。
合作:提供对包括PARI,GAP,Singular,Maxima,KASH,Magma,Maple, 和Mathematica在内的大多数计算机数学套件的强大接口口。Sage的目的是统一和扩大现有的数学软件。
有案可查:带有许多实例及关于其背后的数学的讨论的“入门指南”,“编程指南”,“参考手册”和“如何实现...”。
可扩展性:能够定义新的数据类型和内置类型扩展,并支持多种语言。
友好:用户应该可以很容易地了解给定对象的功能并查看文件和源代码。并实现了高度的用户支持。
通读本指南需花3-4小时。你可以阅读HTML或PDF版本,或者在Sage中单击帮助,然后单击教程进入自带的入门指南进行交互式阅读。
尽管Sage的大部分是通过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
[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[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
[-3 1]
[ 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)
[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); print k
1
---------------------------
5 sqrt(73) 3
sqrt(3) I + ---------- + -
9 4
sage: N(k)
0.165495678130644 - 0.0521492082074256*I
sage: N(k,30) # 30 "bits"
0.16549568 - 0.052149208*I
sage: latex(k)
\frac{1}{{\sqrt{ 3 } i} + \frac{{5 \sqrt{ 73 }}}{9} + \frac{3}{4}}
如果你不想在电脑上装Sage,只想试一些命令,可以到http://www.sagenb.org用在线版。
否则就到Sage主页上文档的Sage安装指南部分看怎么把Sage安装到你电脑上的介绍去吧。这里我只讲两句题外话。
1.下载的Sage文件都是“内装电池?鬼使神差?”的。换句话说,虽然Sage使用Python , IPython ,PARI, GAP,Singular,Maxima,NTL,GMP等等,但你不需要一个一个地去装,它们都含在Sage的发行版中。但是要使用某些Sage的功能,比如Macaulay或KASH ,则必须安装相关的可选软件包,或者至少你的计算机上安装了相关的程序。Macaulay和KASH是用来列出可用的可选软件包的Sage包(键入sage -optional,或浏览Sage网站上的“下载”页)。
2.Sage的预编译二进制版本(可在Sage网站获得)比源码版安装便捷。只要将文件解解压就可以run了。
使用Sage的几种方法
你可以通过下面几种途径使用Sage。
Notebook图形界面:你可以到参考手册上看Notebook的之章或者本教程下面的Notebook部分;
交互式命令行:参见交互Shell一章;
编程:在Sage中编写解释和编译程序(见加载和加附Sage文件和生成编译代码章节);及
脚本:通过编写使用Sage库的独立Python脚本(见独立Python/Sage脚本一章)。
Sage的长远目标
有用:Sage的应用对象是学数学的学生(从高中到研究生院) ,教师和搞研究的数学家。目的是提供可用于探索和研究代数,几何,数论,微积分,数值计算等数学结构的软件,Sage可以更容易地对数学对象进行交互实验。
高效率:速度。Sage使用像GMP,PARI,GAP和NTL这样的高度优化的成熟软件,所以某些操作是非常之快的。
自由和开放源码:源代码必须免费并具有可读性,使用户可以了解系统到底在干什么,从而更容易扩展。就像数学家通过细读或浏览证明来深入了解一个定理一样,做计算的人应该能够通过阅读源代码的方式了解计算如何进行。如果你发布的文章采用Sage做计算,你可以放心,你的读者将始终能够自由获得Sage和它所有的源代码,你甚至可以将你使用的Sage存档并重新发布版本。
轻松编译:不管是Linux , OS X还是Windows用户都应该可以很容易地从源代码编译Sage。以使用户可以在更改系统时更具灵活性。
合作:提供对包括PARI,GAP,Singular,Maxima,KASH,Magma,Maple, 和Mathematica在内的大多数计算机数学套件的强大接口口。Sage的目的是统一和扩大现有的数学软件。
有案可查:带有许多实例及关于其背后的数学的讨论的“入门指南”,“编程指南”,“参考手册”和“如何实现...”。
可扩展性:能够定义新的数据类型和内置类型扩展,并支持多种语言。
友好:用户应该可以很容易地了解给定对象的功能并查看文件和源代码。并实现了高度的用户支持。
上次由 peakgg 在 2009-08-24 12:16,总共编辑 5 次。
- peakgg
- 帖子: 1122
- 注册时间: 2006-10-10 9:40
Re: Sage 入门指南
导览
本节是对Sage的功能进行导览。更多的例子参见回答“我如何构建...?"这样一般性问题的“Sage构建” 。或参见带有几千实例的“Sage参考手册” 。你也可以通过点击帮助链接在Sage笔记本中对本节进行互动操作。
(如果你是在Sage笔记本中阅读本手册,可以按 shift-enter来执行任何输入单元。你甚至可以在按 shift-enter之前对其进行编辑。在有些苹果机上你可能需要按shift-return,而不是shift-enter)
赋值、等式和运算
获取帮助
函数,缩进和计数
基本代数和微积分
求解
精确求解
数值求解
微分,积分等
求解微分方程
微分方程系统的欧拉方法
专有函数
绘图
二维绘图
三维绘图
函数的一些常见问题
基本域
多项式
单变量多项式
多元多项式
线性代数
稀疏线性代数
有限群,交换群
数论
p进数
一些更高等的数学
本节是对Sage的功能进行导览。更多的例子参见回答“我如何构建...?"这样一般性问题的“Sage构建” 。或参见带有几千实例的“Sage参考手册” 。你也可以通过点击帮助链接在Sage笔记本中对本节进行互动操作。
(如果你是在Sage笔记本中阅读本手册,可以按 shift-enter来执行任何输入单元。你甚至可以在按 shift-enter之前对其进行编辑。在有些苹果机上你可能需要按shift-return,而不是shift-enter)
赋值、等式和运算
获取帮助
函数,缩进和计数
基本代数和微积分
求解
精确求解
数值求解
微分,积分等
求解微分方程
微分方程系统的欧拉方法
专有函数
绘图
二维绘图
三维绘图
函数的一些常见问题
基本域
多项式
单变量多项式
多元多项式
线性代数
稀疏线性代数
有限群,交换群
数论
p进数
一些更高等的数学
- peakgg
- 帖子: 1122
- 注册时间: 2006-10-10 9:40
Re: Sage 入门指南
赋值、等式和运算
除了少数情况外,Sage使用Python语言,因此关于Python的大多数介绍性书籍对学习Sage都有帮助。
Sage使用=赋值。使用== , <= , > = , < 和 >进行比较:
Sage提供全部的基本数学运算:
3^2*4 + 2%5这样的表达式的计算取决于运算符的顺序,其于A.1节中的“运算符排名表”中指定。
Sage同样提供一些常用的数学函数;下面是一些例子:
最后的例子表明,某些数学表达式返回“准确”值,而不是数值逼近。要获得数值逼近,可使用n函数或n方法(两者有个更长的名称, numerical_approx ,函数N的功能与n相同) 。其采取可选参数prec或digits来指定输出二进制精度或十进制精度的位数,默认的精度是53位二进制。
Python是动态类型的,因此,提交给每个变量的值都有一个关联的类型,但某个变量的值可能是特定范围内的任何Python数据类型:
与此不同,C语言是静态类型的;一个变量被声明为int就只能容纳一个int值。
在Python中以0开头的整数被视为八进制数,也就是以8为基数的数,这是造成混淆的一个潜在的根源。
这与C语言一致。
除了少数情况外,Sage使用Python语言,因此关于Python的大多数介绍性书籍对学习Sage都有帮助。
Sage使用=赋值。使用== , <= , > = , < 和 >进行比较:
代码: 全选
sage: a = 5
sage: a
5
sage: 2 == 2
True
sage: 2 == 3
False
sage: 2 < 3
True
sage: a == 5
True
代码: 全选
sage: 2**3 # ** 表示幂运算
8
sage: 2^3 # ^ 是 ** 的同义符(与Python不同)
8
sage: 10 % 3 # 对于整数而言 % 表示取模,即求余
1
sage: 10/4
5/2
sage: 10//4 # 对于整数 // 返回整数商
2
sage: 4 * (10 // 4) + 10 % 4 == 10
True
sage: 3^2*4 + 2%5
38
Sage同样提供一些常用的数学函数;下面是一些例子:
代码: 全选
sage: sqrt(3.4)
1.84390889145858
sage: sin(5.135)
-0.912021158525540
sage: sin(pi/3)
sqrt(3)/2
代码: 全选
sage: exp(2)
e^2
sage: n(exp(2))
7.38905609893065
sage: sqrt(pi).numerical_approx()
1.77245385090552
sage: sin(10).n(digits=5)
-0.54402
sage: N(sin(10),digits=10)
-0.5440211109
sage: numerical_approx(pi, prec=200)
3.1415926535897932384626433832795028841971693993751058209749
代码: 全选
sage: a = 5 # a是一个整数
sage: type(a)
<type 'sage.rings.integer.Integer'>
sage: a = 5/3 # 现在a是一个有理数
sage: type(a)
<type 'sage.rings.rational.Rational'>
sage: a = 'hello' # 现在a是一个字符串
sage: type(a)
<type 'str'>
在Python中以0开头的整数被视为八进制数,也就是以8为基数的数,这是造成混淆的一个潜在的根源。
代码: 全选
sage: 011
9
sage: 8 + 1
9
sage: n = 011
sage: n.str(8) # 以8为基数的n的字符串表示形式
'11'
上次由 peakgg 在 2009-03-24 21:07,总共编辑 1 次。
-
- 帖子: 73
- 注册时间: 2007-05-07 9:42
Re: Sage 入门指南
free 这个词很难讲
就像数学家深入了解一个定理或略读证明一样
Just as mathematicians gain a deeper understanding of a theorem by carefully reading or at
least skimming the proof,
3^2*4 + 2%5这样的表达式的计算取决于运算符的顺序,,其于“二元算术运算符优先级”中的“运算符排名表”中指定。
The computation of an expression like 3^2*4 + 2%5 depends on the order in which the
operations are applied; this is specified in the “operator precedence table” in Section A.1.
S同样提供一些常用的数学函数;下面是一些例子
Sage also provides many familiar mathematical functions; here are just a few examples:
潜在的混乱的Python是一个整数字面开始的零被视为八进制数,即一些在基地8
A potential source of confusion in Python is that an integer literal that begins with a zero
is treated as an octal number, i.e., a number in base 8
就像数学家深入了解一个定理或略读证明一样
Just as mathematicians gain a deeper understanding of a theorem by carefully reading or at
least skimming the proof,
3^2*4 + 2%5这样的表达式的计算取决于运算符的顺序,,其于“二元算术运算符优先级”中的“运算符排名表”中指定。
The computation of an expression like 3^2*4 + 2%5 depends on the order in which the
operations are applied; this is specified in the “operator precedence table” in Section A.1.
S同样提供一些常用的数学函数;下面是一些例子
Sage also provides many familiar mathematical functions; here are just a few examples:
潜在的混乱的Python是一个整数字面开始的零被视为八进制数,即一些在基地8
A potential source of confusion in Python is that an integer literal that begins with a zero
is treated as an octal number, i.e., a number in base 8
- peakgg
- 帖子: 1122
- 注册时间: 2006-10-10 9:40
Re: Sage 入门指南

多谢wangtwo
- peakgg
- 帖子: 1122
- 注册时间: 2006-10-10 9:40
Re: Sage 入门指南
获取帮助
Sage有大量的内建文档,可通过在键入的函数名或常量后面加一个问号查看:
Sage同样提供“Tab自动补全”:输入一个函数的前几个字母后按tab键。例如,如果在键入ta后按TAB,Sage会列印出tachyon,tan,tanh,taylor。这是一个在Sage中查询函数名和其它结构的很好途径。
函数,缩进和计数
在Sage中定义函数使用def命令,并在变量参数列表后加一个冒号。例如:
注:依据notebook的不同版本,你可能会在本例的第二行看到三个点...。不要自己打,它们只是为强调本行代码缩进自动生成的。
不要指明任何参数的类型。可以指明多个参数,每个参数也可以给定可选的默认值。例如,下面定义的函数如果在使用中不给出divisor的值,函数会默认divisor=2。
在调用函数时也可以明确指定一个或每个输入参数的值;在明确指定时,参数的顺序可以是任意的:
在Python中不像其他函数那样采用花括号或begin和end块来指示代码块。相反,代码块以缩进表示,因此缩进一定要匹配。例如,下面的代码因为return语句因为与上面的其它行缩进不一致而产生了语法错误。
修正缩进后,函数正常工作:
行末的分号不是必须的;新一行的开始既表明上一行的结束。但是如果在一行中有多个语句,每条语句必须以分号分开:
如果想将一行代码分为多行,可使用反斜线断行:
在Sage中通过一列整数的迭代来计数。例如,下面的第一行等价于C++或Jave中的for(i=0; i<3; i++):
下面的第一行等同于for(i=2;i<5;i++)。
第三个参数控制步进值,因此下面的代码等同于for(i=1;i<6;i+=2)。
在Sage中经常需要为显示运算出的数字列印数表。简单点的办法是使用格式化字符串。下面代码产生了一个列距为6的平方值立方值三列表。
Sage中最基础的数据结构是列表--正如其名--一个任意对象的列表。例如前面用过的range即产生一个列表:
下面是一个更复杂的列表:
和很多语言一样,列表的索引以0开始。
用len(v)可获得v的长度,用v.append(obj)可将一个新的对象追加到v的末尾,用del v可以删掉v的第i项:
另外一个重要的数据结构是字典(或关联列)。除了可以用几乎任何对象作为索引外(索引不可更改),它与列表一样:
也可以使用类来定义新的数据类型。用类封装数学对象是个强大的技术,可以帮助简化和组织Sage程序。在下面的代码中,由内置类型list派生的类可表示n以内的偶数列。
调用__inti__方法可在实例创建时进行初始化;__repr__方法会将对象列印出来。我们称第二行的__init__方法为构造函数。用下面的代码创建Evens类的实例。
注意调用e时使用之前定义的__repr__方法进行了列印。要看到潜藏的数列,使用list函数。
我们也可以看到e的n属性及将其看待成一个列表。
Sage有大量的内建文档,可通过在键入的函数名或常量后面加一个问号查看:
代码: 全选
sage: tan?
Type: <class 'sage.calculus.calculus.Function_tan'>
Definition: tan( [noargspec] )
Docstring:
The tangent function
EXAMPLES:
sage: tan(pi)
0
sage: tan(3.1415)
-0.0000926535900581913
sage: tan(3.1415/4)
0.999953674278156
sage: tan(pi/4)
1
sage: tan(1/2)
tan(1/2)
sage: RR(tan(1/2))
0.546302489843790
sage: log2?
Type: <class 'sage.functions.constants.Log2'>
Definition: log2( [noargspec] )
Docstring:
The natural logarithm of the real number 2.
EXAMPLES:
sage: log2
log2
sage: float(log2)
0.69314718055994529
sage: RR(log2)
0.693147180559945
sage: R = RealField(200); R
Real Field with 200 bits of precision
sage: R(log2)
0.69314718055994530941723212145817656807550013436025525412068
sage: l = (1-log2)/(1+log2); l
(1 - log(2))/(log(2) + 1)
sage: R(l)
0.18123221829928249948761381864650311423330609774776013488056
sage: maxima(log2)
log(2)
sage: maxima(log2).float()
.6931471805599453
sage: gp(log2)
0.6931471805599453094172321215 # 32-bit
0.69314718055994530941723212145817656807 # 64-bit
sage: sudoku?
File: sage/local/lib/python2.5/site-packages/sage/games/sudoku.py
Type: <type 'function'>
Definition: sudoku(A)
Docstring:
Solve the 9x9 Sudoku puzzle defined by the matrix A.
EXAMPLE:
sage: A = matrix(ZZ,9,[5,0,0, 0,8,0, 0,4,9, 0,0,0, 5,0,0,
0,3,0, 0,6,7, 3,0,0, 0,0,1, 1,5,0, 0,0,0, 0,0,0, 0,0,0, 2,0,8, 0,0,0,
0,0,0, 0,0,0, 0,1,8, 7,0,0, 0,0,4, 1,5,0, 0,3,0, 0,0,2,
0,0,0, 4,9,0, 0,5,0, 0,0,3])
sage: A
[5 0 0 0 8 0 0 4 9]
[0 0 0 5 0 0 0 3 0]
[0 6 7 3 0 0 0 0 1]
[1 5 0 0 0 0 0 0 0]
[0 0 0 2 0 8 0 0 0]
[0 0 0 0 0 0 0 1 8]
[7 0 0 0 0 4 1 5 0]
[0 3 0 0 0 2 0 0 0]
[4 9 0 0 5 0 0 0 3]
sage: sudoku(A)
[5 1 3 6 8 7 2 4 9]
[8 4 9 5 2 1 6 3 7]
[2 6 7 3 4 9 5 8 1]
[1 5 8 4 6 3 9 7 2]
[9 7 4 2 1 8 3 6 5]
[3 2 6 7 9 5 4 1 8]
[7 8 2 9 3 4 1 5 6]
[6 3 5 1 7 2 8 9 4]
[4 9 1 8 5 6 7 2 3]
函数,缩进和计数
在Sage中定义函数使用def命令,并在变量参数列表后加一个冒号。例如:
代码: 全选
sage: def is_even(n):
... return n%2 == 0
sage: is_even(2)
True
sage: is_even(3)
False
不要指明任何参数的类型。可以指明多个参数,每个参数也可以给定可选的默认值。例如,下面定义的函数如果在使用中不给出divisor的值,函数会默认divisor=2。
代码: 全选
sage: def is_divisible_by(number, divisor=2):
... return number%divisor == 0
sage: is_divisible_by(6,2)
True
sage: is_divisible_by(6)
True
sage: is_divisible_by(6, 5)
False
代码: 全选
sage: is_divisible_by(6, divisor=5)
False
sage: is_divisible_by(divisor=2, number=6)
True
代码: 全选
sage: def even(n):
... v = []
... for i in range(3,n):
... if i % 2 == 0:
... v.append(i)
... return v
Syntax Error:
return v
代码: 全选
sage: def even(n):
... v = []
... for i in range(3,n):
... if i % 2 == 0:
... v.append(i)
... return v
sage: even(10)
[4, 6, 8]
代码: 全选
sage: a = 5; b = a + 3; c = b^2; c
64
代码: 全选
sage: 2 + \
... 3
5
代码: 全选
sage: for i in range(3):
... print i
0
1
2
代码: 全选
sage: for i in range(2,5):
... print i
2
3
4
代码: 全选
sage: for i in range(1,6,2):
... print i
1
3
5
代码: 全选
sage: for i in range(5):
... print '%6s %6s %6s'%(i, i^2, i^3)
0 0 0
1 1 1
2 4 8
3 9 27
4 16 64
代码: 全选
sage: range(2,10)
[2, 3, 4, 5, 6, 7, 8, 9]
代码: 全选
sage: v = [1, "hello", 2/3, sin(x^3)]
sage: v
[1, 'hello', 2/3, sin(x^3)]
代码: 全选
sage: v[0]
1
sage: v[3]
sin(x^3)
代码: 全选
sage: len(v)
4
sage: v.append(1.5)
sage: v
[1, 'hello', 2/3, sin(x^3), 1.50000000000000]
sage: del v[1]
sage: v
[1, 2/3, sin(x^3), 1.50000000000000]
代码: 全选
sage: d = {'hi':-2, 3/8:pi, e:pi}
sage: d['hi']
-2
sage: d[e]
pi
代码: 全选
sage: class Evens(list):
... def __init__(self, n):
... self.n = n
... list.__init__(self, range(2, n+1, 2))
... def __repr__(self):
... return "Even positive numbers up to n."
代码: 全选
sage: e = Evens(10)
sage: e
Even positive numbers up to n.
代码: 全选
sage: list(e)
[2, 4, 6, 8, 10]
代码: 全选
sage: e.n
10
sage: e[2]
6
- peakgg
- 帖子: 1122
- 注册时间: 2006-10-10 9:40
Re: Sage 入门指南
基本代数和微积分
Sage可以进行各种基本代数和微积分的计算:例如,方程式求解,微分,积分,拉普拉斯变换。可到“Sage构建”文档查看更多实例。
求解方程式
方程式精确求解
solve函数可以对方程式求解。使用前首先定义一些变量,然后将带有变量的方程式(或方程组)作为solve函数的参数进行求解:
可以求解方程式几个变量中的一个:
也可进行多变量求解:
下面是Jason Grout提供的一个使用Sage求解非线性方程组的例子:首先求出方程组的符号解:
如果想求数值近似解,则可用下面的代码:
(函数n列印出解的数值近似,其参数是该数值的比特精度。)
方程式求数值解
有时solve函数可能无法求出方程式的确切解。如果求不出,可以用find_root函数去求它的数值解。例如,下面的等式返回的结果不是我们想要的:
反过来,我们用find_root可对上面的等式求得一个在0<theta<pi/2间的解:
微分,积分等
Sage可以对很多方程求导或积分。例如,下面代码就u对sin(u)求导:
计算sin(x^2)的四阶导数:
分别对x^2 + 17*y^2求x和y偏导:
再看积分,不定积分和定积分。计算$\int {x\sin(x^2)}$和$int_0^1{\frac{x}{x^2+1}}$
对$\frac{1}{x^2-1}$进行部分分数展开:
求解微分方程
可以用Sage研究常微分方程。求解方程x'+x-1=0:
这里用到了Sage的Maxima[Max]接口,因此输出结果可能与Sage的其它输出有些不同。在本例中,微分方程的通解为x(t)=e^-t(e^t+c)。
同样可以进行拉普拉斯变换;t^2e^t-sin(t)的拉普拉斯变换如下:
(译注:本节后面的说明中数学公式太多了,无法继续翻译,看来翻译个notebook版的更靠谱。)
Sage可以进行各种基本代数和微积分的计算:例如,方程式求解,微分,积分,拉普拉斯变换。可到“Sage构建”文档查看更多实例。
求解方程式
方程式精确求解
solve函数可以对方程式求解。使用前首先定义一些变量,然后将带有变量的方程式(或方程组)作为solve函数的参数进行求解:
代码: 全选
sage: x = var('x')
sage: solve(x^2 + 3*x + 2, x)
[x == -2, x == -1]
代码: 全选
sage: x, b, c = var('x b c')
sage: solve([x^2 + b*x + c == 0],x)
[x == (-sqrt(b^2 - 4*c) - b)/2, x == (sqrt(b^2 - 4*c) - b)/2]
代码: 全选
sage: x, y = var('x, y')
sage: solve([x+y==6, x-y==4], x, y)
[[x == 5, y == 1]]
代码: 全选
sage: var('x y p q')
(x, y, p, q)
sage: eq1 = p+q==9
sage: eq2 = q*y+p*x==-6
sage: eq3 = q*y^2+p*x^2==24
sage: solve([eq1,eq2,eq3,p==1],p,q,x,y)
[[p == 1, q == 8, x == (-4*sqrt(10) - 2)/3, y == (sqrt(2)*sqrt(5) - 4)/6],
[p == 1, q == 8, x == (4*sqrt(10) - 2)/3, y == (-sqrt(2)*sqrt(5) - 4)/6]]
代码: 全选
sage: solns = solve([eq1,eq2,eq3,p==1],p,q,x,y, solution_dict=True)
sage: [[s[p].n(30), s[q].n(30), s[x].n(30), s[y].n(30)] for s in solns]
[[1.0000000, 8.0000000, -4.8830369, -0.13962039],
[1.0000000, 8.0000000, 3.5497035, -1.1937129]]
方程式求数值解
有时solve函数可能无法求出方程式的确切解。如果求不出,可以用find_root函数去求它的数值解。例如,下面的等式返回的结果不是我们想要的:
代码: 全选
sage: theta = var('theta')
sage: solve(cos(theta)==sin(theta))
[sin(theta) == cos(theta)]
代码: 全选
sage: find_root(cos(theta)==sin(theta),0,pi/2)
0.78539816339744839
Sage可以对很多方程求导或积分。例如,下面代码就u对sin(u)求导:
代码: 全选
sage: u = var('u')
sage: diff(sin(u), u)
cos(u)
代码: 全选
sage: x = var('x')
sage: solve(x^2 + 3*x + 2, x)
[x == -2, x == -1]
代码: 全选
sage: x, y = var('x,y')
sage: f = x^2 + 17*y^2
sage: f.diff(x)
2*x
sage: f.diff(y)
34*y
代码: 全选
sage: integral(x*sin(x^2), x)
-cos(x^2)/2
sage: integral(x/(x^2+1), x, 0, 1)
log(2)/2
代码: 全选
sage: f = 1/((1+x)*(x-1))
sage: f.partial_fraction(x)
1/(2*(x - 1)) - 1/(2*(x + 1))
sage: print f.partial_fraction(x)
1 1
--------- - ---------
2 (x - 1) 2 (x + 1)
可以用Sage研究常微分方程。求解方程x'+x-1=0:
代码: 全选
sage: t = var('t') # 定义变量t
sage: x = function('x',t) # 定义x是该变量的一个函数
sage: DE = diff(x, t) + x - 1
sage: desolve(DE, [x,t])
e^(-t)*(e^t + c)
同样可以进行拉普拉斯变换;t^2e^t-sin(t)的拉普拉斯变换如下:
代码: 全选
sage: s = var("s")
sage: t = var("t")
sage: f = t^2*exp(t) - sin(t)
sage: f.laplace(t,s)
2/(s - 1)^3 - 1/(s^2 + 1)
上次由 peakgg 在 2009-03-25 20:04,总共编辑 1 次。
-
- 帖子: 73
- 注册时间: 2007-05-07 9:42
Re: Sage 入门指南
(译注:本节后面的说明中数学公式太多了,无法继续翻译,看来翻译个notebook版的更靠谱。)
tutorial 网页上的数学公式和表格也是图片, peakgg同学可以直接插入原文里的图片链接.
论坛不像 wiki或gezhi支持TeX编辑数学公式, 确实不方便.
希望peakgg同学继续努力
tutorial 网页上的数学公式和表格也是图片, peakgg同学可以直接插入原文里的图片链接.
论坛不像 wiki或gezhi支持TeX编辑数学公式, 确实不方便.
希望peakgg同学继续努力
- peakgg
- 帖子: 1122
- 注册时间: 2006-10-10 9:40
Re: Sage 入门指南
上一节的后面两小节先放着吧 一个一个的加图片链接太麻烦了
本文建议亲自在notebook中实践 本节尤是
绘图
Ssge可进行二维和三维绘图
二维绘图
在二维绘图中,Sage可以画圆,线和多边形;在直角坐标和极坐标中画函数曲线,等高线和矢量场。这里提供一些实例。更多关于Sage的绘图输出实例请见求解微分方程,Maxima及”Sage构建“文档。
下面的命令产生一个以原点为中心,半径为1的黄色圆:
也可以绘制填充圆:
还可以将产生的圆赋值给一个变量;此时图形不会绘制出来:
想要绘制,要用c.show()或show(c)命令,如下:
相应地,执行c.save('文件名.png')会将绘制的图形保存到指定的文件。
现在因为各坐标缩放不同的缘故这些圆看起来更像椭圆,可以用下面代码修正:
show(c, aspect_ratio=1)命令可实现同样目的,或者直接使用c.save('文件名.png', aspect_ratio=1)来保存文件。
绘制基本函数很容易:
指定变量后,可进行带参量绘图:
可以用相加的方式将几个绘图结合:
先建立一系列点(下例中的L)并使用polygon命令以之为边界绘制填充图形是一个很好的方法。下例中绘制了一个绿色的三角形:
输入show(p, axes=false)可查看没有坐标轴的结果。
可以在图形中加入文本:
教微积分的老师经常在黑板上画这样的图形:绘制反正弦的不止一个周期:即,绘制x在-2pi到2pi之间的y=sin(x),翻转约45度的线。下面的Sage可以做到:
(译注:此处用到了srange()函数,这是对应Python中的range()函数的,因为range()函数只支持整数列,而数学运算显然需要大量用到创建浮点数列的情况,因此Sage中多了这与numpy中arange()功能类似的函数。相应的,对应于Python中在大量数据时使用的xrange()迭代器的是xsrange()函数。)
由于正切函数的值域比正弦大,如果使用相同的手段绘制反正切函数则需要修正x轴的显示范围:
Sage同样可以绘制极坐标,等高线和矢量场图(针对特定类型的函数)。这里是一个绘制等高线的例子:
三维绘图
Sage采用一个叫做[Jmol]的开源包绘制三维图形。下面是一些实例:
黄色怀特尼伞:
使用parametric_plot3d计算看到图形后就可以点击拖拉来旋转图形。
穿越帽:
扭环:
[Jmol]: 一个三维化学结构的开源Java查看器 http://www.jmol.org/
本文建议亲自在notebook中实践 本节尤是
绘图
Ssge可进行二维和三维绘图
二维绘图
在二维绘图中,Sage可以画圆,线和多边形;在直角坐标和极坐标中画函数曲线,等高线和矢量场。这里提供一些实例。更多关于Sage的绘图输出实例请见求解微分方程,Maxima及”Sage构建“文档。
下面的命令产生一个以原点为中心,半径为1的黄色圆:
代码: 全选
sage: circle((0,0), 1, rgbcolor=(1,1,0))
代码: 全选
sage: circle((0,0), 1, rgbcolor=(1,1,0), fill=True)
代码: 全选
sage: c = circle((0,0), 1, rgbcolor=(1,1,0))
代码: 全选
sage: c.show()
现在因为各坐标缩放不同的缘故这些圆看起来更像椭圆,可以用下面代码修正:
代码: 全选
sage: c.show(aspect_ratio=1)
绘制基本函数很容易:
代码: 全选
sage: plot(cos, (-5,5))
代码: 全选
sage: x = var('x')
sage: parametric_plot((cos(x),sin(x)^3),0,2*pi,rgbcolor=hue(0.6))
代码: 全选
sage: x = var('x')
sage: p1 = parametric_plot((cos(x),sin(x)),0,2*pi,rgbcolor=hue(0.2))
sage: p2 = parametric_plot((cos(x),sin(x)^2),0,2*pi,rgbcolor=hue(0.4))
sage: p3 = parametric_plot((cos(x),sin(x)^3),0,2*pi,rgbcolor=hue(0.6))
sage: show(p1+p2+p3, axes=false)
代码: 全选
sage: L = [[-1+cos(pi*i/100)*(1+cos(pi*i/100)),\
... 2*sin(pi*i/100)*(1-cos(pi*i/100))] for i in range(200)]
sage: polygon(L, rgbcolor=(1/8,3/4,1/2))
可以在图形中加入文本:
代码: 全选
sage: L = [[6*cos(pi*i/100)+5*cos((6/2)*pi*i/100),\
... 6*sin(pi*i/100)-5*sin((6/2)*pi*i/100)] for i in range(200)]
sage: p = polygon(L, rgbcolor=(1/8,1/4,1/2))
sage: t = text("hypotrochoid", (5,4), rgbcolor=(1,0,0))
sage: show(p+t)
代码: 全选
sage: v = [(sin(x),x) for x in srange(-2*float(pi),2*float(pi),0.1)]
sage: line(v)
由于正切函数的值域比正弦大,如果使用相同的手段绘制反正切函数则需要修正x轴的显示范围:
代码: 全选
sage: v = [(tan(x),x) for x in srange(-2*float(pi),2*float(pi),0.01)]
sage: show(line(v), xmin=-20, xmax=20)
代码: 全选
sage: f = lambda x,y: cos(x*y)
sage: contour_plot(f, (-4, 4), (-4, 4))
Sage采用一个叫做[Jmol]的开源包绘制三维图形。下面是一些实例:
黄色怀特尼伞:
代码: 全选
sage: u, v = var('u,v')
sage: fx = u*v
sage: fy = u
sage: fz = v^2
sage: parametric_plot3d([fx, fy, fz], (u, -1, 1), (v, -1, 1),
... frame=False, color="yellow")
穿越帽:
代码: 全选
sage: u, v = var('u,v')
sage: fx = (1+cos(v))*cos(u)
sage: fy = (1+cos(v))*sin(u)
sage: fz = -tanh((2/3)*(u-pi))*sin(v)
sage: parametric_plot3d([fx, fy, fz], (u, 0, 2*pi), (v, 0, 2*pi),
... frame=False, color="red")
代码: 全选
sage: u, v = var('u,v')
sage: fx = (3+sin(v)+cos(u))*cos(2*v)
sage: fy = (3+sin(v)+cos(u))*sin(2*v)
sage: fz = sin(u)+2*cos(v)
sage: parametric_plot3d([fx, fy, fz], (u, 0, 2*pi), (v, 0, 2*pi),
... frame=False, color="red")
上次由 peakgg 在 2009-03-27 10:18,总共编辑 2 次。
-
- 帖子: 73
- 注册时间: 2007-05-07 9:42
Re: Sage 入门指南
奇怪 装过java 在iceweasel中看不到结果, 但是在opera中可以
You do not have Java applets enabled in your web browser, or your browser is blocking this applet.
Check the warning message from your browser and/or enable Java applets in
your web browser preferences, or install the Java Runtime Environment from www.java.com
You do not have Java applets enabled in your web browser, or your browser is blocking this applet.
Check the warning message from your browser and/or enable Java applets in
your web browser preferences, or install the Java Runtime Environment from www.java.com
- wangdu2002
- 帖子: 13284
- 注册时间: 2008-12-13 19:39
- 来自: 物华天宝人杰地灵
- peakgg
- 帖子: 1122
- 注册时间: 2006-10-10 9:40
Re: Sage 入门指南
ubuntu的官方论坛上有人说要用openjdk 不过那个问问题的人最后也没解决问题 他装的是64位系统 被建议改装32位的 如果你装的是32位的系统 可以试一试openjdkwangtwo 写了:奇怪 装过java 在iceweasel中看不到结果, 但是在opera中可以
You do not have Java applets enabled in your web browser, or your browser is blocking this applet.
Check the warning message from your browser and/or enable Java applets in
your web browser preferences, or install the Java Runtime Environment from http://www.java.com
地址在这http://ubuntuforums.org/archive/index.php/t-927571.html
用这个jmol是迫不得已吧 vtk和mayavi应该不支持浏览器的
- greco
- 帖子: 2487
- 注册时间: 2007-04-06 10:24
- 来自: ~/Shanghai
Re: Sage 入门指南
支持
支持

http://silenceisdefeat.com/~greco
代码: 全选
''.join([chr(ord(c)-2) for c in 'O{"G/ockn"ku<"itgeq0ujkBiockn0eqo'])
echo -n "Z3JlY28uc2hpQGdtYWlsLmNvbQ==" | base64 -d
- peakgg
- 帖子: 1122
- 注册时间: 2006-10-10 9:40
Re: Sage 入门指南
建议使用notebook前先浏览一下操作指南,至少知道怎么删除元组(就是每一个输入框),怎么开始运算,进行文档和源码全文搜索,插入HTML,查询帮助,隐藏/显示输出,在中间插入新元组,中断计算,查看源码及分离和联接元组。
上次由 peakgg 在 2009-06-01 21:20,总共编辑 1 次。