ふと思い立って、Maxima をインストールしてみることにした。 まずは Mac mini (Server) でやってみた。
ちなみに、Maxima っていうのは GPL で配布されているフリーな数式処理システムだ。「はじめてのMaxima」によれば、
Maxima は 1960 年代の MIT の MACSYMA プロジェクトで開発された「MACSYMA」(MAC's SYmbolic Manipulation system) の「DOE(エネルギー省)版」を、Texas 大学のシェルター氏 (Schelter) が「Common Lisp: The language 第一版」に対応した「gcl」に移植したものです。
ということだ。手元にあるかなり古い雑誌(「インターフェイス」増刊の「archive」No.12) によれば、Maxima の前身である Macsyma の作成が開始されたのが 1966 年。1972 年に ARPA ネット(!) を通じて全米で使用可能となって、さらに一般で購入可能となったのが 1982 年だとのこと(ちなみに、同誌によれば現在数式処理ソフトとして有名な Mathematica の最初の版ができたのが 1988 年だそうな)。なかなかに歴史のあるソフトだ。
インストールを始める前はつまづくとは思っていなかった。MacPorts でインストールできるだろうと思っていたから。sudo port install maxima
で後は待つだけ、そう高をくくっていた。世の中、そうそう甘くない。
Common Lisp 処理系が必要
Maxima は Common Lisp 上に構築されたシステムなので、インストールおよび実行には Common Lisp の処理系が必要。MacPorts で提供されている Maxima の構成では SBCL か CLisp が使える。Wikibooks:Maximaを見て検討した結果、SBCL をベースとして使うことにした。
特に理由はなかったんだけど、まずは SBCL だけをインストールすることにした。sudo port install sbcl +threads
だ。で、いきなりここでつまづいた。何やらエラーが出てビルドが進まない(↓)。
[macmini:~] mnbi% time sudo port install sbcl +threads (...中略...) ---> Building sbcl Error: Target org.macports.build returned: can't read "host_lisp": no such variable Error: Status 1 encountered during processing.
MacPorts の問題だった
困ったときはグーグル先生に訊け。ぐぐってみると、すでに MacPorts の trac に ticket が上がっていることがわかった(→ #20904 - sbcl 1.0.29 fails to build on 10.6)。どうやら、Snow Leopard 用の対応が必要だった模様。幸い、すでに解決されているようで、patch も添付されていた。SBCL インストールのための具体的な手順は以下の通り:
- 上記 ticket に添付れている(Attachements) Portfile-sbcl.diff をダウンロード。
- SBCL の port が置かれているディレクトリ(標準なら
/opt/local/var/macports/sources/rsync.macports.org/release/ports/lang/sbcl
) にある Portfile に↑の patch を適用する。 - 同様に patch-posix-tests.diff もダウンロード。
- この patch ファイルは Portfile と同じ場所にある files ディレクトリに置く。
sudo port install sbcl
を実行。
結果はこうなった。
[macmini:~] mnbi% time sudo port install sbcl +threads ---> Computing dependencies for sbcl ---> Fetching sbcl ---> Attempting to fetch sbcl-1.0.29-x86_64-darwin-binary-r2.tar.bz2 from http://internap.dl.sourceforge.net/sbcl ---> Verifying checksum(s) for sbcl ---> Extracting sbcl ---> Applying patches to sbcl ---> Configuring sbcl ---> Building sbcl ---> Staging sbcl into destroot ---> Installing sbcl @1.0.32_0+darwin_10+html+threads ---> Activating sbcl @1.0.32_0+darwin_10+html+threads ---> Cleaning sbcl 361.050u 83.442s 8:01.20 92.3% 0+0k 57+1724io 1pf+0w
time
で実行時間も測ってみた。8分だったらしい。そうそう、この記事は 2009-11-13 に実施した結果をまとめている。そのうち、上記の patch は ports 本体に取り込まれるはず。そうなれば対処は不要になる。
残りはまとめて
後は一気にまとめてインストール。こうなった。
[macmini:~] mnbi% time sudo port install maxima ---> Computing dependencies for maxima (...中略...) ---> Fetching maxima ---> Attempting to fetch maxima-5.19.2.tar.gz from http://voxel.dl.sourceforge.net/maxima ---> Verifying checksum(s) for maxima ---> Extracting maxima ---> Configuring maxima ---> Building maxima ---> Staging maxima into destroot ---> Installing maxima @5.19.2_0 ---> Activating maxima @5.19.2_0 ---> Cleaning maxima 800.643u 400.765s 19:18.66 103.6% 0+0k 1504+10813io 0pf+0w
約20分。大部分は依存関係のビルドとインストールだった。
実行してみよう
数式処理システムっていうのは、その名の通り、数式を処理(計算)するためのもの。数値じゃない、数式ってとこが大事。コンピュータの名の由来である「計算(compute)」はもともと数値計算のこと。一方、数式を計算するっていうのは、中学や高校や大学の数学でおなじみの式の変形(展開や因数分解)、微分や不定積分のようなもの。
最初は中学レベルの式の展開と因数分解をやらせてみよう。
[macmini:~] mnbi% maxima Maxima 5.19.2 http://maxima.sourceforge.net Using Lisp SBCL 1.0.32 Distributed under the GNU Public License. See the file COPYING. Dedicated to the memory of William Schelter. The function bug_report() provides bug reporting information. (%i1) expand((x + 1)^2); 2 (%o1) x + 2 x + 1 (%i2) expand((x + 1)^3); 3 2 (%o2) x + 3 x + 3 x + 1 (%i3) factor(x^2 - 1); (%o3) (x - 1) (x + 1) (%i4) factor(x^3 - 1); 2 (%o4) (x - 1) (x + x + 1)
2次や3次の方程式ぐらい楽勝。
(%i5) solve(x^2 + 2*x + 1, x); (%o5) [x = - 1] (%i6) solve(3*x^2 + 2*x + 1, x); sqrt(2) %i + 1 sqrt(2) %i - 1 (%o6) [x = - --------------, x = --------------] 3 3 (%i7) solve(x^3 - 1); sqrt(3) %i - 1 sqrt(3) %i + 1 (%o7) [x = --------------, x = - --------------, x = 1] 2 2
中学生の頃に欲しかったょ。
グラフはいかが
Maxima は外部ツールと連動してさまざまなグラフを描くこともできる。MacPorts を使うと Gnuplot もインストールされる。
(%i21) plot2d(sin(x),[x,-2*%pi, 2*%pi]);
これ(↑)が、こうなる(↓)。
送信者 Macをプログラムする |
関連リンク
- Maxima 公式サイト (英語)
- Maxima - Wikibooks (Maxima の入門書; 日本語)
0 件のコメント:
コメントを投稿