Mathematica
出典: フリー百科事典『ウィキペディア(Wikipedia)』
Mathematica(マセマティカ)は、スティーブン・ウルフラムが考案し広く使われている数式処理システム。ウルフラムの率いる数学者とプログラマのチームが開発し、ウルフラム・リサーチ社が販売している。Mathematica は項書き換えを基本として、複数のパラダイムをエミュレートするプログラミング言語としても強力である。同様の数式処理システム、つまり競合商品として、CYBERNET SYSTEMS 社が販売代理店であるMapleという商品がある。
目次 |
[編集] 概要
ウルフラムとチームは1986年から作業を開始し、1988年に最初のバージョンをリリースした。(2006年6月現在)最新バージョンは 5.2 (2005年7月12日リリース)。様々なコンピュータシステム上で利用可能となっている。
機能が制限されたMathematica CalcCenterがある。
プログラミング言語としての Mathematica は項書き換えを基本として関数型言語と手続き型言語の両方をサポートしている(関数型の方が一般に使い易い)。C言語のオブジェクト指向版のような言語で実装されているが、拡張可能なライブラリはMathematica言語で書かれている。実際、新しいコード(Mathematica言語で書かれたテキストファイル)は Mathematica の「パッケージ」として追加される。
Mathematicaシステムでは、言語は実際の計算を行う「カーネル」が解釈する。計算結果はいくつかの「フロントエンド」のうちの一つに伝達される。カーネルとフロントエンド(あるいはユーザが書いたプログラムなど)との間の通信は「MathLinkプロトコル」を使用し、ネットワーク経由でも可能である。複数のフロントエンドが一つのカーネルに接続することも可能で、一つのフロントエンドを複数のカーネルに接続することも可能である。
MaximaやMAPLEのような他の数式処理システムとは違い、Mathematica は現在格納されている変換ルールを可能な限り適用して解を求めようとする。これを意味のあるものにするためには、副作用のないことが有益であり、その意味で関数型プログラミングと似ている。関数とコードはクラスであり型が設定される。変数スコープはダイナミックであるが、レキシカルスコープをシミュレートしようという試みもされている。
[編集] リリース履歴
ウルフラムは以下のようなバージョンをリリースしてきた。
- Mathematica 1.0 (1988年)
- Mathematica 1.2 (1989年)
- Mathematica 2.0 (1991年)
- Mathematica 2.1 (1992年)
- Mathematica 2.2 (1993年)
- Mathematica 3.0 (1996年)
- Mathematica 4.0 (1999年)
- Mathematica 4.1 (2000年)
- Mathematica 4.2 (2002年)
- Mathematica 5.0 (2003年)
- Mathematica 5.1 (2004年)
- Mathematica 5.2 (2005年)
[編集] 例
次の Mathematica のシーケンスは 6 × 6 の行列で i, j番目のエントリの値が ijであり、0のエントリを1に置き換えたものの行列式を求める。
In[1]:= Det[Array[Times, {6, 6}, 0] /. 0 -> 1] Out[1]= 0
従って、そのような行列の行列式は0である。
次の例は方程式 ex = x2 + 2 において x = -1 を開始点としてその平方根を数値的に求める。
In[2]:= FindRoot[Exp[x] == x^2 + 2, {x, -1}] Out[2]= {x -> 1.3190736768573652}
練習的な Hello World プログラムについては、Hello worldを参照。
[編集] マルチ・パラダイムと一つの言語
Mathematica は複数のプログラミングパラダイムによるアプローチが可能である。簡単な例を挙げる。gcd(x, y) のテーブルを作る(最大公約数のテーブル)。ここで、1 ≤ x ≤ 5、1 ≤ y ≤ 5 とする。
最も簡潔なアプローチは、多くの特殊関数の1つを使うことである。
In[3]:= Array[GCD, {5, 5}] Out[3]= {{1, 1, 1, 1, 1}, {1, 2, 1, 2, 1}, {1, 1, 3, 1, 1}, {1, 2, 1, 4, 1}, {1, 1, 1, 1, 5}}
他に少なくとも三種類のアプローチがある。
In[4]:= Table[GCD[x, y], {x, 1, 5}, {y, 1, 5}] Out[4]= {{1, 1, 1, 1, 1}, {1, 2, 1, 2, 1}, {1, 1, 3, 1, 1}, {1, 2, 1, 4, 1}, {1, 1, 1, 1, 5}}
APL的なアプローチ
In[5]:= Outer[GCD, Range[5], Range[5]] Out[5]= {{1, 1, 1, 1, 1}, {1, 2, 1, 2, 1}, {1, 1, 3, 1, 1}, {1, 2, 1, 4, 1}, {1, 1, 1, 1, 5}}
Outer は外積演算子に対応し、Range はイオタ演算子に対応している。Outer関数は任意の関数を許容する(名前があるかどうかを問わない)ので、引数内で #n を使って、& の後に対応する関数を記述することができる。従って、上記の関数は Outer[GCD[#1, #2] &, Range[5], Range[5]] とも記述できるが、Mathematica はそれを上記のように省略してもよいようになっている。
繰り返しを使ったアプローチ
In[6]:= l1 = {}; (* 空のリストを初期化 *) For[i = 1, i <= 5, i++, l2 = {}; For[j = 1, j <= 5, j++, l2 = Append[l2, GCD[i, j]] ]; l1 = Append[l1, l2]; (* 部分リストを繋ぐ。これが行となる *) ]; l1 Out[6]= {{1, 1, 1, 1, 1}, {1, 2, 1, 2, 1}, {1, 1, 3, 1, 1}, {1, 2, 1, 4, 1}, {1, 1, 1, 1, 5}}
この解法が前のものよりかなり大きいことに注意。
[編集] 主な構造と操作
Mathematicaの基本原則は、表現可能なほとんど全てのオブジェクトの背後にある共通の構造である。例えば、x4 + 1 という式が入力されたとき、それを表示すると以下のようになる。
In[7]:= x^4 + 1 Out[7]= 1+x4
しかし、FullFormコマンドをこの式に使用すると、次のようになる。
In[8]:= FullForm[x^4 + 1] Out[8]= Plus[1, Power[x, 4]]
Mathematica のほとんど全てのオブジェクトは head[e1, e2, ...] という基本形式を持つ(入力時や表示時に異なる形式となることもある)。例えば、上述の例では head は Plusであり、x のような記号も実は Symbol["x"] という構造を持っている。リストも head が List の同様の構造である。
この原則により、リストとは無関係の普通の式をリスト演算子で処理することもできる。
In[9]:= Expand[(Cos[x] + 2 Log[x^11])/13][[2, 1]] Out[9]= 2/13
逆も同様で、リストを普通の式のように扱うこともできる。
In[10]:= Map[Apply[Log, #] &, {{2, x}, {3, x}, {4, x}}] Out[10]= {Log[x]/Log[2], Log[x]/Log[3], Log[x]/Log[4]}
Apply関数は第二引数の head を第一引数に指定されたものに置換する。Map は関数型言語によく見られる高階関数 map のようなものである。
Mathematica での数学的オブジェクトがリスト構造と等価であるため、組み込み関数のいくつかは「スレッディング」可能であり、特に指定しなくてもリスト上の各要素にマップされるときにマルチスレッド化される。実際、Applyは次のような場合にマルチスレッド化される。
In[11]:= Apply[Log, {{2,x}, {3,x}, {4,x}}, 1] Out[10]= {Log[x]/Log[2], Log[x]/Log[3], Log[x]/Log[4]}
第三引数 1 により、Apply によって置換するのがリストの最初のレベルであることが指定され、これは前述の例と等価である。
[編集] フロントエンド
Mathematicaは2つの部分から成る。ユーザーと対話するフロントエンドと計算を実行するカーネルである。これらはMathlinkプロトコル経由で通信する。一般的ではないが、カーネルとフロントエンドを別のコンピュータ上で実行することもできる。
デフォルトのMathematicaのフロントエンドは様々なレイアウトとグラフィカルな能力があり、整形印刷やノートブック・メタファーが可能である。ユーザーの入力(テキストとMathematica言語)やカーネルの演算結果(グラフィックやサウンドも含む)は階層化されたセルに置かれ、文書のアウトライン化やセクション分割も可能となっている。バージョン 3.0 以降では、ノートブック自体もカーネルが処理できる式と見なすことができるようになった。
Mathematicaのライセンスのない人でも Mathematica のノートブックを見られるように、専用のリーダーソフトウェアが用意された。MathReader と呼ばれるこのソフトは無料でダウンロード可能である。これには Mathematica のカーネルは含まれていないので、改めて計算してみることはできない。
UNIX/LinuxバージョンのMathematicaには、コマンド行インターフェイスのフロントエンドが追加され同梱されている。以下にその例を示す。
% math Mathematica 5.2 for Sun Solaris (UltraSPARC) Copyright 1988-2005 Wolfram Research, Inc. -- Terminal graphics initialized -- In[1]:= Solve[x^2 + 2 x - 9 == 0, x] Out[1]= {{x -> -1 - Sqrt[10]}, {x -> -1 + Sqrt[10]}}
MS-DOSで動作する古い Mathematica はこのようなコマンド行フロントエンドだけを持っていた。
WITM は 「Web Interface to Mathematica(Mathematica用Webインターフェイス)」の頭字語であり、ネットワーク接続されWebブラウザを持つコンピュータと接続可能なフロントエンドである。これにより、Mathematica が本来使えない携帯情報端末での Mathematica利用を可能とする。
他にもいくつかのフロントエンドが使用可能である。例えば JMath や MASH があるが、標準のフロントエンドが最も一般的である。
[編集] 他のアプリケーションとの接続
Mathlinkと呼ばれるプロトコルを通して他のアプリケーションとの通信が行われる。Mathematica のカーネルとフロントエンド間の通信だけでなく、任意のアプリケーションとカーネルとの通信に Mathlink プロトコルが使われる。ウルフラム・リサーチ社はMathematicaカーネルとのMathlinkによる通信を行うアプリケーション開発者向けにC言語での開発キットを無料で配布している。Mathlinkをベースにしたコンポーネントとして、Java言語用の J/Link と .NET用の .NET/Link も用意されている。
J/Linkを使うと Javaプログラムから Mathematica に計算実行を依頼することができるし、Mathematica 上で Java のクラスをロードし、Javaのオブジェクトを操作してメソッドを呼び出したりできる。そうすると、例えば Mathematica から Java の グラフィカルユーザインターフェースを構築できる。同様に、.NETソフトウェアからカーネルを呼び出して計算を実行したり、Mathematica から .NETの機能を使うことができる。
[編集] Web上のMathematica
ウルフラム・リサーチは webMathematica というプログラムも作成している。これにより、Webサーバ上のウェブサイトに「インタラクティブな計算と可視化の機能」を追加できる。
スローン(AT&Tフェロー)の Online Encyclopedia of Integer Sequences(整数数列のオンライン百科辞典)では、MathematicaとMAPLEは数列を計算するコマンドが示されることの多い数式処理システムである。OEISにはこれらのデータベース項目が用意されている。
[編集] 留意点
一般的なプログラミング言語と大きく異なる点として、Mathematicaではリストのインデックスが 1 から始まる。
ウルフラム・リサーチ関連のフォーラムや comp.soft-sys.math.mathematica のようなニューズグループは全てモデレータ(司会者、仲裁者)付きであり、コミュニティからの支援を得る速度が遅くなると不満を漏らす者もいる。また、当然であるが、それらの標準語は英語となっている。
日本語のユーザー組織としては、日本Mathematicaユーザー会が様々なコミュニティとしての活動を行っている。
Mathematicaはプロプライエタリなシステムであり、ウルフラム・リサーチの設定している価格は比較的高価である。ただし、生徒・学生向けの製品(内容は正規品と同じ)として、使用できる期間が限定されているものの正規価格の10%程度で購入できるライセンスもある[1]。競合するMapleの場合この時間的制限がない。
[編集] 関連項目
[編集] 外部リンク
- Wolfram Research
- Mathematica (Wolfram Research)
- Mathematicaの歴史, システムの歴史と開発の概要
- 日本Mathematicaユーザー会
- Mathematicaフォーラム
- 神戸大学 Mathematica ホームページ
以下、いずれも英文
- Wiki-Mathematica, Mathematicaユーザーグループのwiki
- WITM, Mathematicaへのウェブブラウザ・インターフェイス。任意のプラットフォーム上で使えるようにする。
- MASH, Mathematica の UNIXスクリプトインターフェイス
- IMS, the Open Source IMTEK Mathematica Supplement (IMS)
- Mathematica Photo Gallery, Mathematicaを利用したアート