当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 30 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : Sage 入门指南
帖子发表于 : 2009-03-23 20:42 
头像

注册: 2006-10-10 9:40
帖子: 1122
送出感谢: 1
接收感谢: 0 次
本文翻译自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?
附录
二元计算算符优先级
参考书目


最后由 peakgg 编辑于 2009-03-24 21:12,总共编辑了 3 次

页首
 用户资料  
 
2 楼 
 文章标题 : Re: Sage 入门指南
帖子发表于 : 2009-03-23 20:45 
头像

注册: 2006-10-10 9:40
帖子: 1122
送出感谢: 1
接收感谢: 0 次
简介
通读本指南需花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 次

页首
 用户资料  
 
3 楼 
 文章标题 : Re: Sage 入门指南
帖子发表于 : 2009-03-23 20:53 
头像

注册: 2006-10-10 9:40
帖子: 1122
送出感谢: 1
接收感谢: 0 次
导览
本节是对Sage的功能进行导览。更多的例子参见回答“我如何构建...?"这样一般性问题的“Sage构建” 。或参见带有几千实例的“Sage参考手册” 。你也可以通过点击帮助链接在Sage笔记本中对本节进行互动操作。
(如果你是在Sage笔记本中阅读本手册,可以按 shift-enter来执行任何输入单元。你甚至可以在按 shift-enter之前对其进行编辑。在有些苹果机上你可能需要按shift-return,而不是shift-enter)
赋值、等式和运算
获取帮助
函数,缩进和计数
基本代数和微积分
求解
精确求解
数值求解
微分,积分等
求解微分方程
微分方程系统的欧拉方法
专有函数
绘图
二维绘图
三维绘图
函数的一些常见问题
基本域
多项式
单变量多项式
多元多项式
线性代数
稀疏线性代数
有限群,交换群
数论
p进数
一些更高等的数学


页首
 用户资料  
 
4 楼 
 文章标题 : Re: Sage 入门指南
帖子发表于 : 2009-03-23 21:03 
头像

注册: 2006-10-10 9:40
帖子: 1122
送出感谢: 1
接收感谢: 0 次
赋值、等式和运算
除了少数情况外,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提供全部的基本数学运算:

代码:
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

3^2*4 + 2%5这样的表达式的计算取决于运算符的顺序,其于A.1节中的“运算符排名表”中指定。
Sage同样提供一些常用的数学函数;下面是一些例子:

代码:
sage: sqrt(3.4)
1.84390889145858
sage: sin(5.135)
-0.912021158525540
sage: sin(pi/3)
sqrt(3)/2


最后的例子表明,某些数学表达式返回“准确”值,而不是数值逼近。要获得数值逼近,可使用n函数或n方法(两者有个更长的名称, numerical_approx ,函数N的功能与n相同) 。其采取可选参数prec或digits来指定输出二进制精度或十进制精度的位数,默认的精度是53位二进制。

代码:
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


Python是动态类型的,因此,提交给每个变量的值都有一个关联的类型,但某个变量的值可能是特定范围内的任何Python数据类型:

代码:
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'>

与此不同,C语言是静态类型的;一个变量被声明为int就只能容纳一个int值。

在Python中以0开头的整数被视为八进制数,也就是以8为基数的数,这是造成混淆的一个潜在的根源。

代码:
sage: 011
9
sage: 8 + 1
9
sage: n = 011
sage: n.str(8)   # 以8为基数的n的字符串表示形式
'11'

这与C语言一致。


最后由 peakgg 编辑于 2009-03-24 21:07,总共编辑了 1 次

页首
 用户资料  
 
5 楼 
 文章标题 : Re: Sage 入门指南
帖子发表于 : 2009-03-24 17:35 

注册: 2007-05-07 9:42
帖子: 73
送出感谢: 0 次
接收感谢: 0 次
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


页首
 用户资料  
 
6 楼 
 文章标题 : Re: Sage 入门指南
帖子发表于 : 2009-03-24 21:08 
头像

注册: 2006-10-10 9:40
帖子: 1122
送出感谢: 1
接收感谢: 0 次
:em06 已改过
多谢wangtwo


页首
 用户资料  
 
7 楼 
 文章标题 : Re: Sage 入门指南
帖子发表于 : 2009-03-25 9:57 
头像

注册: 2006-10-10 9:40
帖子: 1122
送出感谢: 1
接收感谢: 0 次
获取帮助

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同样提供“Tab自动补全”:输入一个函数的前几个字母后按tab键。例如,如果在键入ta后按TAB,Sage会列印出tachyon,tan,tanh,taylor。这是一个在Sage中查询函数名和其它结构的很好途径。

函数,缩进和计数

在Sage中定义函数使用def命令,并在变量参数列表后加一个冒号。例如:

代码:
sage: def is_even(n):
...       return n%2 == 0
sage: is_even(2)
True
sage: is_even(3)
False


注:依据notebook的不同版本,你可能会在本例的第二行看到三个点...。不要自己打,它们只是为强调本行代码缩进自动生成的。

不要指明任何参数的类型。可以指明多个参数,每个参数也可以给定可选的默认值。例如,下面定义的函数如果在使用中不给出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


在Python中不像其他函数那样采用花括号或begin和end块来指示代码块。相反,代码块以缩进表示,因此缩进一定要匹配。例如,下面的代码因为return语句因为与上面的其它行缩进不一致而产生了语法错误。

代码:
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中通过一列整数的迭代来计数。例如,下面的第一行等价于C++或Jave中的for(i=0; i<3; i++):

代码:
sage: for i in range(3):
...       print i
0
1
2


下面的第一行等同于for(i=2;i<5;i++)。

代码:
sage: for i in range(2,5):
...       print i
2
3
4

第三个参数控制步进值,因此下面的代码等同于for(i=1;i<6;i+=2)。

代码:
sage: for i in range(1,6,2):
...       print i
1
3
5


在Sage中经常需要为显示运算出的数字列印数表。简单点的办法是使用格式化字符串。下面代码产生了一个列距为6的平方值立方值三列表。

代码:
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即产生一个列表:

代码:
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)]


和很多语言一样,列表的索引以0开始。

代码:
sage: v[0]
1
sage: v[3]
sin(x^3)


用len(v)可获得v的长度,用v.append(obj)可将一个新的对象追加到v的末尾,用del v[i]可以删掉v的第i项:

代码:
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程序。在下面的代码中,由内置类型list派生的类可表示n以内的偶数列。

代码:
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."


调用__inti__方法可在实例创建时进行初始化;__repr__方法会将对象列印出来。我们称第二行的__init__方法为构造函数。用下面的代码创建Evens类的实例。

代码:
sage: e = Evens(10)
sage: e
Even positive numbers up to n.


注意调用e时使用之前定义的__repr__方法进行了列印。要看到潜藏的数列,使用list函数。

代码:
sage: list(e)
[2, 4, 6, 8, 10]


我们也可以看到e的n属性及将其看待成一个列表。

代码:
sage: e.n
10
sage: e[2]
6


页首
 用户资料  
 
8 楼 
 文章标题 : Re: Sage 入门指南
帖子发表于 : 2009-03-25 12:16 
头像

注册: 2006-10-10 9:40
帖子: 1122
送出感谢: 1
接收感谢: 0 次
基本代数和微积分

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]]


下面是Jason Grout提供的一个使用Sage求解非线性方程组的例子:首先求出方程组的符号解:

代码:
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]]


(函数n列印出解的数值近似,其参数是该数值的比特精度。)

方程式求数值解

有时solve函数可能无法求出方程式的确切解。如果求不出,可以用find_root函数去求它的数值解。例如,下面的等式返回的结果不是我们想要的:

代码:
sage: theta = var('theta')
sage: solve(cos(theta)==sin(theta))
[sin(theta) == cos(theta)]


反过来,我们用find_root可对上面的等式求得一个在0<theta<pi/2间的解:

代码:
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)


计算sin(x^2)的四阶导数:

代码:
sage: x = var('x')
sage: solve(x^2 + 3*x + 2, x)
[x == -2, x == -1]


分别对x^2 + 17*y^2求x和y偏导:

代码:
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


再看积分,不定积分和定积分。计算$\int {x\sin(x^2)}$和$int_0^1{\frac{x}{x^2+1}}$

代码:
sage: integral(x*sin(x^2), x)
-cos(x^2)/2
sage: integral(x/(x^2+1), x, 0, 1)
log(2)/2


对$\frac{1}{x^2-1}$进行部分分数展开:

代码:
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)


这里用到了Sage的Maxima[Max]接口,因此输出结果可能与Sage的其它输出有些不同。在本例中,微分方程的通解为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)


(译注:本节后面的说明中数学公式太多了,无法继续翻译,看来翻译个notebook版的更靠谱。)


最后由 peakgg 编辑于 2009-03-25 20:04,总共编辑了 1 次

页首
 用户资料  
 
9 楼 
 文章标题 : Re: Sage 入门指南
帖子发表于 : 2009-03-25 16:06 

注册: 2007-05-07 9:42
帖子: 73
送出感谢: 0 次
接收感谢: 0 次
(译注:本节后面的说明中数学公式太多了,无法继续翻译,看来翻译个notebook版的更靠谱。)

tutorial 网页上的数学公式和表格也是图片, peakgg同学可以直接插入原文里的图片链接.

论坛不像 wiki或gezhi支持TeX编辑数学公式, 确实不方便.

希望peakgg同学继续努力


页首
 用户资料  
 
10 楼 
 文章标题 : Re: Sage 入门指南
帖子发表于 : 2009-03-26 12:30 
头像

注册: 2006-10-10 9:40
帖子: 1122
送出感谢: 1
接收感谢: 0 次
上一节的后面两小节先放着吧 一个一个的加图片链接太麻烦了
本文建议亲自在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))


想要绘制,要用c.show()或show(c)命令,如下:

代码:
sage: c.show()


相应地,执行c.save('文件名.png')会将绘制的图形保存到指定的文件。

现在因为各坐标缩放不同的缘故这些圆看起来更像椭圆,可以用下面代码修正:

代码:
sage: c.show(aspect_ratio=1)


show(c, aspect_ratio=1)命令可实现同样目的,或者直接使用c.save('文件名.png', 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)


先建立一系列点(下例中的L)并使用polygon命令以之为边界绘制填充图形是一个很好的方法。下例中绘制了一个绿色的三角形:

代码:
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))

输入show(p, axes=false)可查看没有坐标轴的结果。

可以在图形中加入文本:

代码:
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)

教微积分的老师经常在黑板上画这样的图形:绘制反正弦的不止一个周期:即,绘制x在-2pi到2pi之间的y=sin(x),翻转约45度的线。下面的Sage可以做到:

代码:
sage: v = [(sin(x),x) for x in srange(-2*float(pi),2*float(pi),0.1)]
sage: line(v)


(译注:此处用到了srange()函数,这是对应Python中的range()函数的,因为range()函数只支持整数列,而数学运算显然需要大量用到创建浮点数列的情况,因此Sage中多了这与numpy中arange()功能类似的函数。相应的,对应于Python中在大量数据时使用的xrange()迭代器的是xsrange()函数。)

由于正切函数的值域比正弦大,如果使用相同的手段绘制反正切函数则需要修正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同样可以绘制极坐标,等高线和矢量场图(针对特定类型的函数)。这里是一个绘制等高线的例子:

代码:
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")


使用parametric_plot3d计算看到图形后就可以点击拖拉来旋转图形。

穿越帽

代码:
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")


[Jmol]: 一个三维化学结构的开源Java查看器 http://www.jmol.org/


最后由 peakgg 编辑于 2009-03-27 10:18,总共编辑了 2 次

页首
 用户资料  
 
11 楼 
 文章标题 : Re: Sage 入门指南
帖子发表于 : 2009-03-26 20:46 

注册: 2007-05-07 9:42
帖子: 73
送出感谢: 0 次
接收感谢: 0 次
奇怪 装过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


页首
 用户资料  
 
12 楼 
 文章标题 : Re: Sage 入门指南
帖子发表于 : 2009-03-26 20:49 
头像

注册: 2008-12-13 19:39
帖子: 13284
地址: 物华天宝人杰地灵
送出感谢: 1
接收感谢: 6
楼主辛苦了,这么长篇啊,景仰之极,想来肯定是好东西! :em11 :em03


_________________
行到水穷处,坐看云起时。
海内生明月,天涯共此夕。
--------------------吾本独!


页首
 用户资料  
 
13 楼 
 文章标题 : Re: Sage 入门指南
帖子发表于 : 2009-03-27 10:38 
头像

注册: 2006-10-10 9:40
帖子: 1122
送出感谢: 1
接收感谢: 0 次
wangtwo 写道:
奇怪 装过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


ubuntu的官方论坛上有人说要用openjdk 不过那个问问题的人最后也没解决问题 他装的是64位系统 被建议改装32位的 如果你装的是32位的系统 可以试一试openjdk
地址在这http://ubuntuforums.org/archive/index.php/t-927571.html
用这个jmol是迫不得已吧 vtk和mayavi应该不支持浏览器的


页首
 用户资料  
 
14 楼 
 文章标题 : Re: Sage 入门指南
帖子发表于 : 2009-03-27 10:58 
头像

注册: 2007-04-06 10:24
帖子: 2487
地址: ~/Shanghai
送出感谢: 0 次
接收感谢: 0 次
支持 :em11 支持


_________________
http://silenceisdefeat.com/~greco
代码:
''.join([chr(ord(c)-2) for c in 'O{"G/ockn"ku<"itgeq0ujkBiockn0eqo'])
echo -n "Z3JlY28uc2hpQGdtYWlsLmNvbQ==" | base64 -d


页首
 用户资料  
 
15 楼 
 文章标题 : Re: Sage 入门指南
帖子发表于 : 2009-03-27 11:13 
头像

注册: 2006-10-10 9:40
帖子: 1122
送出感谢: 1
接收感谢: 0 次
建议使用notebook前先浏览一下操作指南,至少知道怎么删除元组(就是每一个输入框),怎么开始运算,进行文档和源码全文搜索,插入HTML,查询帮助,隐藏/显示输出,在中间插入新元组,中断计算,查看源码及分离和联接元组。


最后由 peakgg 编辑于 2009-06-01 21:20,总共编辑了 1 次

页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 30 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 0 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
cron
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译