Sage (数式処理システム)
| 初版 | 24 February 2005 |
|---|---|
| 最新版 | 5.9 / 2013年4月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 の元で初版が公開された。その開発目的は Magma、Maple、Mathematica (いずれも計算機代数ソフトウェア)、MATLAB の代替となるフリーかつオープンソースなソフトウェアを提供することであった[1]。開発は、米ワシントン大学の数学准教授のウィリアム・スタイン (William Stein) が主導して始まった。
目次 |
特徴[編集]
Sage のマニュアルに記載されている機能から、以下に抜粋する[2]。
- インターフェイス
- ノートブック形式で対話的に作業を行うインターフェイスを持つ。そのためそれまでの入力を確認したり再利用したりすることが簡便である。文字入出力と画像の両方が扱え、多くのウェブブラウザ (Firefox、Opera、Konqueror、Safari など) から利用できる。状況に応じて HTTPS 接続を行うこともでき、Sage のノートブックはネットワーク越しでも、ローカルでも扱うことができる。
- IPython によるコマンドライン・インターフェイス
- Python の導入による、手続き型、関数型、オブジェクト指向を両立するプログラミング
- Maxima と SymPy を使った計算のサポート
- スライダーなどの直観的な操作を備えた GUI[3]
- ユーザーインタフェイスを追加するためのツールキット
- データ、画像、動画、音声、CAD、GIS (地理情報システム)、ワープロ文書、医用データ形式の入出力
- 数式の表示と LaTeX 文書の埋め込み[4]
- Twisted によるネットワーク経由の SQL、Java、.NET、C++、FORTRAN の利用ツール (これによりHTTP、NNTP、IMAP、SSH、IRC、FTP が利用可能となっている)
- 外部ソフトウェア (Mathematica、Magma、Maple など) を Sage から呼び出し、処理結果や実行速度を比較する機能 (GNU TeXmacs のような、外部ソフトウェアへのフロント・エンドとして Sage を利用できる)
- 情報集約のための Wiki システムとして MoinMoin を備える
- ユーザーから利用できる、テストの自動実行環境
- Fortran、C、C++とCythonのコードの実行
- 演算
- SMP などの マルチコア CPU 環境での並列実行、および分散コンピューティング環境での並列計算のサポート
- GNU Scientific Library、SciPy、NumPy による線形代数の数値計算
- 初等関数および特殊関数のライブラリ
- 行列およびベクトル演算 (疎行列にも対応)
- R と SciPy による多変量解析のサポート
- Python 同様の pylab による画像解析ツール
- 数論の関数のライブラリ
- 複素数、多倍長計算、記号計算のサポート
- グラフ描画
- データおよび関数の 2D および 3D プロット
- グラフ (ノードとリンクからなる) の可視化と解析
このほかに、Sage が直接提供する機能ではないが、Mathematica から Sage を呼び出して利用することができる[5]。そのための Mathematica ノートブックが用意されている[6]。
開発方針[編集]
ウィリアム・スタインは設計にあたって、以下の要素を取り込んだ。
- 現実的に意味のある、Magma、Maple、Mathematica、MATLAB の対抗となるソフトウェアを作り上げること。これを最初からやろうとすると、膨大な労力を要するであろうと考えられた。
- 当時すでに、多数の実用に耐える数学関連ソフトウェアがオープンソースで提供されていたが、それぞれ異なるプログラミング言語 (C言語、C++、FORTRAN、Python などが多かった) で実装されていた。
そこで、目的とするソフトウェアをゼロから書き始めることはせずに、Sage は Python と Cython を使って、さまざまな数学関連ソフトウェアを統合して一つのインターフェイスで使えるようにすることを目指した。Python は非常に多くのアプリケーションで利用されている言語であり、Sage の利用者は Python だけを知っていればよいことになる。
これを実現するためのオープンソース実装はまだなかったことが、Sage を開発する動機となった。Sage はいわゆる車輪の再発明とは異なる。たとえば Mathematica は同じような開発方針で作られているが、商用のソフトウェアはソース開示を義務づけられているソフトウェアを利用することができない。Sage にはそういった制限はなく、それだけ幅広い分野のソフトウェアを利用することができる。
Sage の開発には、学生も職業研究者も関わっている。またボランティアの開発労力に加え、助成金による援助も受けている[7]。
2007年、Sage は国際的なフリーソフトウェアのコンクールである トルフェ・ド・リブレ の科学技術ソフトウェア部門で一等賞を受賞している[8]。
性能[編集]
Sage のソースコード、バイナリともに開発元のウェブ・ページからダウンロードできる。Sage をソースからビルドすると、その環境のプロセッサ数、キャッシュのサイズ、SSE サポートの有無などによって、Sage の内部で利用する ATLAS、FLINT、NTL などの数値演算ライブラリのチューニングが行われる。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((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)
開発の経緯[編集]
メジャーバーションについてのみ記す。Sage のリリース方針は、"Release Early, Release Often" であり、2〜3週間おきにリリースされている。
| 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サポート |
脚注[編集]
- ^ Stein, William (2007年6月12日). “SAGE Days 4”. 2007年8月2日閲覧。 (英語)
- ^ Sage documentation (英語)
- ^ “Sage Interact functionality”. 2008年4月11日閲覧。 (英語)
- ^ The TeX Catalogue OnLine, Entry for sagetex, Ctan Edition (英語)
- ^ http://facstaff.unca.edu/mcmcclur/Mathematica/Sage/ Calling Sage from Mathematica (英語)
- ^ http://facstaff.unca.edu/mcmcclur/Mathematica/Sage/UsingSage.nb A Mathematica notebook to call Sage from Mathematica. (英語)
- ^ “Explicit Approaches to Modular Forms and Modular Abelian Varieties”. National Science Foundation (2006年4月14日). 2007年7月24日閲覧。 (英語)
- ^ “Free Software Brings Affordability, Transparency To Mathematics”. Science Daily (2007年12月7日). 2008年7月20日閲覧。 (英語)
関連項目[編集]
外部リンク[編集]
- Project home page
- 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サーバ。
|
|||||||||||||||||
|
|||||||||||