SageMath

SageMath（曾叫做Sage或SAGE，為“System for Algebra and Geometry Experimentation”的首字母縮寫），是一個覆蓋許多數學功能的應用軟件，包括代數、組合數學、圖論、計算數學、數論、微積分和統計。
SAGE的第一個版本在GNU許可證下發佈於2005年2月24日，最初的目標是創造一個“Magma、Maple、Mathematica和MATLAB的開源替代品”。Sage的主導開發人員威廉·斯坦因是華盛頓大學的數學家。

**功能**
Sage文檔在Firefox（Mozilla），Opera,Konqueror和Safari的界面。
使用Sage Notebook接口的方程求解和排版。
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可通過多種方式獲得：
*源代碼可以直接從網上下載的  下載頁面date=20101129012908  。開發版本的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首獎。 

**參見**
計算機代數系統列表
*Comparison of statistical packages
*Comparison of numerical analysis software

**參考文獻**

**外部鏈接**
 項目主頁date=20101129012354 - Sage官方文件手冊，參考，教程，...date=20100615071720 - Sage介紹影片date=20101129013920 - 在網絡瀏覽器上使用Sagedate=20170511185437 - 自由軟件帶來便宜和透明的數學軟件date=20110606065910 - AMS通告-開源數學軟件date=20101011052423 - W. Stein博客上張貼的Sage歷史date=20110708062237