Sage (数式処理システム)

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
Sage
Sage logo
初版 24 February 2005
最新版 6.1.1 / 2014年01月30日(2か月前) (2014-01-30
プログラミング言語 Python, Cython
対応OS Linux / OS X / Windows(VM上)
プラットフォーム Python
種別 計算機代数
ライセンス GNU General Public License
公式サイト www.sagemath.org
テンプレートを表示

Sage (セイジ) は数学の幅広い処理を扱うソフトウェアである。扱う処理は計算機代数組み合わせ数値計算など多岐に及ぶ。工学的応用に加え基礎科学の研究もカバーする。

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

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

特徴[編集]

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

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

インターフェイス
  • ノートブック形式で対話的に作業を行うインターフェイスを持つ。そのためそれまでの入力を確認したり再利用したりすることが簡便である。文字入出力と画像の両方が扱え、多くのウェブブラウザ (FirefoxOperaKonquerorSafari など) から利用できる。状況に応じて HTTPS 接続を行うこともでき、Sage のノートブックはネットワーク越しでも、ローカルでも扱うことができる。
  • IPython によるコマンドライン・インターフェイス
  • Python の導入による、手続き型、関数型、オブジェクト指向を両立するプログラミング
  • MaximaSymPy を使った計算のサポート
  • スライダーなどの直観的な操作を備えた GUI[3]
  • ユーザーインタフェイスを追加するためのツールキット
  • データ、画像、動画、音声、CADGIS (地理情報システム)、ワープロ文書、医用データ形式の入出力
  • 数式の表示と LaTeX 文書の埋め込み[4]
  • Twisted によるネットワーク経由の SQLJava.NETC++FORTRAN の利用ツール (これによりHTTPNNTPIMAPSSHIRCFTP が利用可能となっている)
  • 外部ソフトウェア (MathematicaMagmaMaple など) を Sage から呼び出し、処理結果や実行速度を比較する機能 (GNU TeXmacs のような、外部ソフトウェアへのフロント・エンドとして Sage を利用できる)
  • 情報集約のための Wiki システムとして MoinMoin を備える
  • ユーザーから利用できる、テストの自動実行環境
  • Fortran、C、C++とCythonのコードの実行
演算
グラフ描画
  • データおよび関数の 2D および 3D プロット
  • グラフ (ノードとリンクからなる) の可視化と解析

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

開発方針[編集]

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

  • 現実的に意味のある、MagmaMapleMathematicaMATLAB の対抗となるソフトウェアを作り上げること。これを最初からやろうとすると、膨大な労力を要するであろうと考えられた。
  • 当時すでに、多数の実用に耐える数学関連ソフトウェアがオープンソースで提供されていたが、それぞれ異なるプログラミング言語 (C言語C++FORTRANPython などが多かった) で実装されていた。

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

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

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

成果[編集]

  • 2007年:Sage は国際的なフリーソフトウェアのコンクールである トルフェ・ド・リブレ英語版 の科学技術ソフトウェア部門で一等賞を受賞している[8]
  • 2012年:Google Summer of Codeのプロジェクトのひとつに選ばれた。[9]
  • 2013年: ACM/SIGSAM Jenks 賞を受賞。[10]
  • Sage は多くの数学の論文や本で引用されている。[11][12]

性能[編集]

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

利用条件[編集]

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

  • ソースコードは ダウンロード・ページ からダウンロードできる。開発者用として、開発途中のバージョンもダウンロードできる。
  • Linux、Mac OS X、Solaris (x86 および SPARC の両方) についてはバイナリが用意されている。Solaris 版は試験的な提供である。
  • Linux のブータブル CD としても配布されている。これを使えば、Sage のインストール作業を行わずに使うことができる。
  • Sage のオンライン版も http://demo.sagenb.org で提供されている。しかし技術的な理由からユーザーが利用できるメモリサイズに、またセキュリティ面に制限がある。

マイクロソフトは Sage の Windows ネイティブ版を支援しているが、現時点ではネイティブポートの予定はない。そして Windows ユーザーは現時点では、Virtualbox などの仮想化テクノロジーを使うことによって Sage を動かさなければならない。ただし、Sage 5.9 においては Cygwin 上でのビルドがほぼ成功している。

Sage に含まれるソフトウェア・パッケージ[編集]

数学機能のパッケージ
計算機代数 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((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 =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)

開発の経緯[編集]

メジャーバーションについてのみ記す。Sage のリリース方針は、"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月

脚注[編集]

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

関連項目[編集]

外部リンク[編集]