読者です 読者をやめる 読者になる 読者になる

SageMath を使ってみる

sagemath

SageMath というソフトウェアを最近になって知ったのでメモしておく。

http://www.sagemath.org/

https://ja.wikipedia.org/wiki/Sage_(%E6%95%B0%E5%BC%8F%E5%87%A6%E7%90%86%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0)

wiki によれば 2005年からあるとのこと。maxima や R といったフリーの数学ソフトを python で統合したもの
のようである。そういったソフトウェアがバックで動くのでダウンロードサイズが 1GB くらいあり展開すると 3GB
ほどになった。

少し使ってみたところ python のツールが使えるのでグラフはきれいである。重ねあわせるのも簡単。画像は省略。

p1 = plot(sin, (0, 2*pi))
v = [(sin(x),x) for x in srange(-2*pi,2*pi,0.1)]
p2 = line(v)
show(p1+p2)

ちょっと把握しきれないくらいの機能がある。これは連分数。近似分数列つき。

continued_fraction_list(e,partial_convergents=True,nterms=20)
=>
([2, 1, 2, 1, 1, 4, 1, 1, 6, 1, 1, 8, 1, 1, 10, 1, 1, 12, 1, 1],
 [(2, 1),
  (3, 1),
  (8, 3),
  (11, 4),
  (19, 7),
  (87, 32),
  (106, 39),
  (193, 71),
  (1264, 465),
  (1457, 536),
  (2721, 1001),
  (23225, 8544),
  (25946, 9545),
  (49171, 18089),
  (517656, 190435),
  (566827, 208524),
  (1084483, 398959),
  (13580623, 4996032),
  (14665106, 5394991),
  (28245729, 10391023)])

もちろん微積などのシンボル演算もできるし、代数の機能もある。

Arrangements([1,2,3,4],4).list()
=>
[[1, 2, 3, 4],
 [1, 2, 4, 3],
 [1, 3, 2, 4],
 [1, 3, 4, 2],
 [1, 4, 2, 3],
 [1, 4, 3, 2],
 [2, 1, 3, 4],
 [2, 1, 4, 3],
 [2, 3, 1, 4],
 [2, 3, 4, 1],
 [2, 4, 1, 3],
 [2, 4, 3, 1],
 [3, 1, 2, 4],
 [3, 1, 4, 2],
 [3, 2, 1, 4],
 [3, 2, 4, 1],
 [3, 4, 1, 2],
 [3, 4, 2, 1],
 [4, 1, 2, 3],
 [4, 1, 3, 2],
 [4, 2, 1, 3],
 [4, 2, 3, 1],
 [4, 3, 1, 2],
 [4, 3, 2, 1]]

また文字列で渡すことで maxima (おそらく他のソフトも)の関数も実行できる。
(以下の例は maxima に渡す必要はなく直接実行できるので無意味であるが)

maxima("diff(sin(x), x)")
=>
cos(x)

シンボル演算をする前にはシンボルをシンボルとして宣言するほうが確実なようだ。

x = var('x')
integrate(sin(x),x)
=>
-cos(x)

python に少し慣れる必要があるがこれから使ってみることにする。