Mathematica (マセマティカ)は、スティーブン・ウルフラム が考案し広く使われている数式処理システム 。ウルフラム・リサーチ の、ウルフラムが率いる数学者 とプログラマ のチームが開発し、同社(正規認定販売代理店 )により販売されている。Mathematicaは項書き換え を基本として、複数のパラダイムをエミュレートするプログラミング言語 としても強力である。
概要
ウルフラム・リサーチ の創始者であるスティーブン・ウルフラム と彼のチームは、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日リリース)で、様々なコンピュータシステム上で利用可能となっている。
機能
調整可能なパラメータで描画したディニの曲面 (英語版 )
Mathematicaには次のような機能がある[ 9] 。
コアとなる言語
数学 とアルゴリズム
可視化 とグラフィックス
データの操作
計算可能なデータ
動的インタラクティブ機能
式やグラフィックスのインタラクティブな操作
計算とアプリケーションのためのユーザインタフェース を追加するツール
ノートブックとドキュメント
システムインタフェースと配備
インタフェース
システムとしての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で利用できるリアルタイム気象データを用いた流線プロット (StreamPlot ) の例。
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 からの兆を越える多数のデータ
高性能計算
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 のコンパイラで動的にコンパイルできる。
他のアプリケーションとの接続
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] 。
アプリケーション配布
Mathematicaで書かれたアプリケーションを配布するための手段がいくつか用意されている。
Wolfram CDF Player
計算可能ドキュメント形式 (CDF) でセーブされ Mathematicaプログラムを実行できる無料 のプレイヤーである。
代表的なウェブブラウザへのプラグインも含まれている。
Mathematicaの標準形式のファイルも閲覧可能だが、実行はできない。
Wolfram Player Pro
Mathematicaのアプリケーションを実行可能なランタイム版Mathematicaである。
コードの作成・編集はできない。
webMathematica
ウェブブラウザがリモートのMathematicaサーバのフロントエンドとして機能できるようにする。
ユーザーの書いたアプリケーションにブラウザ経由で任意のプラットフォームからアクセスすることを可能にする。
Mathematicaへの完全なアクセスを提供することはできない。
MathematicaのコードはC言語 のコードに変換したり、DLL を自動生成することも可能である。また、閲覧に限ったファイルの共有にはHTMLやLaTeX書式での出力が便利である。数式はMathML に変換することで他のソフトウェアとやりとりできる。
対応プラットフォームとライセンス
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] 。
リリース履歴
ウルフラム・リサーチからリリースされたMathematicaのバージョンは以下の通り[ 43] :
バージョン
リリース日
主な新機能
Mathematica 1.0
1988年6月23日
初代 Mathematica。Macintosh のサポート。NeXT 社製のすべてのコンピュータにバンドル 。
Mathematica 1.2
1989年8月1日
Macintosh フロントエンド。リモートカーネル。初歩的微分方程式の求解。StatisticsおよびGraphicsパッケージの追加。3D グラフィックス の新しいオプションと機能の追加。
Mathematica 2.0
1991年1月15日
MathLinkプロトコル。標準フロントエンド「ノートブック」。グラフィックスの装飾機能の追加。文字列・ファイル操作。
Mathematica 2.1
1992年6月15日
Macintosh 用MathLink。Windows 3.1 のサポート。
Mathematica 2.2
1993年6月1日
Windows 用 MathLink。Linux のサポート。X 用フロントエンド、オンラインマニュアル。MacintoshとNeXT 用の関数ブラウザ。
Mathematica 3.0
1996年9月3日
数式タイプセット。数多くの新しい特殊関数 。
Mathematica 4.0
1999年5月19日
スペルチェック 機能。20種類以上のデータ、画像、サウンドデータのインポート・エキスポート。ネットワークライセンス管理システム。
Mathematica 4.1
2000年11月2日
Mac OS X のサポート。J/LinkによるJavaの統合。リアルタイム 3Dグラフィックス 。
Mathematica 4.2
2002年11月1日
スライドショー スタイル。XML対応。XHTML への書き出し。
Mathematica 5.0
2003年6月12日
疎行列 のサポート。.NET/Linkによる.NET Frameworkとの統合。クイックスタート。
Mathematica 5.1
2004年10月25日
SQL 接続のサポート。Excel ファイルのインポート・エキスポート。Webサービス のサポート。クラスタ分析 。ベンチマーク ツールMathematicaMark。
Mathematica 5.2
2005年6月20日
64ビット 対応。マルチコア 。SSH リモート接続。
Mathematica 6.0
2007年5月1日
動的インタラクティブ機能。数学 、物理学 、化学 、金融 、地理 、言語学 のオンラインデータベースへのアクセス。
Mathematica 6.0.1
2007年7月5日
Mathematica ドキュメントセンター。「ノートブックを評価」メニュー。Mathematica関数の例題およびチュートリアル。
Mathematica 6.0.2
2008年2月25日
バーチャルブック(Mathematicaブックの電子版)。関数ナビゲータ。Intel Mac での64ビット対応。
Mathematica 6.0.3
2008年6月23日
Mathematica 7.0
2008年11月18日
組込みの並列高性能計算。ゲノム 、タンパク質 、気象 のオンラインデータベースへのアクセス。測地 およびGIS データ。
Mathematica 7.0.1
2009年3月5日
基本数学・数学授業・文章作成のアシスタントパレットの日本語化。チュートリアル、「How to」ガイド、スクリーンキャスト。ドキュメントに含まれる数千に及ぶ新規例題。gridMathematica Serverとの統合。
Mathematica 8.0
2010年11月15日
Wolfram Alpha との統合。自由形式言語入力。CDF(計算可能ドキュメント形式)。CUDA 、OpenCL の組込みサポート。C コードの自動作成。3D画像のテクスチャマッピング 。Mathematicaホームエディション。
Mathematica 8.0.1
2011年3月7日
Mathematica 8.0.4
2011年10月24日
Mathematica 9.0.0
2012年11月28日
入力予測 インターフェイス。ソーシャルネットワーク 分析。主要なデータサイエンス 、確率 ・統計 の新機能。3D立体画像処理機能。インタラクティブゲージ。Google マップ などのWeb API に対応。R との統合。スライドショースタイルの刷新。
Mathematica 9.0.1
2013年1月30日
Mathematica 10.0.0
2014年7月21日
完全なWolfram 言語に基づく初のバージョン。高度に自動化された機械学習 。地理情報 可視化のためのGeoGraphicsの導入。ランダム過程 解析の拡張。2D・3D画像処理の向上。信号処理 の改善。外部デバイス および API 接続性の向上。Wolfram Cloudとの統合。Raspberry Pi への無料バンドル。
Mathematica 10.0.1
2014年9月17日
Mathematica 10.0.2
2014年12月10日
Mathematica 10.1
2015年4月2日
Wolfram Data Dropのサポート、オブジェクトの自動認識、OpenSSLを使用した暗号化の言語レベルでのサポート、Wikipediaコンテンツへのアクセス、ユーザ定義の文法規則の配備など。
Mathematica 10.2
2015年7月14日
(日本語版は2015年8月18日リリース)コードキャプション、立体データおよび離散データの可視化のためのSliceDensityPlot3DとListStepPlot、常微分方程式および偏微分方程式における固有値および固有関数の数値解法、メールの自動処理機能、クラウド機能の拡張など。
Mathematica 10.3
2015年10月28日
地理的計算機能、単語やアルファベット の文字列操作のため言語データの追加と自然言語理解能力の向上、偏微分方程式 と固有値問題 の記号解法のサポート、GoogleCalendar・GoogleContacts・Yelp のデータ,ArXiv およびCrossRef 等のサービス接続オプションなど。
Mathematica 10.3.1
2015年12月21日
画像処理 機能の安定性の向上、スペイン語 のスペルチェック や中国語 の検索機能を含むさまざまな言語と翻訳についてのサポートの向上、ユーザインターフェース の多様なアップデートなど。
Mathematica 10.4
2016年3月7日
連想 におけるパターンマッチングのサポート、スケールされたプロット生成、地理的計算の形式と関数の追加、インタラクティブ画像ビューア、Wolfram Data Dropと直接連動するArduino Yunのサポート、20以上の新しいインタープリタ型、24の新しいフォントファミリの追加サポートなど。
Mathematica 10.4.1
2016年4月25日
過去のリリースにおける問題への対処と安定性の向上。
Mathematica 11.0.0
2016年8月22日
計算音声、3D印刷、ランダム行列等の新機能、および各種機能の拡張と向上。
Mathematica 11.0.1
2016年10月5日
11.0.0で発生した不具合の解決、各種機能の向上。
Mathematica 11.1
2017年4月4日
機械学習、ニューラルネットワーク、音声処理、ロバストな記述統計等の分野におけるWolfram言語の最先端機能の拡張
Mathematica 11.1.1
2017年5月9日
ListPlot3Dを使った描画の問題への対処、MacにおけるニューラルネットワークのGPUサポートの再有効化、URLFetchおよびドキュメント検索のスピード低下の問題の解決など。
Mathematica 11.2
2017年10月5日
機械学習機能の拡張、ニューラルネットワークへのCPUおよびGPUの訓練サポートを含む高性能のフレームワークの導入、微分方程式の数値・記号解の両方の提供など。
Mathematica 11.3
2018年3月22日
数学計算、音声および画像の処理、機械学習とニューラルネットワーク、システムモデリング等におけるMathematicaとWolfram言語の機能の拡張と、フロントエンドの新機能導入など。
Mathematica 12.0
2019年5月11日
数学、幾何学、地理的可視化、音声処理、画像処理、機械学習等における機能,フロントエンド機能の拡張とシステム全体の性能の向上。
Mathematica 12.1
2020年5月12日
数学的可視化、ビデオ計算(音声処理/画像処理/機械学習の動画へ適用)、機械学習とニューラルネットワーク、データアクセスと保存などの機能拡張と、パクレット(=paclet、コード/リソースのモジュラーパッケージ)管理などの新システムの導入。
Mathematica 12.2
2021年2月20日
空間統計や動画・音声分析、生体分子配列等、200以上の新関数が追加されるとともに、多くの関数やユーザインターフェースも向上。
Mathematica 12.3
2021年7月27日
100個以上の新関数、大幅に更新され機能が向上した多くの関数、数式処理関数の改良・更新、動画処理や機械学習・ニューラルネットワークの機能のさらなる拡張、Apple Silicon搭載macOSのネイティブサポート、シングルサインオンによるアクティベーションの効率化等。
Mathematica 13.0
2022年1月19日
化学反応や分子についての情報を扱う関数が強化されたほか、可視化、ビデオ関連、機械学習、最適化、物理モデリング等の分野で多くの新関数が導入され、機能も大幅に改善された。また、インストーラからドキュメントが分離(Mac版とWindows版)。ドキュメントはWebで見れるほか、別途インストールすることも可能。
Mathematica 13.1
2022年7月25日
90個の完全に新しい関数の他、機能が大きく向上した203個の関数、新しいユーザインターフェース機能、改良されたコンパイラ機能や、モデルの結果に対する特徴のインパクトをプロットする新しい機械学習関数の追加。
Mathematica 13.2
2023年1月16日
機械学習やコンパイルにおける新機能が導入されている他、木構造、数学計算、動画、天文学等に関する大きく改善された関数も追加。より高速になった1変数および多変数の多項式操作。ドキュメントおよび性能も大きく向上。
Mathematica 13.3
2023年6月29日
中核の計算分野の拡張を継続する一方、LLM関数が導入され、Wolfram言語がLLMとの連携で人間・AI・計算の間をとりもつかけ橋として機能するようになった。LLMの実行結果を人間が確認・修正する媒体としてWolfram言語を活用でき、より高度なコーディングに対応可能に。
Mathematica14.0
2024年1月16日
LLMとの統合を進め、改良されたチャットノートブックではWolfram言語の計算を直接LLMとの会話に埋め込むことが可能となった。また試験的に、入力として画像を取るマルチモーダルLLMへのアクセスも可能。その他、微積分やPDE、動画編集、天文学、化学など多くの分野で機能が向上している。
Mathematica14.1
2024年7月31日
統合アプリケーション(WOLFRAM)の導入。ニューラルネットやLLM(大規模言語モデル)の操作、コンテンツの比較、画像や動画の操作、生体分子や天体物理学等における科学的評価のための新しいツールが提供されている。
例
方程式 e x = x 2 + 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 [e 1 , e 2 , ... ] という共通の基本構造を持つ。そして、この構造は入れ子にできる(つまり、e 1 や e 2 もまたこの構造を持てる)。したがって、どんなに複雑なオブジェクトでも、この基本構造とその再帰的な繰り返しで表現できる。
例えば、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 によって置換するのがリストの最初のレベルであることが指定され、これは前述の例と等価である。
脚注
^ Wolfram, Stephen (Jun. 23, 2008), “Mathematica Turns 20 Today” , Wolfram Blog, http://blog.wolfram.com/2008/06/23/mathematica-turns-20-today/ 2012年5月16日 閲覧。
^ Wolfram, Stephen (Oct. 6, 2011), “Steve Jobs: A Few Memories” , WolframAlpha Blog, http://blog.wolframalpha.com/2011/10/06/steve-jobs-a-few-memories/ 2012年5月16日 閲覧。
^ Weisstein, Eric W., “Spykey” , Wolfram MathWorld, http://mathworld.wolfram.com/Spikey.html
^ Trott, Michael (May 22, 2007), “Making the Mathematica 6 Spikey” , Wolfram Blog, http://blog.wolfram.com/2007/05/22/making-the-mathematica-6-spikey/
^ Pollack, Andrew (Jun. 24, 1988), “A Top Scientist's Latest: Math Software” , The New York Times, https://www.nytimes.com/1988/06/24/business/a-top-scientist-s-latest-math-software.html
^ Wolfram, Steven (Jun. 6, 2013), “There Was a Time before Mathematica” , Wolfram Blog, http://blog.wolfram.com/2013/06/06/there-was-a-time-before-mathematica/
^ Sharma, Jai (Feb. 21, 2010), “Programming Language Influences” , Jai's Blog, http://www.jaisharma.info/static/choice/images/projects/lineage.svg
^ “アルファベット順のリスト” , Mathematica ガイド , Wolfram Research, Inc., http://reference.wolfram.com/mathematica/guide/AlphabeticalListing.html
^ “Wolfram Mathematica ドキュメントセンター” , Wolfram Mathematica , Wolfram Research, Inc., http://reference.wolfram.com/mathematica/guide/Mathematica.html
^ “テキスト型インターフェイスを使った入出力” , Mathematica チュートリアル , Wolfram Research, Inc., http://reference.wolfram.com/mathematica/tutorial/UsingATextBasedInterface.html
^ “科学・技術データ” , Mathematica ガイド , Wolfram Research, Inc., http://reference.wolfram.com/mathematica/guide/ScientificAndTechnicalData.html 2012年5月16日 閲覧。
^ “パックアレー” , Wolfram テクノロジーガイド , Wolfram Research, Inc., http://www.wolfram.com/technology/guide/PackedArrays/
^ “疎(スパース)配列” , Wolfram テクノロジーガイド , Wolfram Research, Inc., http://www.wolfram.com/technology/guide/SparseArrays/
^ “マルチコアのサポート” , Wolfram テクノロジーガイド , Wolfram Research, Inc., http://www.wolfram.com/technology/guide/MulticoreSupport/
^ “ClearSpeed Advance(TM) Accelerator Boards Certified by Wolfram Research; Math Coprocessors Enable Mathematica Users to Quadruple Performance.” , Business Wire, (Jun 27, 2006), http://www.thefreelibrary.com/ClearSpeed+Advance(TM)+Accelerator+Boards+Certified+by+Wolfram...-a0147498410
^ Sellers, Dennis (Nov. 20, 2002), “gridMathematica offers parallel computing solution” , MacWorld, http://www.macworld.com/news/2002/11/20/mathematica/index.php
^ Todd, Daniel (Jun. 15, 1992), “New Mathematica: faster, leaner, linkable and QuickTime-compatible: MathLink kit allows ties to other apps.(2009年1月12日時点のインターネット・アーカイブ)” , MacWeek, https://web.archive.org/web/20090112043927/http://www.accessmylibrary.com/coms2/summary_0286-9256461_ITM
^ “mathlink: Write Mathematica packages in Haskell” , hackage.haskell.org, http://hackage.haskell.org/package/mathlink
^ “Mathlink for AppleScript” , uni software plus, http://www.unisoftwareplus.com/products/mathlinkosax/
^ Zhu, Chongkai, “MrMathematica: Calling Mathematica from PLT Scheme (Racket)” , http://www.cs.utah.edu/~czhu/SchemeLink/mrmma.html
^ “Mathematica for ActiveX” , Episoft, Inc., http://library.wolfram.com/infocenter/TechNotes/4710/
^ Konerding, David (Feb 16, 1998), “PYML (Python Mathematica interface)” , http://library.wolfram.com/infocenter/MathSource/585/
^ Sheldon-Coulson, Garth, “Clojuratica : An Interface Between Clojure and Wolfram Mathematica” , http://clojuratica.weebly.com/
^ “CalcLink” , Lauschke Consulting, http://www.lauschkeconsulting.com/calclink.html
^ “Wolfram Mathematica Link for Excel” , Wolfram Research, Inc., http://www.wolfram.com/products/applications/excel_link/
^ “MATLink” , http://matlink.org/
^ Barrowes, Ben, “Mathematica Symbolic Toolbox for MATLAB - Version 2.0” , MathWorks, http://www.mathworks.com/matlabcentral/fileexchange/6044-mathematica-symbolic-toolbox-for-matlab-version-2-0
^ Germundsson, Roger, “MaMa: Calling MATLAB from Mathematica with MathLink” , Wolfram Research, Inc., http://library.wolfram.com/infocenter/MathSource/618/
^ Kauers, Manuel, “An Interface between Mathematica and Singular” , http://www.risc.uni-linz.ac.at/people/mkauers/publications/kauers06m.pdf
^ “Interface Links Origin And Mathematica Software” , Electronic Design, http://electronicdesign.com/Articles/ArticleID/1323/1323.html
^ “Mathematica Link to Labview” , BetterView Consulting, http://www.bettervi.com/mlink/index.html
^ “DDFLink” , Lauschke Consulting, http://www.lauschkeconsulting.com/ddfplus.html
^ “GPIB Interface to Mathematica (GITM)” , (Mar 26, 2013), http://sourceforge.net/projects/gitm/
^ “BTopTools for Mathematica Extends Data Acquisition Capabilities to the Lab Environment” , Wolfram Research, Inc., (Oct. 7, 2008), http://www.wolfram.com/news/btoptools.html
^ Hu, Zhe, “Interfacing Hardware with Mathematica” , http://library.wolfram.com/infocenter/MathSource/6380/
^ Cousineau, Denis (Mar., 2013), “Controlling Robots Built with the LEGO® MINDSTORMS® NXT Brick” , The Mathematica Journal, http://www.mathematica-journal.com/2013/03/controlling-robots-built-with-the-lego-mindstorms-nxt-brick/
^ Wolfram, Stephen (Jan. 6, 2014), “Launching the Wolfram Connected Devices Project” , Wolfram Blog, http://blog.stephenwolfram.com/2014/01/launching-the-wolfram-connected-devices-project/
^ “Using Connected Devices” , Wolfram Language Guide , Wolfram Research, Inc., http://reference.wolfram.com/language/guide/UsingConnectedDevices.html
^ “Mathematica 10 の動作環境と利用できるプラットフォーム” , Wolfram Mathematica , Wolfram Research, Inc., http://www.wolfram.com/mathematica/system-requirements.html
^ Wolfram, Stephen (Nov. 21, 2013), “Putting the Wolfram Language (and Mathematica) on Every Raspberry Pi” , Wolfram Blog, http://blog.wolfram.com/2013/11/21/putting-the-wolfram-Language-and-mathematica-on-every-raspberry-pi/
^ “The Wolfram Language and Mathematica on Raspberry Pi, for Free” , Rapsberry Pi Blog, (Nov. 21, 2013), http://www.raspberrypi.org/archives/5282
^ “Wolfram to Bring World’s Most Sophisticated Programming Language to New Intel SD-Card-Sized Computer” , Wolfram Research, Inc., (Jan. 7, 2014), http://company.wolfram.com/news/2014/wolfram-language-on-intel-edison/
^ “Mathematica バージョン履歴” , Wolfram Mathematica , Wolfram Research, Inc., http://www.wolfram.com/products/mathematica/quickrevisionhistory.html
^ “How Do I Make My Mathematica Programs Run Faster?” , Mathematica HowTo , Wolfram Research, Inc., http://library.wolfram.com/howtos/faster/
^ “すべては式” , Mathematica チュートリアル , Wolfram Research, Inc., http://reference.wolfram.com/mathematica/tutorial/EverythingIsAnExpression.html
関連文献
和書
出版順に並べる。年、月、日が不明なものはそれぞれ明らかなものよりも前側に置くことにする。
スティーブン・ウルフラム:「Mathematica - A System for Doing Mathematics by Computer, Second Edition(日本語版)」、アジソン・ウエスレイ・パブリッシャーズ・ジャパン、ISBN 4795296146 (1992年)。
S. スキエナ, 植野 義明 (訳):「Mathematica組み合わせ論とグラフ理論―離散数学を実現する」 (アジソン ウェスレイ・トッパン情報科学シリーズ)、トッパン、ISBN 978-4810180503 (1992年7月)。
小野裕幸:「Mathematica DSPと制御」トッパン、ISBN 978-4810185492 (1992年10月20日)
T.W. グレイ、J. グリン:「Mathematicaビギナーズガイド」 (アジソン ウェスレイ・トッパン情報科学シリーズ)、トッパン、ISBN 978-4810180565 (1992年11月)。
D.C.M. バーバラ、C.T.J. ドッドソン:「Mathematica微積分入門」 (プレンティスホール) 、トッパン、ISBN 978-4810185584 (1993年4月)。
守谷 良二:「Mathematicaで数学を〈線形代数編〉」、海文堂出版、ISBN 978-4303728007 (1993年9月)。
ディミトリ・D. ヴィーデンスキー:「Mathematica偏微分方程式」 (アジソン ウェスレイ・トッパン情報科学シリーズ) 、トッパン、ISBN 978-4810180695 (1994年3月)。
T.W. グレイ、J. グリン:「Mathematica数学の探索」 (アジソン ウェスレイ・トッパン情報科学シリーズ)、トッパン、ISBN 978-4810180459 (1994年5月)。
守谷良二:「Mathematicaで数学を―微積分編I」、海文堂出版、ISBN 978-4303727901 (1994年10月)。
N ブラックマン、新井 宏二 (訳), 松井 康範 (訳):「Mathematica事典」、トッパン、ISBN 978-4810189018 (1994年11月)。
R.J. ゲイロード、P.R. ウエリン、S.N. カーミン:「Mathematicaプログラミング」、近代科学社、ISBN 978-4764902282 (1994年12月)。
阿部寛:「Mathematicaでみる数理物理入門 II」、講談社、ISBN 978-4061532168 (1995年4月)。
Robert D. Skeel, Jerry B. Keiper, 玄 光男 (訳), 辻 陽一 (訳):「Mathematicaによる数値計算」、共立出版、ISBN 978-4320014886 (1995年4月10日)。
小林道正:「Mathematicaによる微積分」、朝倉書店、ISBN 978-4254110692 (1995年12月)。
A.グレイ, 武沢 護 (訳):「Mathematica 曲線と曲面の微分幾何」、トッパン、ISBN 978-4810189193 (1996年3月)。
和田昇:「線形・非線形力学とカオスへの入門―Mathematicaによる」、サイエンティスト社、ISBN 978-4914903299 (1996年4月)。
J.W.グレイ、時田 節 (訳), 武沢 護 (訳):「Mathematica 方法と応用」、サイエンティスト社、ISBN 978-4914903312 (1996年5月)。
S.ワゴン、長岡亮介(監訳):「Mathematicaで見える現代数学」、ブレーン出版、ISBN 4-89242-143-X (1996年5月10日、初版二刷)。
斎藤 兆古:「Mathematicaによるウェーブレット変換」、朝倉書店、ISBN 978-4254221398 (1996年9月)。
John S. Robertson, 下地 貞夫 (訳):「Mathematicaによる工科系数学」、共立出版、ISBN 978-4320015180 (1996年10月15日)。
白石修二:「例題で学ぶMathematica グラフィックス編」、森北出版、ISBN 978-4627838109 (1996年11月)。
片桐 重延、室岡 和彦:「Mathematicaによる離散数学入門」 (新・数学とコンピュータシリーズ) 、東京電機大学出版局、ISBN 978-4501526108 (1997年4月)。
上坂 吉則:「Mathematica数値数式プログラミング」、牧野書店、ISBN 978-4795201132 (1997年4月1日)。
リチャード・J ゲイロード、ポール・R. ウェリン :「MATHEMATICA複雑系のシミュレーション―物理学と生物学の探究」、シュプリンガー・フェアラーク東京、ISBN 978-4431707097 (1998年5月)。
斎藤 兆古:「Mathematicaによる 画像処理入門」、朝倉書店,ISBN 978-4254221428 (1998年6月1日)。
鈴木 真二:「力学入門」 (Mathematicaで学ぶシリーズ)、コロナ社、ISBN 978-4339077520 (1999年2月1日)。
田沢義彦:「曲線論・曲面論―Mathematicaで探索する古典微分幾何学」 (Computer in Education and Research) 、ピアソンエデュケーション、ISBN 978-4894711334 (1999年8月)。
ロバート・L. ジンマーマン、フレデリック・I. オルネス:「物理学のためのMathematica―古典力学から宇宙論まで」、ピアソンエデュケーション、ISBN 978-4894711624 (1999年12月)。
鈴木昱雄:「カオス入門」 (Mathematicaで学ぶシリーズ) 、コロナ社、ISBN 978-4339077537 (1999年12月1日)。
川瀬 宏海:「Mathematicaによる電磁気学」第2版、東京電機大学出版局、ISBN 978-4501108809 (2000年3月1日)。
小林道正:「Mathematica確率―基礎から確率微分方程式まで」 (Mathematica数学)、朝倉書店、ISBN 978-4254115222 (2000年4月)。
宮岡悦良:「Mathematica数学の道具箱〈下〉」改訂新版、ブレーン出版、ISBN 978-4892421747 (2000年7月)。
椎原 浩輔:「Mathematicaによる金融工学」、東京電機大学出版局、ISBN 978-4501618100 (2000年9月1日)。
木村広:「Mathematicaハンドブック」、秀和システム、ISBN 978-4798000503 (2000年12月14日)。
渋谷清雄、谷沢俊弘、藤井幸一:「Mathematica基礎からの演習」、サイエンティスト社、ISBN 978-4914903817 (2001年4月)。
古田孝之:「もっとMathematicaで数学を」、培風館、ISBN 978-4563003302 (2002年4月)。
大塚 道明:「試して分かる高校数学―Mathematicaでトライ!」、現代数学社、ISBN 978-4768702871 (2003年4月)。
日本Mathematicaユーザー会編:「入門Mathematica 【決定版】 Ver.7対応」、東京電機大学出版局、ISBN 978-4501546205 (2009年6月20日)。
榊原 進 『はやわかり Mathematica 第3版』 共立出版、2010年。ISBN 978-4320122482 。
榊原進:「はやわかりMathematica 第3版」、共立出版、ISBN 978-4320122482 (2010年3月24日)。
Sal Mangano (著), 松田 裕幸 (訳) :「Mathematicaクックブック」、オライリージャパン、ISBN 978-4873114835 (2011年4月25日)。
依田 潔, 日本シミュレーション学会 (編):「Mathematicaによる電磁界シミュレーション入門 - POD版」(計算電気・電子工学シリーズ) 、森北出版; POD版、ISBN 978-4627715295 (2012年2月24日)。
川平友規:「レクチャーズオンMathematica」、プレアデス出版、ISBN 978-4903814612 (2013年5月1日)。
小田部荘司:「学生が学ぶMathematica入門 (完全版)」、 Kindle版、Amazon Services International, Inc. ASIN: B00JRP6DZK (2014/4/17)。
野原 勉:「Mathematicaと微分方程式」 ,日新出版(実用数学全書)、ISBN 978-4817302489 (2014年3月30日)。
大川善邦:「Raspberry Pi Mathematicaプログラミング」、Kindle版、 Amazon Services International, Inc.、ASIN: B00M6G224S (2014/7/27)。
大川善邦:「RaspberryPiシニアのためのMathematica」、Kindle版、Amazon Services International, Inc.、ASIN: B00OK14826 (2014/10/15)。
大川 善邦:「RaspberryPi2でMathematicaプログラミング」、工学社 (I・O BOOKS)、 ISBN 978-4777519033 (2015年7月21日)。
中川栄一、勝明次郎:「Mathematicaへの誘い-今日から始める基礎と応用-」、成山堂書店、ISBN 978-4425651818 (2015年9月18日)。
宮岡 悦良:「数学の道具箱 Mathematica 基本編」、近代科学社、ISBN 978-4764905078 (2016年4月12日)。
C.ヘイスティング、K.ミッショー、M.モリソン:「ハンズ・オン・スタートMathematica® : Wolfram言語™によるプログラミング」、丸善、ISBN 978-4-621-30273-6 (2018年1月)。
C.ヘイスティング、K.ミッショー、M.モリソン:「ハンズ・オン・スタートMathematica®原書3版 : Wolfram言語™によるプログラミング」、丸善、ISBN 978-4-621-30867-7 (2023年11月)。
洋書
関連項目
外部リンク
低水準言語 高水準言語
1950年代 1960年代 1970年代 1980年代 1990年代 2000年代 2010年代
架空の言語