SageMath
ウィリアム・スタイン(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] 。
インタフェース
演算
グラフ描画
データおよび関数の2Dおよび3Dプロット
グラフ (ノードとリンクからなる)の可視化と解析
この他に、SageMathが直接提供する機能ではないが、MathematicaからSageMathを呼び出して利用することができる[ 7] 。そのための Mathematicaノートブックが用意されている[ 8] 。
開発方針
ウィリアム・スタインは設計にあたって、以下の要素を取り込んだ。
現実的に意味のある、Magma、Maple、Mathematica、MATLABの対抗となるソフトウェアを作り上げること。これを最初からやろうとすると、膨大な労力を要するであろうと考えられた。
当時すでに、多数の実用に耐える数学関連ソフトウェアがオープンソースで提供されていたが、それぞれ異なるプログラミング言語(C、C++、FORTRAN、Pythonなどが多かった)で実装されていた。
そこで、目的とするソフトウェアをゼロから書き始めることはせずに、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+にしたがった利用、配布ができるフリーソフトウェア である。入手方法は複数用意されている。
ソースコードはダウンロード・ページ からダウンロードできる。開発者用として、開発途中のバージョンもダウンロードできる。
Linux、macOS、Solaris(x86およびSPARCの両方)についてはバイナリが用意されている。Solaris版は試験的な提供である。
LinuxのブータブルCDとしても配布されている。これを使えば、SageMathのインストール作業を行わずに使うことができる。
Sageのオンライン版もhttp://demo.sagenb.org で提供されている。しかし技術的な理由からユーザーが利用できるメモリサイズに、またセキュリティ面に制限がある。
WindowsではWSLの上で実行する。(Sage 8.0 以降からWindows ネイティブ版がリリースされていたが、9.7で廃止されている。)
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
利用例
数式処理
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月
脚注
参考文献
Zimmermann, P., Casamayou, A., Cohen, N., Connan, G., Dumont, T., Fousse, L., ... & Bray, E. (2018). Computational Mathematics with SageMath. SIAM .
Kim, D. S., Lee, S. G., & Markowsky, G. (2010). Mobile Sage-Math for Linear Algebra and its Application. Electronic Journal of Mathematics & Technology, 4(3).
Ko, R. Y., Kim, D. S., Bak, J. Y., & Lee, S. G. (2009). Development of Mobile Sage-math and its use in Linear Algebra. Communications of Mathematical Education, 23(4), 1023-1041.
Heuberger, C., Krenn, D., & Kropf, S. (2014). Automata in SageMath---Combinatorics meet Theoretical Computer Science. arXiv preprint arXiv:1404.7458.
関連項目
外部リンク
公式ウェブサイト
電子本(PDF, CCライセンス): P. Zimmermann, et al.: "Computational Mathematics with SageMath" (Dec, 2018). (リンク切れの可能性)
Official Sage Documentation Manual, Reference, Tutorials, ...
Sage introduction videos
Use Sage online in your web-browser
Free software brings affordability, transparency to mathematics
AMS Notices Opinion - Open Source Mathematical Software
数学ソフトウェアとフリードキュメントXIV(2012年3月25日) - 数式処理システム Sage 入門 - 横山俊一 (リンク切れ)
竹本 浩のページ - Sageの紹介。公開Sageサーバ。
( Book Review)John B. Little :"Computational Mathematics with SageMath", Bull.AMS, v.57, no.3, (Jul,2020), pp.515–521, url="https://doi.org/10.1090/bull/1690"
Sageチュートリアルへようこそ
佐々木格:「PythonとSageMath」(2022年)
Paul Zimmermann, et al.: "Computational Mathmatics with SageMath",(2018), (open textbook in PDF).
Gregory V. Bard: "Sage for Undergraduates", AMS (2015). (PDF入手可能)
Gregory V. Bard: "Sage for Undergraduates: Compatible With Python 3",2nd Ed., AMS, ISBN 978-1470461553 (2022年10月30日).