SageMath

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

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

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

1. 特徴
-----

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

インタフェース
ノートブック形式で対話的に作業を行うインタフェースを持つ。そのためそれまでの入力を確認したり再利用したりすることが簡便である。文字入出力と画像の両方が扱え、多くのウェブブラウザから利用できる。状況に応じてHTTPS接続を行うこともでき、Sageのノートブックはネットワーク越しでも、ローカルでも扱うことができる。
IPythonによるコマンドライン・インターフェイス
Pythonの導入による、手続き型、関数型、オブジェクト指向を両立するプログラミング
Maximaと SymPy を使った計算のサポート
スライダーなどの直観的な操作を備えたGUI
ユーザインタフェースを追加するためのツールキット
データ、画像、動画、音声、CAD、GIS 、ワープロ文書、医用データ形式の入出力
数式の表示と LaTeX 文書の埋め込み
Twisted によるネットワーク経由のSQL、Java、.NET Framework、C++、FORTRANの利用ツール 
外部ソフトウェアをSageMathから呼び出し、処理結果や実行速度を比較する機能
情報集約のためのWikiシステムとして MoinMoinを備える
ユーザーから利用できる、テストの自動実行環境
FORTRAN、C、C++とCythonのコードの実行 演算
SMPなどのマルチコアCPU環境での並列実行、および分散コンピューティング環境での並列計算のサポート
GNU Scientific Library、SciPy、NumPyによる線形代数の数値計算
初等関数および特殊関数のライブラリ
行列およびベクトル演算 
RとSciPyによる多変量解析のサポート
Python同様のpylabによる画像解析ツール
数論の関数のライブラリ
複素数、多倍長計算、記号計算のサポート グラフ描画
データおよび関数の2Dおよび3Dプロット
グラフの可視化と解析この他に、SageMathが直接提供する機能ではないが、MathematicaからSageMathを呼び出して利用することができる。そのための Mathematicaノートブックが用意されている。

2. 開発方針
-------

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

現実的に意味のある、Magma、Maple、Mathematica、MATLABの対抗となるソフトウェアを作り上げること。これを最初からやろうとすると、膨大な労力を要するであろうと考えられた。
当時すでに、多数の実用に耐える数学関連ソフトウェアがオープンソースで提供されていたが、それぞれ異なるプログラミング言語で実装されていた。そこで、目的とするソフトウェアをゼロから書き始めることはせずに、SageMathはPythonとCythonを使って、さまざまな数学関連ソフトウェアを統合して一つのインターフェイスで使えるようにすることを目指した。Pythonは非常に多くのアプリケーションで利用されている言語であり、SageMathの利用者はPythonだけを知っていればよいことになる。

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

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

3. 成果
-----

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

4. 性能
-----

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

5. 利用条件
-------

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

ソースコードは[1]からダウンロードできる。開発者用として、開発途中のバージョンもダウンロードできる。
Linux、macOS、Solarisについてはバイナリが用意されている。Solaris版は試験的な提供である。
LinuxのブータブルCDとしても配布されている。これを使えば、SageMathのインストール作業を行わずに使うことができる。
Sageのオンライン版も[2]で提供されている。しかし技術的な理由からユーザーが利用できるメモリサイズに、またセキュリティ面に制限がある。Sage 8.0 以降からWindowsネイティブ版がリリースされている．

6. SageMathに含まれるソフトウェア・パッケージ
----------------------------



7. 利用例
------

7.1. 数式処理
---------

x,a,b,c = var

log) # returns log/2 log.simplify_log # returns log - log sin.simplify_trig # returns cos*sin + sin*cos cos.simplify_trig # returns cos*cos - sin*sin ˆ5 # returns ˆ5 expandˆ5) # returns bˆ5 + 5*a*bˆ4 + 10*aˆ2*bˆ3 +

10*aˆ3*bˆ2 + 5*aˆ4*b + aˆ5limit/, x=infinity) # returns 1/3 limit/x, x=0) # returns 1

diff,x) # returns -1/sqrt f = exp*log f.diff # returns e^x*log + 3*e^x/x - 3*e^x/x^2 + 2*e^x/x^3

solve # returns [x ==  - b)/,

x ==  - b)/]f = xˆ2 + 432/x solve==0,x) # returns [x == 3*sqrt*I - 3,

x == -3*sqrt*I - 3, x == 6]<WtXmlEndTag />

7.2. 微分方程式
----------

t = var # define a variable t x = function # define x to be a function of that variable DE = lambda y: diff + y - 1 desolve), [x,t]) # returns '%e^-t*'

7.3. 線形代数
---------

A = Matrix y = vector A.solve_right # returns  A.eigenvalues # returns [5, 0, -1]

B = Matrix 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 matrix)) # returns [0.1 0.2]

[0.1 0.2]<WtXmlEndTag />

7.4. 数論
-------

prime_pi # returns 78498, the number of primes less than one million

E = EllipticCurve # construct an elliptic curve from its Cremona label P, Q = E.gens 7*P + Q # returns 

<WtXmlEndTag />

8. 開発の経緯
--------

メジャーバーションについてのみ記す。SageMath のリリース方針は、"Release Early, Release Often" であり、数週間または一ヶ月おきにリリースされている。



9. 脚注
-----

10. 参考文献
--------

Zimmermann, P., Casamayou, A., Cohen, N., Connan, G., Dumont, T., Fousse, L., ... & Bray, E. . Computational Mathematics with SageMath. SIAM.
Kim, D. S., Lee, S. G., & Markowsky, G. . Mobile Sage-Math for Linear Algebra and its Application. Electronic Journal of Mathematics & Technology, 4.
Ko, R. Y., Kim, D. S., Bak, J. Y., & Lee, S. G. . Development of Mobile Sage-math and its use in Linear Algebra. Communications of Mathematical Education, 23, 1023-1041.
Heuberger, C., Krenn, D., & Kropf, S. . Automata in SageMath---Combinatorics meet Theoretical Computer Science. arXiv preprint arXiv:1404.7458.

11. 関連項目
--------

数式処理システムの一覧
Macsyma
Mathematica
MATLAB
Maple
REDUCE_

12. 外部リンク
---------

[3] 
[4]
[5]
[6]
[7]
[8]
[9] - [10] - 横山俊一 
[11] - Sageの紹介。公開Sageサーバ。
[12]
[13]
[http://math.shinshu-u.ac.jp/~isasaki/misc/PythonAndSage.pdf 佐々木格:「PythonとSageMath」(2022年）