遅ればせながら、明けましておめでとうございます。本年もよろしくお願い致します。独学Linuxもとうとう6年目に突入してしまいましたが、一体いつまで続けられるのでしょうか?ブログの使用容量はまだ7%程度ですので、引越しする必要は全くないです…。

さて、今年の最初の話題は、高校生や大学生などに非常に役立つツールの紹介です。数式処理システムを使えば、数式の形で、因数分解や微分や積分などを行うことができます。MathematicaやMapleなどの商用ソフトもありますが、その多くは非常に高価ですので、(かつての僕のような)貧乏学生の皆さんには、Maximaがオススメです。

maxima-3imaximaで起動したGnuplotの実行画面。クラインの壷です。
 [コマンド]
plot3d([5*cos(x)*(cos(x/2)*cos(y)+sin(x/2)*sin(2*y)+3.0) - 10.0,-5*sin(x)*(cos(x/2)*cos(y)+sin(x/2)*sin(2*y)+3.0),5*(-sin(x/2)*cos(y)+cos(x/2)*sin(2*y))],[x,-%pi,%pi],[y,-%pi,%pi],['grid,100,100]);

wxmaxima-samplewxMaximaでの計算例。微分・積分も簡単です。

Maximaとは

Common Lispという言語で書かれたオープンソースの数式処理システムで、方程式を解いたり、行列計算や微分・積分など多くの計算ができ、Gnuplotの機能と連携して2次元グラフや3次元グラフを出力できるなど、市販の数式処理システムに劣らない機能をもっています。なお、単体では端末上で動作しますが、GUIインターフェイスで操作可能なwxMaximaというパッケージもあります。また、Emacs上で動作するimaximaを使うと、数式をTeXのフォントで綺麗に出力させることが可能です。

Maximaのインストール

Ubuntu,Fedora,Vine Linuxのそれぞれで試してみました。

・Fedora 14:wxMaximaのメニューは日本語化されているものの、Emacs上でimaximaでのTeX表示ができない。
・Vine Linux 5.2:wxmaximaがコンパイルし直さないと起動しない。
・Ubuntu 10.04:wxMaximaのメニューが日本語化されていない。
・Ubuntu 10.10:wxMaximaのインストールのみで正常に動作する。

ということで、他のディストリでも、設定次第で使えるとは思いますが、Ubuntu 10.10がオススメです。事前に日本語セットアップ・ヘルパで、日本語TeXの一式をインストールしておき、Ubuntuソフトウェア・センターで「wxmaxima」を検索してインストールするだけで、Emacs、Gnuplotなど必要なものはすべてインストールされます。

maxima-installwxMaximaのインストール

Maximaの起動

端末からは「maxima」というコマンドで
(%i 1)
という入力待ちの状態になるので、ここでMaximaのコマンドを実行します。ただし、端末上での数式表示は非常に見えづらく、wxMaximaの方が表示は綺麗です。wxMaximaは、Gnomeメニューの「アプリケーション>科学>wxMaxima」にあります。メニューから操作を選択して、ウィンドウ上に処理を行う数式を入力します。

wxmaximawxMaximaの起動

これはコマンドを覚えていなくても使える便利さがありますが、出力される数式はTeXのフォントではありません。また、グラフ表示は画像のみで、Gnuplot(画像の拡大や回転が可能)は起動しません。

そこで、ここではEmacs上でimaximaを使ってみます。Ubuntu 10.10の場合、特に設定する必要はありません。
「アプリケーション>アクセサリ>GNU Emacs23」でEmacsを起動します。「Alt+xキー」を押し、「imaxima」と入力してEnterキーを押すと、imaximaのフレームに切り替わり、
(%i 1)
という入力待ちの状態になります。

Maximaの使い方

Maximaでは、それぞれの操作に対応するコマンド(solve,integrateなど)を使います。基本的には「コマンド(関数,変数,下限値,上限値);」などという形式で指定しますが、それぞれのコマンドにより特有のオプションがあります。

(例) 方程式 を解く
 [コマンド]
  solve(x^2+5*x+6=0,x);

(例) を因数分解する
 [コマンド]
  gfactor(x^2+5*x+6,x);

(例) 関数 を2回微分する
 [コマンド]
  y: x^2+5*x+6;
  diff(y,x,2);


(例) 関数 を0~3まで積分する
 [コマンド]
  y: x^2+5*x+6;
  integrate(y,x,0,3);


wxmaxima-menuwxMaximaのメニュー。固有ベクトルやラプラス変換まであります。

詳しい解説は下記のサイトなどを参照して下さい。
Maxima による数式処理
Maximaで遊ぼう
Professional Maxima

ちょっと特殊な使用例を挙げておきましょう。

微分方程式

desolve(f(x)を含む微分方程式,f(x))という形でコマンドを実行すると、微分方程式を解くことができます。変数の範囲など適当に無視して強引に解いてしまうところがすごいです。

maxima-2imaximaでの計算例。微分方程式も一発です。

上の画像は、
  
という微分方程式の解を求めているところです。

Is XXX positive or negative, or zero?
と訊かれた場合は、「positive;」あるいは「negative;」あるいは「zero;」と入力すれば、それぞれのケースの解が表示されます。

ジュリア集合

下記のjuliaコマンドを使うと、Emacsを実行しているディレクトリ内にjulia.xpmという名前でジュリア集合の画像データが保存されます。

julia(-0.55, 0.6, [levels, 40], [center, 0, 0.6], [radius, 0.3],[hue, 240], [huerange, -180], [filename, "julia"])$

julia出力したジュリア集合の画像


来週は大学入試センター試験ですね。受験生の皆さんは、体調を整えて頑張って下さい。ちなみに、試験会場ではMaximaは使えませんので、手計算で頑張りましょう。

今年もよろしくお願い致します。