SageMath
Sage logo
初版 2005年2月14日 (20年前) (2005-02-14)
最新版 10.3 - 2023年8月20日 (17か月前) (2023-08-20)[1] [±]
最新評価版 10.2rc4 - 2023年11月17日 (14か月前) (2023-11-17)[2] [±]
リポジトリ ウィキデータを編集
プログラミング
言語
Python, Cython
対応OS Linux, macOS, Microsoft Windows, Solaris, Android, iOS
プラットフォーム
種別 計算機代数
ライセンス GPLv3
公式サイト www.sagemath.org ウィキデータを編集
テンプレートを表示
ウィリアム・スタイン(2011年6月)

SageMath(セイジ、以前はSage、SAGEと記した)は数学の幅広い処理を扱うソフトウェアである。扱う処理は計算機代数、組み合わせ、数値計算など多岐に及ぶ。工学的応用に加え基礎科学の研究も対応している。

SageMathは2005年2月24日に自由ソフトウェアとしてGNU General Public Licenseの元で初版が公開された。その開発目的はMagma、Maple、Mathematica(いずれも計算機代数ソフトウェア)、MATLABの代替となるフリーかつオープンソースなソフトウェアを提供することであった[3]。開発は、米ワシントン大学の数学准教授のウィリアム・スタイン (William Stein) が主導して始まった。

SageMathはPythonプログラミング言語を使用しており、手続き型・関数型・オブジェクト指向によるプログラムの記述を行うことができる。

特徴

Sageのドキュメント(ノートブック)を操作するインターフェイスは、Firefox (および Mozilla)、Opera、Konqueror、Safariで実行できる
Sageノートブックのウェブインターフェースを使って解いた数式の例

SageMath のマニュアルに記載されている機能から、以下に抜粋する[4]。

インタフェース
演算
グラフ描画

この他に、SageMathが直接提供する機能ではないが、MathematicaからSageMathを呼び出して利用することができる[7]。そのための Mathematicaノートブックが用意されている[8]。

開発方針

ウィリアム・スタインは設計にあたって、以下の要素を取り込んだ。

そこで、目的とするソフトウェアをゼロから書き始めることはせずに、SageMathはPythonとCythonを使って、さまざまな数学関連ソフトウェアを統合して一つのインターフェイスで使えるようにすることを目指した。Pythonは非常に多くのアプリケーションで利用されている言語であり、SageMathの利用者はPythonだけを知っていればよいことになる。

これを実現するためのオープンソース実装はまだなかったことが、SageMathを開発する動機となった。SageMathはいわゆる車輪の再発明とは異なる。たとえばMathematicaは同じような開発方針で作られているが、商用のソフトウェアはソース開示を義務づけられているソフトウェアを利用することができない。Sageにはそういった制限はなく、それだけ幅広い分野のソフトウェアを利用することができる。

SageMathの開発には、学生も職業研究者も関わっている。またボランティアの開発労力に加え、助成金による援助も受けている[9]。

成果

性能

SageMathのソースコード、バイナリともに開発元のウェブページからダウンロードできる。SageMathをソースからビルドすると、その環境のプロセッサ数、キャッシュのサイズ、SSEサポートの有無などによって、SageMathの内部で利用するATLAS、FLINT、NTLなどの数値演算ライブラリのチューニングが行われる。SageMathの開発者の多くは実効性能の向上に注力しており、中には世界最速を目指しているものもある。

利用条件

SageMathはGNU General Public License version 2+にしたがった利用、配布ができる自由ソフトウェアである。入手方法は複数用意されている。

SageMathに含まれるソフトウェア・パッケージ

数学機能のパッケージ
計算機代数 GAP, Maxima, SINGULAR
代数幾何学 SINGULAR
多倍長計算 MPIR, MPFR, MPFI, NTL, mpmath
数論幾何学 PARI/GP, NTL, mwrank, ecm
数式処理 Maxima, SymPy, GiNaC
組み合わせ Symmetrica, Sage-Combinat
線形代数 ATLAS, BLAS, LAPACK, NumPy, LinBox, IML, GSL
グラフ理論 NetworkX
群論 GAP
数値計算 GSL, SciPy, NumPy, ATLAS
数論 PARI/GP, FLINT, NTL
統計処理 R, SciPy
その他の機能のパッケージ
コマンドライン・インターフェイス IPython
データベース ZODB, Python Pickles, SQLite
GUI Sage Notebook, jsmath
グラフィクス Matplotlib, Tachyon3d, GD Graphics Library, Jmol
対話的プログラミング環境 Python
ネットワーク Twisted

利用例

数式処理

x,a,b,c = var('x,a,b,c')

log(sqrt(a))                            # returns log(a)/2
log(a/b).simplify_log()                 # returns log(a) - log(b)
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)
(a+b)ˆ5                                 # returns (b + a)ˆ5
expand((a+b)ˆ5)                         # returns bˆ5 + 5*a*bˆ4 + 10*aˆ2*bˆ3 +
                                        #         10*aˆ3*bˆ2 + 5*aˆ4*b + aˆ5

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

f = xˆ2 + 432/x
solve(f.diff(x)==0,x)                   # returns [x == 3*sqrt(3)*I - 3,
                                        #          x == -3*sqrt(3)*I - 3, x == 6]

微分方程式

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)

開発の経緯

メジャーバーションについてのみ記す。SageMath のリリース方針は、"Release Early, Release Often" であり、数週間または一ヶ月おきにリリースされている。

Sage versions
Version Release Date Description
0.1 2005年1月 PARI/GP に対応、しかし GAP と Singular は未対応
0.2 - 0.4 2005年3月〜6月 Cremona データベース、多変数の多項式、大規模な有限体、ドキュメントの整備
0.5 - 0.7 2005年8月〜9月 ベクトル、環、モジュラー
0.8 2005年10月 GAP のフルサポート、Singular サポート
0.9 2005年11月 Maxima、clisp 追加
1.0 2006年2月
2.0 2007年1月
3.0 2008年4月 Interacts, Rインターフェース
4.0 2009年5月 Solaris 10サポート, 64bit OSXサポート
5.0 2012年5月 OSX Lionサポート
6.0 2013年12月 Sageの開発はGitへ移行
7.0 2016年1月
8.0 2017年7月

脚注

  1. ↑ “Releases”. GitHub. 2024年3月19日閲覧。
  2. ↑ “Tags”. GitHub. 2023年11月21日閲覧。
  3. ↑ Stein, William (2007年6月12日). “SAGE Days 4”. 2007年8月2日閲覧。(英語)
  4. ↑ Sage documentation(英語)
  5. ↑ “Sage Interact functionality”. 2008年4月11日閲覧。(英語)
  6. ↑ The TeX Catalogue OnLine, Entry for sagetex, Ctan Edition (英語)
  7. ↑ http://facstaff.unca.edu/mcmcclur/Mathematica/Sage/ Calling Sage from Mathematica(英語)
  8. ↑ http://facstaff.unca.edu/mcmcclur/Mathematica/Sage/UsingSage.nb A Mathematica notebook to call Sage from Mathematica.(英語)
  9. ↑ “Explicit Approaches to Modular Forms and Modular Abelian Varieties”. National Science Foundation (2006年4月14日). 2007年7月24日閲覧。(英語)
  10. ↑ “Free Software Brings Affordability, Transparency To Mathematics”. Science Daily (December 7 2007). 2008年7月20日閲覧。(英語)
  11. ↑ “Sage Mathematical Software System”. 9 June 2012閲覧。
  12. ↑ “SIGSAM: Awards and prizes”. 2 Aug 2013閲覧。
  13. ↑ “Publications Citing Sage”. 14 July 2011閲覧。
  14. ↑ “Publications Citing Sage-Combinat”. 14 July 2011閲覧。

参考文献

関連項目

外部リンク

⌬ Phoenix Mesh CID: 未登録 IPFS未登録 📡 0ピア N=1 CRITICAL PQS A87