MATLAB

**MATLAB**（マットラブ、マトラブ、マトラボ）は、アメリカ合衆国のMathWorks社が開発する数値解析ソフトウェアであり、その中でソフトウェア内で使用されるプログラミング言語の名称でもある。MATLABは、数値線形代数、関数とデータの可視化、アルゴリズム開発、グラフィカルインターフェイスや、他言語（C言語/C++/Java/Python）とのインターフェイスの機能を有している。MATLABは、主に、数値計算を扱う事ができるが、追加のオプションSymbolic Math Toolboxを使うことで、数式処理の能力を得ることができる。2019年時点でMATLABのユーザー数は400万人を超えており、100,000以上の企業・政府・大学で、工学・理学・経済学など幅広い分野に利用されている。

MATLABは、「」を略したものであり、行列計算、ベクトル演算、グラフ化や3次元表示などの豊富なライブラリを持った、インタプリタ形式の高性能なテクニカルコンピューティング言語、環境としての機能を持つ。標準で数多くのライブラリを有しているが、それ以上のデータ解析や統計、アプリケーション展開などが必要な場合には**Toolbox**と呼ばれる拡張パッケージをインストールすることで、MATLABの機能拡張を図ることができる。MATLABとToolboxは総合して**MATLAB製品ファミリ**と呼ばれる。

MATLABを用いると、C言語やFORTRANといった従来のプログラミング言語よりも短時間で簡単に科学技術計算を行うことができる。類似フリーウェアにScilab、GNU Octave、FreeMatなどがある。

また、iPhone、iPod (iPod touch)、Androidで動作するアプリ「MATLAB Mobile」がある。Webブラウザで動作する「MATLAB Online」も提供されている。

MATLABで使われるデータ型には数値型や文字列型、時刻・日付、構造体、cell配列、テーブル、カテゴリカル配列などがある。数値型はint64型、single型、double型などに、文字列型はchar型やstring型にそれぞれ細分化される。

## 歴史
"MATrix LABoratory"の略であるMATLABは、1970年代後半、後にニューメキシコ大学コンピュータ科学学科長となるクリーブ・モラーによって開発された。彼は、学生がFortranを学ぶことなくLINPACKやEISPACKにアクセスできるようにこのソフトを設計した。これはすぐに他の大学に広まってゆき、応用数学コミュニティの間で話題となった。エンジニアであるが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人を超える。単一ツールとしてのカンファレンスとしても他に類を見ないほどの規模である。

### バージョン
R2006a以降、MathWorks社は、MATLABプロダクトファミリーのリリースを3月と9月の年2回定期的に行っている（2022年現在）。バージョン名の付け方は、3月もしくは4月のリリースは"西暦"+"a"、9月もしくは10月のリリースは"西暦"+"b"である。

自分が使用しているMATLABプロダクトファミリーのバージョンを確かめる場合、コマンドウィンドウ上で「verコマンド」を使用すればよい。これによって、現在使用しているMATLABプロダクトファミリーのバージョン、ライセンスナンバー、簡単なパソコンの状況、インストールされているTooloxとBlocksetおよびSimulinkの一覧とバージョンが表示される。

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

### 変数
変数は代入演算子 '='で定義される。例として、

```matlab
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には簡単な配列を定義する単純な構文がある。*始端*`:`*増加値*`:`*終端*がそれである。例えば、

```matlab
array = 1:2:9
 
 array = 
 1 3 5 7 9
```

は`array`という名の変数を定義し、これは1、3、5、7、9という数値からなる配列である。すなわち、配列は1（*始端*値）から始まり、それぞれの値は1つ前の値より2（*増加*値）増加し、9（*終端*値）以下に到達した時点で終了する。次の例のような代入文により、既に存在する変数`array`の値を変更できる。要素数（配列のサイズ）も変更される。

```matlab
array = 1:3:9
 
 array = 
 1 4 7
```

*増加*値に1を使用する場合は、構文から（コロン1つとともに）省略することが出来る。

```matlab
ari = 1:5
 
 ari = 
 1 2 3 4 5
```

これは1、2、3、4、5という数値からなる配列である変数`ari`を定義する。これは、増加値に初期値である1が使用されたためである。

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

逆に、一つのコマンドを複数行にまたがって記述する場合は、次の行へ続くことを意味する（'...'）を行末に付ける必要がある。

### オブジェクト指向プログラミング
MATLABは、オブジェクト指向プログラミングをサポートしている。しかし、シンタックスと呼出規約が他言語と大きく異なる。MATLABは、値参照と、参照クラスを用意している。
メソッドを呼ぶ方法の一例は以下である。

```matlab
object.method();
```

object がクラスのインスタンスであれば、object　のメンバーを選択することで、メソッドを呼ぶことができる。

```matlab
classdef hello
    methods
        function greet(this)
            disp('Hello!')
        end
    end
end
```

hello.m 名のファイルを配置した後、次のコマンドを実行する。

```matlab
>> x = hello;
>> x.greet();
Hello!
```


## コード例
*magic.m*から引用した以下のコードは奇数値*n*の魔方陣*M*を作成する。


```matlab
[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ユーティリティ機能は以下のような配列を作成する。


```matlab
J =

     1     2     3
     1     2     3
     1     2     3

I =

     1     1     1
     2     2     2
     3     3     3
```


多くのスカラー関数は配列に使用することができ、配列の要素毎に並行して作用する。そのため、mod(2*J,n)は、配列 J に2をスカラー的に乗算（各要素を2倍）した後、要素毎に *n*の剰余を計算する。

MATLABには標準的な"for"や"while"が実装されているが、MATLABのベクトル式記法を使用する方がしばしばコードの可読性をあげ実行速度を速くする。

## 脚注
### 注釈

### 出典

## 関連項目
* 数値解析
** 数値線形代数
** 数値解析ソフトウェア
** 数値解析ソフトの比較
** 数値解析の項目一覧
* Toolboxesとその他のアドオン
** Simulink
** Psychtoolbox
** NAG
* NVIDIA
** CUDA - R2010bより、オプション製品 Parallel Computing Toolbox が直接サポートを提供している。
** NVIDIA Tesla
* 類似のソフトウェア
** FreeMat
** GNU Octave
** Scilab
** Julia
* INTLAB (Matlabで開発された区間演算ライブラリ)

## 参考文献
### 和書
* 芦野隆一、Rémi Vaillancourt：「はやわかりMATLAB」、共立出版、ISBN 4-320-02875-9 (1997年7月10日).
* 大石進一：「MATLABによる数値計算」、培風館、(2001年).
* 桜井鉄也：「MATLAB/Scilab で理解する数値計算」、東京大学出版会 (2003年).
* 奥野貴俊、中島弘史：「MATLABではじめるプログラミング教室（改訂版）」、コロナ社、ISBN 978-4-339-02950-5 (2025年4月10日).

### 洋書
* Gander, W., & Hrebicek, J. (Eds.). (2011). Solving problems in scientific computing using Maple and Matlab®. :en:Springer Science & Business Media.
* Quarteroni, A., Saleri, F., & Gervasio, P. (2006). Scientific computing with MATLAB and Octave. Berlin: Springer.
* Wallisch, P., Lusignan, M. E., Benayoun, M. D., Baker, T. I., Dickey, A. S., & Hatsopoulos, N. G. (2014). MATLAB for neuroscientists: an introduction to scientific computing in MATLAB. :en:Academic Press.
* Gander, W., Gander, M. J., & Kwok, F. (2014). Scientific computing-An introduction using Maple and MATLAB. :en:Springer Science & Business Media.
* Linz, P., & Wang, R. (2003). Exploring numerical methods: An introduction to scientific computing using MATLAB. Jones & Bartlett Learning.

## 外部リンク

* MathWorks社の日本語MATLAB製品ページ
* MATLABのオブジェクト指向プログラミング
* MATLAB & Simulink Student Version (日本語版) 製品ページ
* MATLAB Central（MATLABユーザコミュニティ）
* MathWorks社の日本語技術資料ライブラリ
* MathWorks社の日本語マニュアル
* MathWorks社の日本語マニュアルのアーカイブ
* MATLAB/Simulink関連日本語書籍一覧
* MathWorks社の日本語サポートページ (日本語技術ヘルプは「リソースを探す>製品を選ぶ」)
*  MathWorks社の日本語アクティベーション、インストール、およびスタートアップのトラブルシューティング
* Open Directory ProjectのMATLABカテゴリ
* Cleve Molerによって書かれた、MATLABの歴史に関する追加の情報
* MATLAB EXPO JAPAN
* [news://comp.soft-sys.matlab comp.soft-sys.matlab]
* literateprograms.orgのMATLAB
* Freematを使おう！