数式処理システムSAGE

数式処理システムとは、記号の入った数式を直接処理することができるソフトウェアのこと。
微積分をやってのけたり、方程式を解いたりできる、とても賢いソフトのことです。
代表的なものに Mathematica がありますが、いかんせん高価です。
そこでフリーの数式処理システムを探したところ、SAGEというソフトが目に止まりました。
試しに使ってみたところ、なかなか良さげだったので、導入方法をメモしておきます。
* SAGE -- フリー、オープンソースの数式処理システム
>> http://www.sagemath.org/
* 日本国内のミラー -- ダウンロードはこちらから.
>> http://ftp.riken.jp/sagemath/index.html

SAGEの特徴の1つは、WEBブラウザが出力画面になっていることです。なので、
・本体はデスクトップPCに入れておいて、ノートパソコンから遠隔操作する。
・社内に1台設置しておいて、複数人で使い回す。
なんてこともできます。
ちょっと触ってみるだけなら、本家サイトの「Try Sage Online」で試すことができます。
その他の特徴はこちらを参照 >> wikipedia:Sage (数式処理システム)

Mac版インストール

導入が最も簡単で、問題なく動くのは Mac版です。
Macユーザーはラッキー。Windowsへのインストールはかなり大変なのだ。)
私は少々古い PowerPCMacMini にインストールしたのですが、快適に動作しています。

1.SAGE のサイト http://ftp.riken.jp/sagemath/index.html から、
 自分のMacに合った *.dmgファイルをダウンロードする。

2.ダウンロードしたファイルの中に"sage"というフォルダがあるので、
 これを適当な場所、自分のHOMEなり、アプリケーションの中なりにコピーする。

3."sage"フォルダの中に、黒い四角の"sage"アイコンがある。
 これをダブルクリックすると、、、

4.「デフォルトのアプリケーションがありません」となる。
 ここで「アプリケーションの選択」をクリック。

(場合によっては、ここでダイアログが出ずに、すんなりターミナルが起動することもあるようです。
 その場合、以下5.6.の設定は不要です。)

5.アプリケーションを選ぶダイアログが表示されるので、
 「全アプリケーション」に切り替えて、「アプリケーション->ユーティリティ->ターミナル」を選択。

6.「ターミナルでsageを開きますか?」
 開くので「アップデート」をクリック。

7.ターミナルが起動して、「sage: 」というプロンプトが出現すれば、導入完了!

8.終了するときは、「quit」と入力してからターミナルを閉じる。
 2回目以降は、"sage"アイコンのダブルクリックで、ターミナルが起動するようになる。

Windows版(VirtualBox)インストール

SAGEがいまひとつ知名度が低い理由の1つは、事実上Windows版が無いということです。
Windows版として配布されている、"sage-virtualbox-4.3.zip"というファイルは、
実は VirtualBox上で動作している Ubuntu Linux版。
どうしてもWindows上で実行したければ、まずVirtualBoxを導入し、
その上で動いている Linux 上で SAGE を実行しなさい、ということなのです。
正直なところ、このインストールは Linux の操作に明るい人でないと、かなり難しい。

1.まず VirtualBox をインストールする。
VirtualBox のサイト >> http://www.virtualbox.org/ から、VirtualBoxを入手。
私は最新版の "VirtualBox-3.2.0-61806-Win.exe" を入手した。

2.VirtualBoxのインストール途中に警告ダイアログが2回ほど出たが、構わずインストールを続行する。
(私が試したのはWindows-XP)

3.SAGE のサイト http://ftp.riken.jp/sagemath/index.html から、
 Microsoft Windows 用(実はVirtualBox用)のバイナリファイルを入手する。
 私は、"sage-virtualbox-4.3.zip" をダウンロードしました。

4.VirtualBoxを起動し、[ファイル]メニュー -> 仮想アプライアンスのインポート、

5.ここで、先ほどダウンロードしてきた SAGEのファイルの中にある
 "sage.ovf"というファイルを取り込むわけなのですが・・・
 "sage.ovf"ファイルを選択しても、うまく取り込みができません!(設定画面が空のまま)
 実は、現在配布中の"sage-virtualbox-4.3.zip"に含まれている"sage.ovf"は、
 最新のVirtualBox-3.2では取り込むことができない、古い形式のようです。

6."sage.ovf"の中身は XMLファイルなので、エディタで確認することができます。
 そこで、この"sage.ovf"ファイルが上手く取り込めるように、書き換えを行います。
 書き換え済みの"sage_vbox32.ovf"を、こちらに置いておきます。
 >> http://brownian.motion.ne.jp/memo/sage_vbox3.2.ovf
 "sage-virtualbox-4.3.zip"に含まれている"sage.ovf"を、
 この"sage_vbox32.ovf"で置き換えて、VirtualBoxから取り込んでください。

7.これで何とか起動することができると思います。
 しかし、起動したからといって安心はできません。
 SAGEはネットワークの設定が正しくないと、まともに起動しないのです!
 まずは仮想マシン上の Linux がネットワーク接続できるようにすること。
 私はここでひっかかりました。
 満足に動かすためには、その他、Linux周りの設定がいろいろとあるのですが、細かい点は省略。

※ インストールの参考などに、
※ さげます >> http://d.hatena.ne.jp/sagemath/

● NoteBook の起動

さて、めでたく「sage:」のプロンプト表示に成功したら、次は「NoteBook」を起動しましょう。
NoteBookというのは、SAGEをWebブラウザから操作するためのインターフェイスです。
「sage:」のプロンプトに、「notebook()」と入力します。

sage: notebook()
  ・・・
Enter new password: ****** <-- admin のパスワードを設定します。
Retype new password: ****** <-- 確認のため、同じパスワードを入力
Please login to the notebook with the username 'admin' and the above password.
 **************************************************
 * Open your web browser to http://localhost:8000 *
 **************************************************

このような表示の後、Webブラウザが起動して、SAGEのインターフェイス画面が表示されます。

うまく表示されなかった場合、ブラウザから http://localhost:8000 にアクセスしましょう。
実際の計算処理は「New Worksheet」から新規ワークシートを作成して、その中で行うことになります。
notebook を終了するには、sage: のターミナル画面で Control-C を打ちます。

● リモートアクセス

NoteBookの起動時に

sage: notebook(interface='')

と入力すると、外部のPCからブラウザを通じて、SAGEに自由にアクセスできるようになります。
この他にも notebook には幾つかのオプションがあります。

sage: notebook?

と入力すると、Helpが表示されるので、それを参考にしてください。
(Help画面の終了は :q です。viエディタと同じ操作)

● 使用例

それでは、SAGEを使ってみましょう。まずは円周率1000桁。
ブラウザのWorksheet上で、n(pi, digits=1000) と入力。
コマンドの実行は、Shift + Enter キーで。

グラフ表示は plot コマンド。

3次元グラフは、plot3d。実行すると、JavaApplet が立ち上がる。

この3Dグラフは、マウスでグリグリ動かすことができる。

コマンドの後ろに、続けて ? を入力すると、ヘルプが表示される。
solve は、方程式を解け、というコマンド。

二次方程式の公式、三次方程式の公式。
変数はあらかじめ、x, a, b, c = var('x a b c') という形に定義すること。

微分は、diff。
(変数 u を定義し忘れると、中ほどのようなエラーとなる)

積分は、integral。

微分方程式も解ける。コマンドは desolve。

その他、ここには書ききれないほどの機能がてんこ盛りです。