SageMath

SageMath（曾叫做Sage或SAGE，为“System for Algebra and Geometry Experimentation”的首字母缩写），是一个覆盖许多数学功能的应用软件，包括代数、组合数学、图论、计算数学、数论、微积分和统计。

SAGE的第一个版本在GNU许可证下发布于2005年2月24日，最初的目标是创造一个“Maxima、Maple、Mathematica和MATLAB的开源替代品”。Sage的主导开发人员威廉·斯坦因是华盛顿大学的数学家。

功能

Sage的功能包括
一个用于回顾及重新使用以前的输入和输出及加入图形和文本注释的记事本文档接口，可在通用的网页浏览器如Firefox、Opera、Konqueror和Safari中使用。在安全和保密要求高的情况下可通过HTTPS与记事本连接，Sage可同时在本地和远程使用。
一个使用IPython的基于文本的命令行界面
Python编程语言，支持函数化编程和面向对象的结构。
支持多核处理器，多处理器，及在并行计算。
使用Maxima和SymPy进行微积分计算。
使用GSL，SciPy和NumPy做线性代数数值计算。
基础和特殊数学函数库
函数和数据的二维和三维图形显示
矩阵和数据处理工具，支持稀疏数组
使用R和SciPy的多元统计分析库
一个在计算和应用上添加用户界面的工具箱的
使用Pylab以及Python编程语言的图像处理工具
图论可视化和分析工具
数论的函数库
数据，图像，视频，声音，计算机辅助设计，地理信息系统，文档和生物医学格式的输入输出过滤器
适当支持在函数中进行复数， 任意精度及符号计算
包括公式编辑的文字处理技术，并可在Sage内嵌入LaTeX文档
Twisted提供的连接到SQL、Java、.NET、C++和FORTRAN语言的网络工具，支持包括HTTP、NNTP、IMAP、SSH、IRC、FTP等在内的大量协议
与Mathematica、Maxima及Maple等一些第三方软件的接口 ，允许用户组合软件及比较输出和性能。因此，它也是一个类似于GNU TeXmacs的其他数学工具的“前端”
使用MoinMoin作为知识管理的维基系统
使用Sphinx的文档管理
一个自动化测试套件，允许计算机终端用户进行测试

虽然不是Sage直接提供的功能，但Sage可以从Mathematica内部调用。Mathematica的一个记事本可用于此。

设计理念

威廉.斯坦在设计Sage时意识到了有不同的语言（包括有C 、C++、Fortran和Python）编写的大量现成的大型开源数学软件可用。

因此，Sage（用Python和Cython实现的）将所有专用的数学软件集成到一个通用的接口而不是从头开发。用户只需要了解Python。

Sage由学生和专业人士开发。Sage的开发由志愿工作和赠款支持。

性能

二进制包和源代码都可以从Sage页面下载。如果从源代码构建，许多包含的库如Atlas、FLINT和NTL和都会针对该计算机考虑到处理器数量，缓存大小的，是否有硬件支持SSE指令等进行调整和优化。

许可和可用性

Sage在GNU通用公共许可证2+下自由软件条款下发布 。Sage可通过多种方式获得：
源代码可以直接从网上下载的 下载页面 。开发版本的Sage也可用，不建议最终用户使用。
可以下载用于Linux、OS X、Solaris（x86和SPARC）及windows的可执行文件。
一个包含可启动Linux操作系统的live CD。允许不安装Linux直接使用Sage。
用户可以使用Sage的在线版本，地址是 sagenb.org 或 https://web.archive.org/web/20110720111745/http://t2nb.math.washington.edu:8080/，但限制用户可用的内存量。

Sage包含的软件包

如上所述，SAGE的理念是利用现有的任何开放源码库。因此，借用了许多项目。

語言範例

微积分

x,a,b,c = var('x,a,b,c')
log(sqrt(a)).simplify_log() # returns log(a)/2
sin(a+b).simplify_trig() # returns cos(a)*sin(b) + sin(a)*cos(b)
cos(a+b).simplify_trig() # returns cos(a)*cos(b) - sin(a)*sin(b)

limit((xˆ2+1)/(2+x+3*xˆ2), x=infinity) # returns 1/3
limit(sin(x)/x, x=0) # returns 1

diff(acos(x),x) # returns -1/sqrt(1 - xˆ2)
f = exp(x)*log(x)
f.diff(x,3) # returns e^x*log(x) + 3*e^x/x - 3*e^x/x^2 + 2*e^x/x^3

solve(a*x^2 + b*x + c, x) # returns [x == (-sqrt(b^2 - 4*a*c) - b)/(2*a),
 # x == (sqrt(b^2 - 4*a*c) - b)/(2*a)]

微分方程

t = var('t') # define a variable t
x = function('x',t) # define x to be a function of that variable
DE = lambda y: diff(y,t) + y - 1
desolve(DE(x(t)), [x,t]) # returns '%e^-t*(%e^t+%c)'

线性代数

A = Matrix([[1,2,3],[3,2,1],[1,1,1]])
y = vector([0,-4,-1])
A.solve_right(y) # returns (-2, 1, 0)
A.eigenvalues() # returns [5, 0, -1]

B = Matrix([[1,2,3],[3,2,1],[1,2,1]])
B.inverse() # returns [ 0 1/2 -1/2]
 # [-1/4 -1/4 1]
 # [ 1/2 0 -1/2]

# Call numpy for the Moore-Penrose pseudo-inverse,
# since Sage does not support that yet.

import numpy
C = Matrix([[1 , 1], [2 , 2]])
matrix(numpy.linalg.pinv(C.numpy())) # returns [0.1 0.2]
 # [0.1 0.2]

数论

prime_pi(1000000) # returns 78498, the number of primes less than one million

E = EllipticCurve('389a') # construct an elliptic curve from its Cremona label
P, Q = E.gens()
7*P + Q # returns (2869/676 : -171989/17576 : 1)

历史

只列出了主要发布版本。Sage采用的“早发布，常发布”的理念，每两至三个星期发布一次。

2007年，Sage赢得自由软件的国际竞争中科学软件部分的Les Trophées du Libre首奖。

参见

计算机代数系统列表

参考文献

外部链接
项目主页
Sage官方文件手册，参考，教程，...
Sage介绍影片
在网络浏览器上使用Sage
自由软件带来便宜和透明的数学软件
AMS通告-开源数学软件
W. Stein博客上张贴的Sage历史

带有Python代码示例的条目
Linux计算机代数系统软件
MacOS计算机代数系统软件
Windows计算机代数系统软件
自由及开放源代码Android软件
自由计算机代数系统
自由教育軟件
自由數學軟件
用Python編程的自由軟體
数学软件
Python科学库