トップQs
タイムライン
チャット
視点
Mathematica
スティーブン・ウルフラムが考案し広く使われている数式処理システム ウィキペディアから
Remove ads
Mathematica(マセマティカ)は、スティーブン・ウルフラムが考案し広く使われている数式処理システム。ウルフラム・リサーチの、ウルフラムが率いる数学者とプログラマのチームが開発し、同社(正規認定販売代理店)により販売されている。Mathematicaは項書き換えを基本として、複数のパラダイムをエミュレートするプログラミング言語( Wolfram言語という)としても強力である。
Remove ads
概要
ウルフラム・リサーチの創始者であるスティーブン・ウルフラムと彼のチームは、1986年から新たな数式処理システムの開発を開始し、1988年にその最初のバージョンをリリースした。ウルフラムは当初、このシステムをOmega、のちにPolyMathと呼んでいたが、当時NeXT社の社長であったスティーブ・ジョブズに相談したところ「ダサい名前だ」と一蹴され、なにか一般的な語をロマンチックに表現したもの、例えばトリニトロンのような名前が良いとして「Mathematica」と名付けた[2]。
歴代のMathematicaのロゴに使われているのは「スパイキー」と呼ばれる三次元多面体で、初代 Mathematicaでは大二十面体、それ以降のバージョンでは双曲二十面体を装飾したものが使われている[3][4]。
プログラミング言語としてのMathematicaは、項書き換えを基本として関数型と手続き型の両方をサポートするマルチパラダイム・プログラミング言語である。Mathematicaは、ウルフラムらが1979年頃に開発した Symbolic Manipulation Program を起源とし[5]、プログラミング言語ALGOL・LISP・APL、および数式処理システムMacsymaの影響を受けている[6][7]。
MathematicaはC/C++およびJavaで実装されているが、拡張可能なライブラリはすべてWolfram言語で書かれている。実際、新しいコード(Wolfram言語で書かれたテキストファイル)はMathematicaの「パッケージ(.mファイル)」として追加される。Mathematicaには4,000以上の高度に洗練された組み込み関数が用意されており[8]、それらをビルディング・ブロックとして組み合わせていくことで、簡単にプログラムを作ることができる。
システムとしてのMathematicaは、Wolfram言語を解釈し実際に計算を実行する「カーネル」と、その計算結果を表示する「フロントエンド」の2つの部分から構成される。カーネルとフロントエンドの間の通信には「MathLink[リンク切れ]」プロトコルが使われる。
Mathematicaの最新バージョンは 14.1(2024年7月31日リリース)で、様々なコンピュータシステム上で利用可能となっている。
Remove ads
機能

Mathematicaには次のような機能がある[9]。
- コアとなる言語
- 数学とアルゴリズム
- 可視化とグラフィックス
- データの操作
- データ、画像、動画、音響、CAD、GIS、文書、生物医学などの各種フォーマットのインポート/エクスポート
- 画像認識を含む画像処理と形態学的画像処理のツール
- 音響/画像データのウェーブレット解析用ライブラリ
- データ・クラスタリング、シーケンスアラインメント、パターンマッチなどのデータマイニングツール
- 計算可能なデータ
- 動的インタラクティブ機能
- 式やグラフィックスのインタラクティブな操作
- 計算とアプリケーションのためのユーザインタフェースを追加するツール
- ノートブックとドキュメント
- システムインタフェースと配備
Remove ads
インタフェース
システムとしてのMathematicaは、ユーザーとの対話を行う「フロントエンド」と、演算を実行する「カーネル」の2つの部分から構成される。フロントエンドはMathematicaシステムのGUIを担当する部分で、自動構文カラーリング、入力補完、デバッガなどの開発ツールの機能がある。また、一般的なワードプロセッシング機能の大部分もサポートしている。
フロントエンドとカーネルは互いに独立に起動し、「MathLink[リンク切れ]」と呼ばれるプロトコルを使って通信している。実際、Mathematicaを起動した時点ではカーネルは起動しておらず、フロントエンドで最初の計算が実行された時にはじめてカーネルが起ち上がる。
ノートブック
Mathematicaの標準的なフロントエンドである「ノートブック」は対話型のドキュメントで、データ・数式・テキスト・コード・演算結果・グラフィックス・表・GUIコンポーネント・アニメーション・音声などを混在させることができる。ノートブックはウルフラム・リサーチの共同創始者であるセオドア・グレイによって設計され、Mathematica 2.0より採用された。
一つのノートブックの中でデータの処理から可視化、さらに文書作成までをシームレスに行えることが、Mathematicaの最大の利点の一つである。ノートブックにおいては、ユーザーの入力(テキストと Wolframコード)やカーネルの演算結果(グラフィックやサウンドも含む)は、すべて階層化された「セル」に納められ、文書のアウトライン化やセクション分割が容易に行える。
ノートブックの中身はすべてWolfram言語で記述されており、それ自体を Wolfram 言語で生成・修正・解析することが可能である。ノートブックからTeXやXMLなどの他のフォーマットへの変換は、この機能を用いた構文解析を通じて実現されている。
代替フロントエンド
Mathematica標準のノートブック以外にも、代替のフロントエンドが存在する。2006年にはEclipseベースのIDE、Wolfram Workbenchが登場した。プロジェクトベースのコード開発ツールとなっており、リビジョン管理、デバッグ、プロファイル、評価などの機能がある。またMathematicaには、テキスト型インタフェースが同梱されており、UNIXコマンドラインから直接カーネルを呼び出し対話することも可能である[10]。
計算可能なデータ

Mathematicaには一貫したフレームワークで管理されたデータ群が含まれており、即座に計算に使用できる。それらデータはモデル評価などの目的でプログラムから使用でき、ウルフラム・リサーチにあるデータサーバに自動アクセスして最新データに更新できる[11]。株価や気象などのデータはリアルタイムに配信される。
計算可能なデータには次のようなものがある。
- 数学データ: 195の多面体の98種類の属性データ、5300のグラフの282種類の属性データ、6つの結び目の64種類の属性データ、21の格子の38種類の属性データ
- 化学データ: 44,000 の化合物の101種類の属性データ、118の元素の86種類の属性データ、1000の亜原子粒子の35種類の属性データ、3200の同位体の33種類の属性データ
- 天文学データ: 52の測地座標系の32種類の属性データ、156,000 の天体の99種類の属性データ
- 地政学データ: 240カ国の223種類の属性データ、164,000の世界各地の都市の14種類の属性データ
- 言語データ: 149,000の英単語の37種類の属性データ、他の26の言語の辞書
- 生命科学データ: 40,000のヒト遺伝子の41種類の属性データ、27,000のタンパク質の30種類の属性データ
- 金融データ: 146,000の銘柄や金融商品の74の属性データ(履歴とリアルタイム)
- 気象データ: 22,000の世界各地の観測地点における43の属性データ(履歴とリアルタイム)
- Wolfram Alphaのデータ: Wolfram Alphaからの兆を越える多数のデータ
Remove ads
高性能計算
1999年のバージョン4でパックアレー[12]、2003年のバージョン5で疎行列を導入し[13]、GNU Multi-Precision Library を採用して高精度演算が可能となり、高性能計算向け機能が拡張された。
バージョン5.2 (2005) では、マルチコアコンピュータ上で動作する際に自動的にマルチスレッド化する機能を追加した[14]。このバージョンから CPU 毎に最適化されたライブラリを採用している。また、ClearSpeed などのサードパーティ製高速化ハードウェアが Mathematica をサポートしている[15]。
2002年、異機種混在型クラスターやマルチプロセッサシステムでのユーザレベルの並列計算を可能にするgridMathematicaをリリース[16]。2008年には、並列計算技術は通常の Mathematica ライセンスに含まれるようになり、Windows HPC Server 2008、Microsoft Compute Cluster Server、Sun Grid をサポートするようになった。
2010年からCUDAおよびOpenCL対応のGPUハードウェアをサポート。またバージョン8ではC言語コードを生成でき、Intel C++ CompilerやVisual Studio 2010のコンパイラで動的にコンパイルできる。
Remove ads
他のアプリケーションとの接続
要約
視点
MathLink[リンク切れ]プロトコルは、Mathematicaのカーネルとフロントエンド間の通信だけでなく、任意のアプリケーションとカーネルとの通信にも使われる。Mathematicaは豊富な機能を備えているが、他のプログラムの機能を利用したり、古いコードにアクセスするためにいくつかのインタフェースが開発されてきた。
C、Java、.NET、データベース、Rとの接続
ウルフラム・リサーチはMathematicaカーネルとのMathLinkによる通信を行うアプリケーション開発者向けにC言語での開発キットを無料で配布している[17]。
J/Linkと.NET/Linkは、それぞれMathLinkをベースにしたJavaおよび.NET用のコンポーネントである。J/Link を使うと、JavaプログラムからMathematicaに計算を依頼することができ、MathematicaプログラムがJavaのクラスをロードし、Javaオブジェクトを操作したりメソッドを呼び出したりできる。そうすると、例えばMathematicaから Java の GUIを構築できる。同様に、.NET/Linkを使えば.NETプログラムと同様のことが可能になる。
DatabaseLinkはSQLデータベースを扱うためのツールキットで、JDBC接続とODBC接続をサポートしている。RLinkは統計解析向けプログラミング言語Rと交信し Mathematica内からRのコードを実行するもので、バージョン9から正式にサポートされた。
その他の接続
その他にMathematicaと接続できるプログラミング言語としては、Haskell[18]、AppleScript[19]、Racket[20]、Visual Basic[21]、Python[22]、Clojure[23]がある。数学関係のソフトウェアでは、OpenOffice.org Calc[24][リンク切れ]、 Microsoft Excel[25]、MATLAB[26][27][28]、SINGULAR[29]、Origin[30]に接続可能である。
Mathematicaはリアルタイムのデータストリームを受け付けることもでき、LabVIEW[31]、金融関係用[32][リンク切れ]、GPIB (IEEE 488)[33]、USB[34]、シリアル接続[35]などの方法がある。HIDデバイスからの入力を自動的に検出して読み込むこともできる。最近ではLEGO マインドストームで作ったロボットをBluetooth通信を介して操作する試みもなされている[36]。
2014年1月6日、ウルフラム・リサーチは、Wolfram言語と外部装置の接続利用促進に向けたプロジェクトWolfram Connected Devices Projectを起ち上げた[37][38]。
Remove ads
アプリケーション配布
Mathematicaで書かれたアプリケーションを配布するための手段がいくつか用意されている。
- Wolfram CDF Player
- 計算可能ドキュメント形式 (CDF) でセーブされ Mathematicaプログラムを実行できる無料のプレイヤーである。
- 代表的なウェブブラウザへのプラグインも含まれている。
- Mathematicaの標準形式のファイルも閲覧可能だが、実行はできない。
- Wolfram Player Pro
- Mathematicaのアプリケーションを実行可能なランタイム版Mathematicaである。
- コードの作成・編集はできない。
- webMathematica
- ウェブブラウザがリモートのMathematicaサーバのフロントエンドとして機能できるようにする。
- ユーザーの書いたアプリケーションにブラウザ経由で任意のプラットフォームからアクセスすることを可能にする。
- Mathematicaへの完全なアクセスを提供することはできない。
MathematicaのコードはC言語のコードに変換したり、DLL を自動生成することも可能である。また、閲覧に限ったファイルの共有にはHTMLやLaTeX書式での出力が便利である。数式はMathMLに変換することで他のソフトウェアとやりとりできる。
Remove ads
対応プラットフォームとライセンス
Mathematicaは、Microsoft Windows、macOS、Linuxの各種バージョンおよびクラウドで動作する[39]。どのプラットフォームも64ビット版をサポートしている。過去にサポートしていたOSとしては、NeXTSTEP、Solaris、AIX、Convex、HP-UX、IRIX、MS-DOS、OS/2、Ultrix、Windows Me、Windows XPなどがある。
ライセンス
Mathematicaはプロプライエタリなシステムである。政府機関、非営利組織、教育機関、学生、家庭用に向けては低価格を設定している。例えば、学生向けの製品(内容は正規品と同じ)は正規価格の5%程度で購入できる。教育機関向けライセンスで契約した場合、学生は家庭でもMathematicaを利用可能である。指定された数の Mathematica をネットワーク上で同時に起動できるネットワークライセンスも用意されている。
Mathematicaの価格設定は地域によっても大きく異なる。日米での価格差は、電話対応を含め、国内宛に日本語で問い合わせができる点や、日本語技術サポート、有償セミナーの半額割引(一部代理店のみ)等のサービスの差により生じている。
無料バンドル
2013年11月21日、ウルフラム・リサーチとラズベリーパイ財団は、すべてのRaspberry PiにWolfram言語とMathematica 10のパイロット版を無料でバンドルすることを発表した[40][41]。これにより、Raspberry Piの計算速度の問題は残るものの、Mathematicaの全機能を実質25ドル(Raspberry Pi Model A のボード1枚の価格)で利用できることになった。Mathematicaがコンピュータに無料でバンドルされるのは、1988年のNeXT以来、25年ぶり2度目の出来事である。
2014年1月6日、ウルフラム・リサーチとインテルは、2014年夏頃に発売予定のSD カードサイズコンピュータ Intel EdisonにWolfram言語とMathematicaを標準搭載すると発表した[42]。
Remove ads
リリース履歴
要約
視点
ウルフラム・リサーチからリリースされたMathematicaのバージョンは以下の通り[43]:
Remove ads
例
要約
視点
方程式 ex = x2 + 2 において x = -1 を開始点としてその根を数値的に求める。
In[1]:= FindRoot[Exp[x] == x^2 + 2, {x, -1}] Out[1]= {x -> 1.3190736768573652}
次の例では、インデックスの原点を0とする 6 × 6 の行列で i、j 番目のエントリの値が ij であり、0のエントリを1に置き換えたものの行列式を求めている。そのような行列式は0である。
In[2]:= Det[Array[Times, {6, 6}, 0] /. 0 -> 1] Out[2]= 0
一般的なプログラミング言語と大きく異なる点として、Mathematica ではリストのインデックスが 1 から始まることに注意が必要である。
マルチパラダイムと一つの言語
Mathematicaはマルチパラダイム・プログラミング言語であり、一つの問題に対して複数のアプローチを取ることが可能である。
ここでは簡単な例として、最大公約数 GCD(x, y) のテーブルを作る問題を考える(ここで、1 ≤ x ≤ 5、1 ≤ y ≤ 5 とする)。これには、少なくとも次の4つのアプローチが考えられる。
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}}
このアプローチは、表現が抽象的ではあるが、組み込み関数の性能を十分に引き出しており、簡潔で計算速度も速い。Array は引数として任意の関数を許容する(名前があるかどうかを問わない)ので、スロット #n を使って、& の後に対応する関数を記述することができる。したがって、上記の関数は Array[GCD[#1, #2]&, {5, 5}] とも記述できるが、Mathematicaではそれを上記のように省略してもよいようになっている。
2. 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 はそれぞれ APL の外積演算子とイオタ演算子に対応している。Outer も Array と同様、引数として任意の関数を許容する。
3. Table を使うアプローチ:
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}}
Table は任意の次元の表を作るのに使われる標準的な関数である。このアプローチは、GCD の取る引数が明示的で、直感的に理解しやすい。反面、上記1・2に比べると計算速度で若干劣る。
4. 手続き型のアプローチ:
In[6]:=
lst1 = {}; (* 空のリストを初期化 *)
For[i = 1, i <= 5, i++,
lst2 = {};
For[j = 1, j <= 5, j++,
lst2 = Append[lst2, GCD[i, j]]
];
lst1 = Append[lst1, lst2]; (* 部分リストを繋ぐ。これが行となる *)
];
lst1
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}}
これは C 言語や FORTRAN などで馴染み深いアプローチである。しかし、組み込み関数を使った場合(上記1~3)に比べるとコードが冗長である。また、手続き型のアプローチは計算速度が遅くボトルネックになりやすいので、注意が必要である。
以上の例で見たように、Mathematicaプログラミングにおいては、組み込み関数を最大限に利用することが非常に重要である。Mathematicaの組み込み関数を有効に使うことで、問題を簡潔に表現することができる。また、Mathematicaの組み込み関数は、適切なアルゴリズムを用い、高度に最適化され、かつC言語で実装されているため、同じ機能を持つユーザー定義関数に比べて計算速度が圧倒的に速い[44]。
すべては「式」である
Mathematicaは「すべては式である (Everything is an expression.)」という思想のもとに設計されている[45]。ここで言う「式 (Expression)」とは、アトムと関数である。
Mathematicaにおいて、数式・リスト・グラフィックスを含むすべてのオブジェクトは head[e1, e2, ...] という共通の基本構造を持つ。そして、この構造は入れ子にできる(つまり、e1 や e2 もまたこの構造を持てる)。したがって、どんなに複雑なオブジェクトでも、この基本構造とその再帰的な繰り返しで表現できる。
例えば、x^4+1 という式を入力すると、出力は以下のように表示される。
In[7]:= x^4 + 1
Out[7]= 1+x4
FullForm を使うと、この式の完全形(Mathematica における内部表現)を見られる。
In[8]:= FullForm[x^4 + 1] Out[8]= Plus[1, Power[x, 4]]
上記の例では、Plus が head であり、Power[x, 4] が入れ子になっている。x のような記号も実は Symbol["x"] という構造を持っている。
リストも List を head とする同様の構造である。例えば、x^4+1 と {1, x^4} という2つの表現は、外見はまったく異なるが、完全形で見れば head が Plus か 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[11]= {Log[x]/Log[2], Log[x]/Log[3], Log[x]/Log[4]}
第三引数 1 により、Apply によって置換するのがリストの最初のレベルであることが指定され、これは前述の例と等価である。
Remove ads
脚注
関連文献
関連項目
外部リンク
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads