SageMath

SageMath（曾叫做 Sage 或 SAGE，為 “System for Algebra and Geometry Experimentation” 的首字母縮寫），是一個覆蓋許多數學功能的應用軟體，包括代數、組合數學、圖論、計算數學、數論、微積分和統計。

SAGE 的第一個版本在 GNU 許可證下發佈於 2005 年 2 月 24 日，最初的目標是創造一個 “Magma、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 的理念是利用現有的任何開放原始碼庫。因此，借用了許多專案。

語言範例

6.1 微積分

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^xlog (x) + 3e^x/x - 3e^x/x^2 + 2e^x/x^3

solve (ax^2 + bx + c, x) # returns x == (-sqrt (b^2 - 4ac) - b)/(2*a),

x == (sqrt (b^2 - 4ac) - b)/(2*a)

6.2 微分方程

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)'

6.3 線性代數

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

6.4 數論

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 首獎。