MATLAB

概要

MATLABは、MATrix LABoratoryを略したものであり、行列計算、ベクトル演算、グラフ化や3次元表示などの豊富なライブラリを持った、インタプリタ形式の高性能なテクニカルコンピューティング言語、環境としての機能を持つ。標準で数多くのライブラリを有しているが、それ以上のデータ解析や統計、アプリケーション展開などが必要な場合にはToolboxと呼ばれる拡張パッケージをインストールすることで、MATLABの機能拡張を図ることができる。MATLABとToolboxは総合してMATLABプロダクトファミリと呼ばれる。
MATLABを用いると、C言語やFORTRANといった従来のプログラミング言語よりも短時間で簡単に科学技術計算を行うことができる。類似フリーウェアにScilab、GNU Octave、FreeMatなどがある。
また、iPhone、iPod (iPod touch)、Androidで動作するアプリ「MATLAB Mobile」がある。Webブラウザで動作する「MATLAB Online」も提供されている。

歴史

"MATrix LABoratory"の略であるMATLABは、1970年代後半、後にニューメキシコ大学コンピュータ科学学科長となるクリーブ・モラーによって開発された。彼は、学生がFortranを学ぶことなくLINPACKやEISPACKにアクセスできるようにこのソフトを設計した。これはすぐに他の大学に広まってゆき、応用数学コミュニティの間で話題となった。エンジニアであるジョン・N・リトルが1983年にモラーを訪ねた際に、これを見せられてその商用的可能性に気づいた。彼らはMATLABをC言語で書き直し、開発を継続させるためにMathWorks社を1984年に設立した。これらの書き直されたライブラリは愛情を込めてJACKPACとして知られていた。MATLABは初めLittleの専門分野である制御工学で採用されたが、すぐに他の分野へと広まっていった。現在では、教育にも使用され、特に線形代数・数値線形代数や数値解析の講義に使用される。
MATLAB R2008a より、インストールの際に、インターネットを通じたライセンス認証を導入した。

日本での展開

1988年より、日本での販売展開はサイバネットシステム株式会社が代理店業務を行っていた。しかし、2009年7月1日から販売代理店業務がMathWorks Japan(MathWorks社の日本法人)に移管された。
毎年11月から12月にサイバネットシステムが「MATLAB EXPO」を開催していたが、上記の移管により、2009年からはMathWorks Japanがその開催を主催する。近年では会場として東京都港区台場地区のホテル グランパシフィック LE DAIBAにて開催されている。その規模はMATLABユーザカンファレンスとしては世界最大の規模を誇り、一日の来場者は2000人を超える。単一ツールとしてのカンファレンスとしても他に類を見ないほどの規模である。

構文

MATLABのMコード（もしくは単にm）は主に値指向である。JavaやC++といった静的型付けされる言語とは異なり、PHPやJavaScriptと同様に変数自体は型を持たず、実行時に代入される値のみが型を持つ。

変数

変数は代入演算子 '='で定義される。例として、
x = 17
はxという名の変数を定義すると同時に、その値に17という定数を代入した。型宣言はしていないがdouble型として扱われる。この例のような即値（数字で決め打ちされた定数）のほか、文字列定数、他の変数の値、または関数の出力を代入することができる。

ベクトル/行列

MATLABは "Matrix Laboratory"であるので、様々な次元の配列を作成するための多くの便利な方法を用意している。他のプログラミング言語では一次元の行列（1×N or N×1）を一般的に「配列」として表現し、N×M、N×M×L（N、M、Lは1より大きい）のような多次元行列は「配列の配列」、「配列の配列の配列」として扱うが、MATLABでは区別なく「多次元配列」として表現するため、前者を特に「ベクトル」と呼び分けている（PascalやModula-2のように、多次元配列的表記をサポートする汎用言語もある）。
MATLABには簡単な配列を定義する単純な構文がある。始端:増加値:終端がそれである。例えば、
 array = 1:2:9
 
 array = 
 1 3 5 7 9
はarrayという名の変数を定義し、これは1、3、5、7、9という数値からなる配列である。すなわち、配列は1（始端値）から始まり、それぞれの値は1つ前の値より2（増加値）増加し、9（終端値）以下に到達した時点で終了する。次の例のような代入文により、既に存在する変数arrayの値を変更できる。要素数（配列のサイズ）も変更される。
 array = 1:3:9
 
 array = 
 1 4 7
増加値に1を使用する場合は、構文から（コロン1つとともに）省略することが出来る。
 ari = 1:5
 
 ari = 
 1 2 3 4 5
これは1、2、3、4、5という数値からなる配列である変数ariを定義する。これは、増加値に初期値である1が使用されたためである。

セミコロン

セミコロン（';'）はJavaやC++などとは違い、コマンドの終わりは改行するだけでよく、セミコロンをつける必要は無い。その代わり、セミコロンをつけると各行からの出力を抑えることが出来る。セミコロンを行末につけなければ、標準出力に実行結果が表示される。実行結果の表示の必要な複数のコマンドを、改行せずに表現する場合はカンマ（','）を使用する。
逆に、一つのコマンドを複数行にまたがって記述する場合は、次の行へ続くことを意味する（'...'）を行末に付ける必要がある。

オブジェクト指向プログラミング

MATLABは、オブジェクト指向プログラミングをサポートしている。しかし、シンタックスと呼出規約が他言語と大きく異なる。MATLABは、値参照と、参照クラスを用意しています。
メソッドを呼ぶ方法の一例です。
object.method();
object がクラスのインスタンスであれば、object　のメンバーを選択することで、メソッドを呼ぶことができます。
classdef hello
    methods        function greet(this)            disp('Hello!')
        end
    endend
hello.m 名のファイルを配置した後、次のコマンドを実行します。
>> x = hello;>> x.greet();Hello!

コード例

magic.mから引用した以下のコードは奇数値nの魔方陣Mを作成する。
 [J,I] = meshgrid(1:n);
 A = mod(I+J-(n+3)/2,n);
 B = mod(I+2*J-2,n);
 M = n*A + B + 1;
このコードは"for"ループを使用することなくベクトルや行列の操作を行っているということに注意するべきである。慣用的に、MATLAB言語はふつう配列全体を同時に処理する。上記MESHGRIDユーティリティ機能は以下のような配列を作成する。
J =

     1     2     3
     1     2     3
     1     2     3I =

     1     1     1
     2     2     2
     3     3     3
多くのスカラー関数は配列に使用することができ、配列の要素毎に並行して作用する。そのため、mod(2*J,n)は、配列 J に2をスカラー的に乗算（各要素を2倍）した後、要素毎に nの剰余を計算する。
MATLABには標準的な"for"や"while"が実装されているが、MATLABのベクトル式記法を使用する方がしばしばコードの可読性をあげ実行速度を速くする。