数式処理システムSageMathの使い方(数体の計算編)

SageMathというフリーかつオープンソースの数式処理システムをご存知でしょうか。

http://www.sagemath.org/ からダウンロードできます(無料!)

とても便利なソフトですので、使い方の簡単な例を紹介しようと思います。

ここで次の計算問題を考えましょう:

f:id:hinabit:20150531205416p:plain

において、

f:id:hinabit:20150531210706p:plain

を簡単にせよ。 また、x3-2x2+3x-1=0の根としてx=0.7849...+i 1.3071...を選び、

f:id:hinabit:20150531210710p:plain

として埋め込み(体の準同型

f:id:hinabit:20150531210745p:plain

を定めたとき、 f:id:hinabit:20150531211040p:plainの値はおよそいくらになるか?

SageMathのノートブックという機能を使って上の問題を解いてみることにします。 ノートブックとは、グラフィカルかつ対話的に計算を進めていくことができるSageMathの便利機能です。

f:id:hinabit:20150531223708p:plain

さて、SageMathでは有理数体上の既約多項式から数体を構成することができます。

f:id:hinabit:20150531211641p:plain

この状態では、xはf:id:hinabit:20150531205416p:plainの元とみなされます。 例えば、x3を評価してみると、次のようになります。

f:id:hinabit:20150531211637p:plain

同じようにf:id:hinabit:20150531212210p:plainを評価してみると、

f:id:hinabit:20150531212445p:plain

となります。f:id:hinabit:20150531212604p:plainであることがわかりました。

問題の後半については、答えを出すだけならいま求めた式にx=0.7849...+i 1.3071...を 代入すれば良いのですが、より汎用的な方法として、 NumberField関数のembeddingオプションを使って計算することにします。

f:id:hinabit:20150531213658p:plain

これでf:id:hinabit:20150531211040p:plain≒-0.316158249 + 1.11729264iがわかりました。

浮動小数点の精度を上げることもできます。

f:id:hinabit:20150531213258p:plain

関数の使い方がわからなくなったら、NumberField?のように打ち込んで評価すると、ドキュメントを表示することができます。

f:id:hinabit:20150531212337p:plain

NumberFieldオブジェクトは様々なメソッドを持っています。一例として、ガロア群の計算をしてみましょう。

f:id:hinabit:20150531232948p:plain

今回はSageMathの、気軽な高機能電卓としての側面のみを紹介しましたが、実際には、SageMathを使えばもっといろいろなことができます。特に、Pythonを使ってプログラミングをすることができるので、Pythonを知っている人なら、新しいプログラミング言語を覚えることなくSageMathでプログラムを書くことができます。