「MATLAB」の版間の差分

提供: miniwiki
移動先:案内検索
(1版 をインポートしました)
(内容を「{{テンプレート:20180815sk}} __NOINDEX__」で置換)
(タグ: Replaced)
 
1行目: 1行目:
{{Infobox Software
+
{{テンプレート:20180815sk}} __NOINDEX__
| name = MATLAB
 
| logo = [[ファイル:Matlab Logo.png|100px]]
 
| developer = [[The MathWorks]]
 
| latest_release_version = R2017b
 
| latest_release_date = {{release date|2017|9|21}}
 
| programming_language = [[C言語]], [[Java]]
 
| operating_system = [[Microsoft Windows]]<br/>[[macOS]]<br/>[[Linux]]<ref>http://www.mathworks.co.jp/products/matlab/requirements.html</ref><br/>[[iOS (アップル)|iOS]]<ref name="mobile"/><br />[[Android]]<ref name="mobile"/>
 
| genre = [[数値解析ソフトウェア]]
 
| license = [[プロプライエタリ]]
 
| website = [http://jp.mathworks.com/index.html MathWorks 日本]、[http://jp.mathworks.com/products/matlab/ MATLAB 製品ページ]
 
}}
 
'''MATLAB'''(マトラボ)は、[[アメリカ合衆国]]の[[MathWorks]]社が開発している[[数値解析]]ソフトウェアであり、その中で使う[[プログラミング言語]]の名称でもある。MATLABは、行列計算、関数とデータの可視化、アルゴリズム開発、グラフィカルインターフェイスや、他言語(C/C++/Java/Python)とのインターフェイスの機能を有している。MATLABは、主に、数値計算を扱う事ができるが、追加のオプション[http://jp.mathworks.com/products/symbolic/ Symbolic Math Toolbox]を使うことで、数式処理の能力を得ることができる。2004年で、MATLABは産業界、教育界において100万人ユーザーを達成しており、工学、理学、経済学など幅広い業種で利用されている。
 
 
 
== 概要 ==
 
MATLABは、'''MAT'''rix '''LAB'''oratoryを略したものであり、[[行列]]計算、[[ベクトル演算]]、[[グラフ (関数)|グラフ]]化や3次元表示などの豊富な[[ライブラリ]]を持った、インタプリタ形式の高性能なテクニカルコンピューティング言語、環境としての機能を持つ。標準で数多くのライブラリを有しているが、それ以上のデータ解析や統計、アプリケーション展開などが必要な場合には'''Toolbox'''と呼ばれる拡張パッケージをインストールすることで、MATLABの機能拡張を図ることができる。MATLABとToolboxは総合して'''MATLABプロダクトファミリ'''と呼ばれる。
 
 
 
MATLABを用いると、[[C言語]]や[[FORTRAN]]といった従来のプログラミング言語よりも短時間で簡単に科学技術計算を行うことができる。類似フリーウェアに[[Scilab]]、[[GNU Octave]]、[[FreeMat]]などがある。
 
 
 
また、[[iPhone]]、[[iPod]] ([[iPod touch]])、[[Android]]で動作するアプリ[http://jp.mathworks.com/products/matlab-mobile/ 「MATLAB Mobile」]がある。<ref name="mobile">{{Cite web |url = http://www.mathworks.com/mobile/ |title=MATLAB Mobile |publisher=Mathworks |language=英語 |archiveurl=<!--アーカイブURL--> |archivedate=<!--アーカイブ日付(archiveurl 指定時必須)--> |accessdate=2013-05-20 }}。</ref>Webブラウザで動作する[http://jp.mathworks.com/products/matlab-online/ 「MATLAB Online」]も提供されている。
 
 
 
== 歴史 ==
 
"MATrix LABoratory"の略であるMATLABは、1970年代後半、後に[[ニューメキシコ大学]]コンピュータ科学学科長となる{{仮リンク|クリーブ・モラー |en|Cleve Moler }}によって開発された。彼は、学生が[[Fortran]]を学ぶことなく[[LINPACK]]や[[EISPACK]]にアクセスできるようにこのソフトを設計した。これはすぐに他の大学に広まってゆき、[[応用数学]]コミュニティの間で話題となった。エンジニアである{{仮リンク|ジョン・N・リトル |en|John N. Little }}が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回定期的に行っている(2015年現在)。バージョン名の付け方は、3月もしくは4月のリリースは"西暦"+"a"、9月もしくは10月のリリースは"西暦"+"b"である<ref>[http://www.mathworks.co.jp/products/new_products/release_model.html MathWorks 製品リリース スケジュール]</ref>。
 
 
 
自分が使用しているMATLABプロダクトファミリーのバージョンを確かめる場合、コマンドウィンドウ上で「verコマンド」を使用すればよい。これによって、現在使用しているMATLABプロダクトファミリーのバージョン、ライセンスナンバー、簡単なパソコンの状況、インストールされているTooloxとBlocksetおよび[[Simulink]]の一覧とバージョンが表示される。
 
 
 
{|class="sortable wikitable"
 
|+ '''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
 
|
 
|2000
 
|-
 
!R12.1
 
|6.1
 
|
 
|2001
 
|-
 
!R13
 
|6.5
 
|
 
|2002
 
|-
 
!R13SP1
 
|6.5.1
 
|
 
| rowspan=2|2003
 
|-
 
!R13SP2
 
|6.5.2
 
|
 
|-
 
!R14
 
|7
 
|6.0
 
| rowspan=2|2004
 
|-
 
!R14SP1
 
|7.0.1
 
|6.1
 
|-
 
!R14SP2
 
|7.0.4
 
|6.2
 
| rowspan=2|2005
 
|-
 
!R14SP3
 
|7.1
 
|6.3
 
|-
 
!R2006a
 
|7.2
 
|6.4
 
| rowspan=2|2006
 
|-
 
!R2006b
 
|7.3
 
|6.5
 
|-
 
!R2007a
 
|7.4
 
|6.6
 
| rowspan=2|2007
 
|-
 
!R2007b
 
|7.5
 
|7.0
 
|-
 
!R2008a
 
|7.6
 
|7.1
 
| rowspan=2|2008
 
|-
 
!R2008b
 
|7.7
 
|7.2
 
|-
 
!R2009a
 
|7.8
 
|7.3
 
| rowspan=2|2009
 
|-
 
!R2009b
 
|7.9
 
|7.4
 
|-
 
!R2010a
 
|7.10
 
|7.5
 
| rowspan=2|2010
 
|-
 
!R2010b
 
|7.11
 
|7.6
 
|-
 
!R2011a
 
|7.12
 
|7.7
 
| rowspan=2|2011
 
|-
 
!R2011b
 
|7.13
 
|7.8
 
|-
 
!R2012a
 
|7.14
 
|7.9
 
|rowspan=2|2012
 
|-
 
!R2012b
 
|8.0
 
|8.0
 
|-
 
!R2013a
 
|8.1
 
|8.1
 
|rowspan=2|2013
 
|-
 
!R2013b
 
|8.2
 
|8.2
 
|-
 
!R2014a
 
|8.3
 
|8.3
 
|rowspan=2|2014
 
|-
 
!R2014b
 
|8.4
 
|8.4
 
|-
 
!R2015a
 
|8.5
 
|8.5
 
|rowspan=2|2015
 
|-
 
!R2015b
 
|8.6
 
|8.6
 
|-
 
!R2016a
 
|9.0
 
|8.7
 
| rowspan="2" |2016
 
|-
 
!R2016b
 
|9.1
 
|8.8
 
|-
 
!R2017a
 
|9.2
 
|8.9
 
| rowspan="2" |2017
 
|-
 
!R2017b
 
|9.3
 
|9.0
 
|}
 
 
 
== 構文 ==
 
MATLABのMコード(もしくは単に''m'')は主に値指向である。[[Java]]や[[C++]]といった静的型付けされる言語とは異なり、[[PHP (プログラミング言語)|PHP]]や[[JavaScript]]と同様に変数自体は型を持たず、実行時に代入される値のみが型を持つ。
 
 
 
=== 変数 ===
 
変数は代入演算子 '='で定義される。例として、
 
<source lang="matlab">
 
x = 17
 
</source>
 
は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には簡単な配列を定義する単純な構文がある。''始端''<code>:</code>''増加値''<code>:</code>''終端''がそれである。例えば、
 
<source lang="matlab">
 
array = 1:2:9
 
 
array =
 
1 3 5 7 9
 
</source>
 
は<code>array</code>という名の変数を定義し、これは1、3、5、7、9という数値からなる配列である。すなわち、配列は1(''始端''値)から始まり、それぞれの値は1つ前の値より2(''増加''値)増加し、9(''終端''値)以下に到達した時点で終了する。次の例のような代入文により、既に存在する変数<code>array</code>の値を変更できる。要素数(配列のサイズ)も変更される。
 
<source lang="matlab">
 
array = 1:3:9
 
 
array =
 
1 4 7
 
</source>
 
''増加''値に1を使用する場合は、構文から(コロン1つとともに)省略することが出来る。
 
<source lang="matlab">
 
ari = 1:5
 
 
ari =
 
1 2 3 4 5
 
</source>
 
これは1、2、3、4、5という数値からなる配列である変数<code>ari</code>を定義する。これは、増加値に初期値である1が使用されたためである。
 
 
 
=== セミコロン ===
 
セミコロン(';')はJavaやC++などとは違い、コマンドの終わりは改行するだけでよく、セミコロンをつける必要は'''無い'''。その代わり、セミコロンをつけると各行からの出力を抑えることが出来る。セミコロンを行末につけなければ、標準出力に実行結果が表示される。実行結果の表示の必要な複数のコマンドを、改行せずに表現する場合はカンマ(',')を使用する。
 
 
 
逆に、一つのコマンドを複数行にまたがって記述する場合は、次の行へ続くことを意味する('...')を行末に付ける必要がある。
 
 
 
=== オブジェクト指向プログラミング ===
 
MATLABは、オブジェクト指向プログラミングをサポートしている。しかし、シンタックスと呼出規約が他言語と大きく異なる。MATLABは、値参照と、参照クラスを用意しています。
 
メソッドを呼ぶ方法の一例です。
 
<source lang="matlab">
 
object.method();
 
</source>
 
object がクラスのインスタンスであれば、object のメンバーを選択することで、メソッドを呼ぶことができます。
 
<source lang="matlab">
 
classdef hello
 
    methods
 
        function greet(this)
 
            disp('Hello!')
 
        end
 
    end
 
end
 
</source>
 
hello.m 名のファイルを配置した後、次のコマンドを実行します。
 
<source lang="matlab">
 
>> x = hello;
 
>> x.greet();
 
Hello!
 
</source>
 
 
 
== コード例 ==
 
''magic.m''から引用した以下のコードは奇数値''n''の[[魔方陣]]''M''を作成する。
 
 
 
<source lang="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;
 
</source>
 
このコードは"for"ループを使用することなくベクトルや行列の操作を行っているということに注意するべきである。慣用的に、MATLAB言語はふつう配列全体を同時に処理する。上記MESHGRIDユーティリティ機能は以下のような配列を作成する。
 
 
 
<source lang="matlab">
 
J =
 
 
 
    1    2    3
 
    1    2    3
 
    1    2    3
 
 
 
I =
 
 
 
    1    1    1
 
    2    2    2
 
    3    3    3
 
</source>
 
 
 
多くの[[スカラー]]関数は配列に使用することができ、配列の要素毎に並行して作用する。そのため、mod(2*J,n)は、配列 J に2をスカラー的に乗算(各要素を2倍)した後、要素毎に ''n''の剰余を計算する。
 
 
 
MATLABには標準的な"for"や"while"が実装されているが、MATLABのベクトル式記法を使用する方がしばしばコードの可読性をあげ実行速度を速くする。
 
 
 
== 批判 ==
 
MATLAB自体はMathWorks社の[[プロプライエタリ・ソフトウェア|プロプライエタリ]]な製品である。[[C言語|C]]や[[FORTRAN]]といった一般的なプログラミング言語と違い、MATLAB言語は[[ANSI]]のようなサードパーティの標準化組織によって管理されていない。完全な互換性や最新版のMATLABを得るためには、製品を購入する必要がある。いくつかのプログラムではMATLABプログラミング言語の大部分を実行することが可能だが、100%の互換性を持つものや様々な分野別のツールを含むものはない。結果的に、MATLABの利用者は[[ベンダーロックイン|ベンダの囲い込み]]に属することとなる。
 
 
 
MATLABは元々はFORTRANにより実行され、後にCで書き直された。この二つの言語の性格を受け継いでいるため、時として常軌を逸した構文を生み出すことになる。CでもFORTRANでもどちらでもなく、それら2つを混ぜ合わせたものである。この混合構文は解釈の問題を引き起こす可能性がある。例えば、
 
 
 
<source lang="matlab">
 
y = f(x)
 
</source>
 
 
 
は、引数xを持つ関数fと、行列fの[[索引|インデックスx]]の要素(x番目の要素)のどちらをも表す。この曖昧な構文は手続きとテーブル検索の切り替えを容易にし、どちらも数学的機能と一致するが、元の意図を汲むためには注意深くコードを読む必要がある。似たような問題が演算子 *と 'の扱いを複雑なものにしている。
 
 
 
他にも[[データ型]]が存在しない訳ではないが、デフォルトはdouble型の行列である。これは単に数の配列にすぎず、工学的な単位や[[サンプリング周波数]]といった実用データとして要求される属性を欠いている。SP3には時間系列オブジェクトとして日時のマーカが加えられたが、サンプリング周波数情報の欠如は、一定周期でデータを標本化することが一般的な信号処理アプリケーションとしては大きな欠点となる。これらの属性は利用者が自分でプログラムを書いて管理しなければならず、失敗の原因となり、時間をとる。
 
 
 
MATLABの行列型におけるもう一つの批判は、各次元のインデックスが'''常に1から始まる'''ように決め打ちされている点についてである。このため、文献から得た通常の概念をそのまま利用することができず、非標準的な方法に再定義しないといけない。よくある例は[[離散フーリエ変換]](DFT)である。通常、次のように定義される。
 
 
 
{{indent|<math>X_k = \sum_{n=0}^{N-1} x_n e^{-\frac{2 \pi i}{N} k n} \quad \quad k = 0, \dots, N-1</math>}}
 
 
 
また、逆変換(IDFT)は、
 
 
 
{{indent|<math>x_n = \frac{1}{N} \sum_{k=0}^{N-1} X_k e^{\frac{2\pi i}{N} k n} \quad \quad n = 0,\dots,N-1</math>.}}
 
 
 
MATLABではインデックスを0にすることも負にすることもできないので、MATLABではそれぞれを次のように定義することになる。
 
 
 
{{indent|<math>X_k = \sum_{n=1}^{N} x_n e^{-\frac{2 \pi i}{N}(k-1)(n-1)} \quad \quad k = 1, \dots, N</math>}}
 
 
 
{{indent|<math>x_n = \frac{1}{N} \sum_{k=1}^{N} X_k e^{\frac{2\pi i}{N}(k-1)(n-1)} \quad \quad n = 1, \dots, N</math>.}}
 
 
 
MATLABでは負のインデックスが許されないので、非因果的な系([[インパルス応答]]が負の時刻において0以外の値をとる)を分かりやすくモデル化することができない。MATLABの最も一般的な単独のアプリケーションは[[デジタル信号処理]]であろうが、これら二つの制約によって、MATLABはその分野のアルゴリズムを記述するためには魅力ある選択肢とは言いにくい。
 
 
 
MATLABは[[手続き型言語]]の一つであるから(ある程度オブジェクト指向も取り入れられている)、入力の変化に伴って変数の値が自動的に更新されることはない。ところがシミュレーションや探索的データ解析ではこの機能が要求されている。例えば次のようなプログラムの断片を考えてみる。
 
 
 
<source lang="matlab">
 
t = 1:100;
 
y = log(t);
 
</source>
 
 
 
もし変数tが t = 100:1000 のように変更されたとしたら、新しい結果を得るためにyを再計算しなければならない。MathWorks はシステムのモデル化やシミュレーションにおいてこれらの作業の一部を自動化する追加パッケージ[[Simulink]]を提案している。
 
 
 
MATLAB は[[参照 (情報工学)|参照]]を持たないため、オープン[[ハッシュテーブル]]、[[線形リスト]]、[[木構造 (データ構造)|木構造]]やその他計算機科学で一般的に用いられる[[間接参照]]を含むデータ構造を実装するのは困難である。さらにこれは、オブジェクトの使用が煩わしいものにしている原因でもある。 オブジェクトに変化がある度に、現在のオブジェクトを変えるのではなく新たなオブジェクトが生成されてしまう(this や self は[[コピーオンライト]]である)。オブジェクトのプロパティを変更する唯一の方法は、古いオブジェクトを新しいオブジェクトで上書きすることである。すなわち、他のオブジェクト指向言語で
 
 
 
obj.do_something();
 
 
 
とするようなところを、
 
 
 
<source lang="matlab">
 
obj = do_something(obj);
 
</source>
 
と書かなければならない。
 
 
 
いくつかの競合ソフトウェアも出現しているが、これらの短所にも関わらず、MATLAB は依然多くの科学技術計算で用いられている。
 
 
 
== 脚注 ==
 
{{脚注ヘルプ}}
 
{{Reflist}}
 
<!-- == 参考文献 == {{Cite book}}、{{Cite journal}} -->
 
 
 
== 関連項目 ==
 
{{Commonscat|MATLAB}}
 
* [[数値解析]]
 
* [[数値解析ソフトウェア]]
 
* Toolboxesとその他のアドオン
 
** [[Simulink]]
 
** [[Psychtoolbox]]
 
** [[NAG]]
 
* [[NVIDIA]]
 
** [[CUDA]] - R2010bより、オプション製品 Parallel Computing Toolbox が直接サポートを提供している。
 
** [[NVIDIA Tesla]]
 
* 類似のソフトウェア
 
** [[FreeMat]]
 
** [[GNU Octave]]
 
** [[Scilab]]
 
** [[Julia_(プログラミング言語)|Julia]]
 
==参考文献==
 
* 大石進一、MATLABによる数値計算、培風館、2001年。
 
== 外部リンク == <!-- {{Cite web}} -->
 
* [http://www.mathworks.co.jp/products/matlab/ MathWorks社の日本語MATLAB製品ページ]
 
* [http://www.mathworks.co.jp/products/matlab/object_oriented_programming.html MATLABのオブジェクト指向プログラミング]
 
* [http://www.mathworks.co.jp/academia/student_version/ MATLAB & Simulink Student Version (日本語版) 製品ページ]
 
* [http://www.mathworks.co.jp/matlabcentral/ MATLAB Central(MATLABユーザコミュニティ)]
 
* [http://www.mathworks.co.jp/programs/techkits/technical_literature_conf.html MathWorks社の日本語技術資料ライブラリ]
 
* [http://www.mathworks.co.jp/access/helpdesk_ja_JP/help/helpdesk.html MathWorks社の日本語マニュアル]
 
* [http://www.mathworks.co.jp/access/helpdesk_archive_ja_JP/japanDocArchives.html MathWorks社の日本語マニュアルのアーカイブ]
 
* [http://www.mathworks.co.jp/support/books/ MATLAB/Simulink関連日本語書籍一覧]
 
* [http://www.mathworks.co.jp/support/ MathWorks社の日本語サポートページ (日本語技術ヘルプは「リソースを探す>製品を選ぶ」)]
 
* [http://www.mathworks.co.jp/support/install.html  MathWorks社の日本語アクティベーション、インストール、およびスタートアップのトラブルシューティング]
 
* [http://dmoz.org/Science/Math/Software/MATLAB/ Open Directory ProjectのMATLABカテゴリ]
 
* [http://www.mathworks.com/company/newsletters/news_notes/clevescorner/ Cleve Molerによって書かれた、MATLABの歴史に関する追加の情報]
 
* [http://www.matlabexpo.com/jp/ MATLAB EXPO JAPAN]
 
* [news://comp.soft-sys.matlab comp.soft-sys.matlab]
 
* [http://en.literateprograms.org/Category:Programming_language:Matlab literateprograms.orgのMATLAB]
 
* [https://sites.google.com/site/freematjapan/ Freematを使おう!]
 
 
 
{{Software-stub}}
 
 
 
{{Numerical analysis software}}
 
{{Image processing software}}
 
{{Linear algebra}}
 
 
 
[[Category:数値解析ソフトウェア]]
 
[[Category:Linux向け数値解析ソフトウェア]]
 
[[Category:Linux向け数式処理システム]]
 
[[Category:プログラミング言語]]
 
[[Category:iOSのソフトウェア]]
 
[[Category:数学に関する記事|MATLABまつとらふ]]
 

2019/5/10/ (金) 10:10時点における最新版



楽天市場検索: