SageMathとは - わかりやすく解説 Weblio辞書 (original) (raw)

SageMath

初版 2005年2月14日 (20年前) (2005-02-14)
最新版 10.5 - 2024年12月4日 (12か月前) (2024-12-04)[1] [±]
最新評価版 10.6.beta9 - 2025年3月10日 (9か月前) (2025-03-10)[2] [±]
リポジトリ github.com/sagemath/sage
プログラミング言語 Python, Cython
対応OS Linux, macOS, Microsoft Windows, Solaris, Android, iOS
プラットフォーム Personal computers and web platform IA-32, x86-64, ARM, Itanium, SPARC
種別 計算機代数
ライセンス GPLv3
公式サイト www.sagemath.org
テンプレートを表示

ウィリアム・スタイン(2011年6月)

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

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

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

特徴

Sageのドキュメント(ノートブック)を操作するインターフェイスは、Firefox (および Mozilla)、OperaKonquerorSafariで実行できる

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の内部で利用するATLASFLINTNTLなどの数値演算ライブラリのチューニングが行われる。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 + 5abˆ4 + 10aˆ2bˆ3 + # 10aˆ3bˆ2 + 5aˆ4b + 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^xlog(x) + 3e^x/x - 3e^x/x^2 + 2*e^x/x^3

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

f = xˆ2 + 432/x solve(f.diff(x)==0,x) # returns [x == 3*sqrt(3)I - 3, # x == -3sqrt(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. 2025年3月9日閲覧。
  2. ^Tags”. GitHub. 2025年3月12日閲覧。
  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 (2007年12月7日). 2008年7月20日閲覧。(英語)
  11. ^Sage Mathematical Software System”. 2012年6月9日閲覧。
  12. ^SIGSAM: Awards and prizes”. 2013年8月2日閲覧。
  13. ^Publications Citing Sage”. 2011年7月14日閲覧。
  14. ^Publications Citing Sage-Combinat”. 2011年7月14日閲覧。
  15. ^Install from conda-forge - Installation Guide”. doc.sagemath.org. 2025年12月30日閲覧。

参考文献

関連項目

外部リンク