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

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

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

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

特徴

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

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

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

成果

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

性能

SageMathのソースコードバイナリともに開発元のウェブページからダウンロードできる。SageMathをソースからビルドすると、その環境のプロセッサ数、キャッシュのサイズ、SSEサポートの有無などによって、SageMathの内部で利用するATLASFLINTNTLなどの数値演算ライブラリのチューニングが行われる。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
その他の機能のパッケージ
コマンドライン・インターフェイス 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" であり、数週間または一ヶ月おきにリリースされている。

さらに見る Version, Release Date ...
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月
閉じる

脚注

参考文献

関連項目

外部リンク

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.