MATLAB

MATLAB (プログラミング言語)
MATLAB (プログラミング言語)
MATLAB (プログラミング言語)のロゴ
パラダイム マルチパラダイム: 関数型, 命令型手続き型オブジェクト指向配列型英語版
登場時期
  • 1984年 ウィキデータを編集
開発者 The MathWorksクリーブ・モラー ウィキデータを編集
最新リリース R2024b / 2024年9月12日[1]
型付け 動的弱い
影響を受けた言語
影響を与えた言語
プラットフォーム Microsoft WindowsmacOSLinux ウィキデータを編集
ライセンス プロプライエタリ・ライセンス ウィキデータを編集
ウェブサイト mathworks.com
拡張子 .m, .p,[10] .mex*,[11] .mat,[12] .fig,[13] .mlx,[14] .mlapp,[15] .mltbx,[16] .mlappinstall,[17] .mlpkginstall[18]
テンプレートを表示
MATLAB
L-shaped membrane のロゴ[19]
開発元 The MathWorks
最新版
R2023b / 2023年9月19日 (15か月前) (2023-09-19)
プログラミング
言語
C言語, Java
対応OS Microsoft Windows[20]
macOS[21]
Linux[22]
iOS[23]
Android[23]
種別 数値解析ソフトウェア
ライセンス プロプライエタリ
公式サイト MathWorks 日本MATLAB 製品ページ
テンプレートを表示

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

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

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

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

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

歴史

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

バージョン

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

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

MATLABプロダクトファミリー バージョン
リリース名 MATLAB本体 Simulink Stateflow
Volume 8 5.0 1996
Volume 9 5.1 1997
R9.1 5.1.1 1997
R10 5.2 1998
R10.1 5.2.1 1998
R11 5.3 1999
R11.1 5.3.1 1999
R12 6.0 Simulink 4.0 Stateflow 4.0 2000
R12.1 6.1 Simulink 4.1 Stateflow 4.1 2001
R13 6.5 Simulink 5.0.2 Stateflow 5.1 2002
R13SP1 6.5.1 Simulink 5.1 Stateflow 5.1.1 2003
R13SP2 6.5.2 Simulink 5.2 Stateflow 5.1.2
R14 7 Simulink 6.0 Stateflow 6.0 2004
R14SP1 7.0.1 Simulink 6.1 Stateflow 6.1
R14SP2 7.0.4 Simulink 6.2 Stateflow 6.2 2005
R14SP3 7.1 Simulink 6.3 Stateflow 6.3
R2006a 7.2 Simulink 6.4 Stateflow 6.4 2006
R2006b 7.3 Simulink 6.5 Stateflow 6.5
R2007a 7.4 Simulink 6.6 Stateflow 6.6 2007
R2007b 7.5 Simulink 7.0 Stateflow 7.0
R2008a 7.6 Simulink 7.1 Stateflow 7.1 2008
R2008b 7.7 Simulink 7.2 Stateflow 7.2
R2009a 7.8 Simulink 7.3 Stateflow 7.3 2009
R2009b 7.9 Simulink 7.4 Stateflow 7.4
R2010a 7.10 Simulink 7.5 Stateflow 7.5 2010
R2010b 7.11 Simulink 7.6 Stateflow 7.6
R2011a 7.12 Simulink 7.7 Stateflow 7.7 2011
R2011b 7.13 Simulink 7.8 Stateflow 7.8
R2012a 7.14 Simulink 7.9 Stateflow 7.9 2012
R2012b 8.0 Simulink 8.0 Stateflow 8.0
R2013a 8.1 Simulink 8.1 Stateflow 8.1 2013
R2013b 8.2 Simulink 8.2 Stateflow 8.2
R2014a 8.3 Simulink 8.3 Stateflow 8.3 2014
R2014b 8.4 Simulink 8.4 Stateflow 8.4
R2015a 8.5 Simulink 8.5 Stateflow 8.5 2015
R2015b 8.6 Simulink 8.6 Stateflow 8.6
R2016a 9.0 Simulink 8.7 Stateflow 8.7 2016
R2016b 9.1 Simulink 8.8 Stateflow 8.8
R2017a 9.2 Simulink 8.9 Stateflow 8.9 2017
R2017b 9.3 Simulink 9.0 Stateflow 9.0
R2018a 9.4 Simulink 9.1 Stateflow 9.1 2018
R2018b 9.5 Simulink 9.2 Stateflow 9.2
R2019a 9.6 Simulink 9.3 Stateflow 10.0 2019
R2019b 9.7 Simulink 10.0 Stateflow 10.1
R2020a 9.8 Simulink 10.1 Stateflow 10.2 2020
R2020b 9.9 Simulink 10.2 Stateflow 10.3
R2021a 9.10 Simulink 10.3 Stateflow 10.4 2021
R2021b 9.11 Simulink 10.4 Stateflow 10.5
R2022a 9.12.0 Simulink 10.5 Stateflow 10.6 2022
R2022b 9.13 Simulink 10.6 Stateflow 10.7
R2023a 9.14.0 Simulink 10.7 Stateflow 10.8 2023

構文

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

変数

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

x = 17

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

ベクトル/行列

MATLABは "Matrix Laboratory"であるので、様々な次元の配列を作成するための多くの便利な方法を用意している。他のプログラミング言語では一次元の行列(1×N or N×1)を一般的に「配列」として表現し、N×MN×M×LNMLは1より大きい)のような多次元行列は「配列の配列」、「配列の配列の配列」として扱うが、MATLABでは区別なく「多次元配列」として表現するため、前者を特に「ベクトル」と呼び分けている(PascalModula-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
    end
end

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     3

I =

     1     1     1
     2     2     2
     3     3     3

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

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

脚注

注釈

  1. ^ シングルクオテーションで囲まれた単語はchar型に、ダブルクオテーションで囲まれた単語はstringとなる。ダブルクオテーションの使用はR2017aから導入された。

出典

  1. ^ 出典URL: https://www.mathworks.com/company/newsroom/mathworks-announces-release-2024b-of-matlab-and-simulink.html, 閲覧日: 2024年9月15日, 題名: MathWorks Announces Release 2024b of MATLAB and Simulink
  2. ^ An interview with CLEVE MOLER Conducted by Thomas Haigh On 8 and 9 March, 2004 Santa Barbara, California”. Computer History Museum. December 27, 2014時点のオリジナルよりアーカイブ。December 6, 2016閲覧。 “So APL, Speakeasy, LINPACK, EISPACK, and PL0 were the predecessors to MATLAB.”
  3. ^ Why We Created Julia”. Julia Language (February 14, 2012). December 1, 2016閲覧。
  4. ^ Eaton, John W. (May 21, 2001). “Octave: Past, Present, and Future”. Texas-Wisconsin Modeling and Control Consortium. August 9, 2017時点のオリジナルよりアーカイブ。December 1, 2016閲覧。
  5. ^ History”. Scilab. December 1, 2016時点のオリジナルよりアーカイブ。December 1, 2016閲覧。
  6. ^ S.M. Rump: INTLAB – INTerval LABoratory. In Tibor Csendes, editor, Developments in Reliable Computing, pages 77–104. Kluwer Academic Publishers, Dordrecht, 1999.
  7. ^ Moore, R. E., Kearfott, R. B., & Cloud, M. J. (2009). Introduction to Interval Analysis. Society for Industrial and Applied Mathematics.
  8. ^ Rump, S. M. (2010). Verification methods: Rigorous results using floating-point arithmetic. Acta Numerica, 19, 287–449.
  9. ^ Hargreaves, G. I. (2002). Interval analysis in MATLAB. Numerical Algorithms, (2009.1).
  10. ^ Protect Your Source Code”. MathWorks. November 1, 2019閲覧。
  11. ^ MEX Platform Compatibility”. MathWorks. November 1, 2019閲覧。
  12. ^ MAT-File Versions”. MathWorks. November 1, 2019閲覧。
  13. ^ Save Figure to Reopen in MATLAB Later”. MathWorks. November 1, 2019閲覧。
  14. ^ Live Code File Format (.mlx)”. MathWorks. November 1, 2019閲覧。
  15. ^ MATLAB App Designer”. MathWorks. November 1, 2019閲覧。
  16. ^ Toolbox Distribution”. MathWorks. November 1, 2019閲覧。
  17. ^ MATLAB App Installer File”. MathWorks. November 1, 2019閲覧。
  18. ^ Support Package Installation”. MathWorks. November 1, 2019閲覧。
  19. ^ The L-Shaped Membrane”. MathWorks (2003年). February 7, 2014閲覧。
  20. ^ https://jp.mathworks.com/support/requirements/matlab-system-requirements.html
  21. ^ https://jp.mathworks.com/support/requirements/matlab-mac.html
  22. ^ https://jp.mathworks.com/support/requirements/matlab-linux.html
  23. ^ a b c MATLAB Mobile” (英語). Mathworks. 2013年5月20日閲覧。
  24. ^ MATLABは日本語でどのように発音しますか?”. jp.mathworks.com. 2023年3月23日閲覧。
  25. ^ 行列および配列 - MATLAB & Simulink - MathWorks 日本”. jp.mathworks.com. 2023年3月23日閲覧。
  26. ^ MathWorks - MATLAB/Simulink開発元”. jp.mathworks.com. 2023年3月23日閲覧。
  27. ^ MathWorks 製品リリース スケジュール

関連項目

参考文献

和書

洋書

  • 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.

外部リンク