コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

「MATLAB」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
編集の要約なし
Cewbot (会話 | 投稿記録)
m Bot作業依頼: sourceタグをsyntaxhighlightタグに置換 (Category:非推奨のsourceタグを使用しているページ) - log
256行目: 256行目:
=== 変数 ===
=== 変数 ===
変数は代入演算子 '='で定義される。例として、
変数は代入演算子 '='で定義される。例として、
<source lang="matlab">
<syntaxhighlight lang="matlab">
x = 17
x = 17
</syntaxhighlight>
</source>
はxという名の変数を定義すると同時に、その値に17という定数を代入した。型宣言はしていないが[[倍精度|double]]型として扱われる。この例のような即値(数字で決め打ちされた定数)のほか、文字列定数、他の変数の値、または関数の出力を代入することができる。
はxという名の変数を定義すると同時に、その値に17という定数を代入した。型宣言はしていないが[[倍精度|double]]型として扱われる。この例のような即値(数字で決め打ちされた定数)のほか、文字列定数、他の変数の値、または関数の出力を代入することができる。


265行目: 265行目:


MATLABには簡単な配列を定義する単純な構文がある。''始端''<code>:</code>''増加値''<code>:</code>''終端''がそれである。例えば、
MATLABには簡単な配列を定義する単純な構文がある。''始端''<code>:</code>''増加値''<code>:</code>''終端''がそれである。例えば、
<source lang="matlab">
<syntaxhighlight lang="matlab">
array = 1:2:9
array = 1:2:9
array =
array =
1 3 5 7 9
1 3 5 7 9
</syntaxhighlight>
</source>
は<code>array</code>という名の変数を定義し、これは1、3、5、7、9という数値からなる配列である。すなわち、配列は1(''始端''値)から始まり、それぞれの値は1つ前の値より2(''増加''値)増加し、9(''終端''値)以下に到達した時点で終了する。次の例のような代入文により、既に存在する変数<code>array</code>の値を変更できる。要素数(配列のサイズ)も変更される。
は<code>array</code>という名の変数を定義し、これは1、3、5、7、9という数値からなる配列である。すなわち、配列は1(''始端''値)から始まり、それぞれの値は1つ前の値より2(''増加''値)増加し、9(''終端''値)以下に到達した時点で終了する。次の例のような代入文により、既に存在する変数<code>array</code>の値を変更できる。要素数(配列のサイズ)も変更される。
<source lang="matlab">
<syntaxhighlight lang="matlab">
array = 1:3:9
array = 1:3:9
array =
array =
1 4 7
1 4 7
</syntaxhighlight>
</source>
''増加''値に1を使用する場合は、構文から(コロン1つとともに)省略することが出来る。
''増加''値に1を使用する場合は、構文から(コロン1つとともに)省略することが出来る。
<source lang="matlab">
<syntaxhighlight lang="matlab">
ari = 1:5
ari = 1:5
ari =
ari =
1 2 3 4 5
1 2 3 4 5
</syntaxhighlight>
</source>
これは1、2、3、4、5という数値からなる配列である変数<code>ari</code>を定義する。これは、増加値に初期値である1が使用されたためである。
これは1、2、3、4、5という数値からなる配列である変数<code>ari</code>を定義する。これは、増加値に初期値である1が使用されたためである。


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


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


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


<source lang="matlab">
<syntaxhighlight lang="matlab">
J =
J =


338行目: 338行目:
2 2 2
2 2 2
3 3 3
3 3 3
</syntaxhighlight>
</source>


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

2020年7月5日 (日) 22:42時点における版

MATLAB
開発元 The MathWorks
最新版
R2020a / 2020年3月20日 (4年前) (2020-03-20)
プログラミング
言語
C言語, Java
対応OS Microsoft Windows
macOS
Linux[1]
iOS[2]
Android[2]
種別 数値解析ソフトウェア
ライセンス プロプライエタリ
公式サイト MathWorks 日本MATLAB 製品ページ
テンプレートを表示

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

概要

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

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

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

歴史

"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回定期的に行っている(2015年現在)。バージョン名の付け方は、3月もしくは4月のリリースは"西暦"+"a"、9月もしくは10月のリリースは"西暦"+"b"である[3]

自分が使用している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 2000
R12.1 6.1 2001
R13 6.5 2002
R13SP1 6.5.1 2003
R13SP2 6.5.2
R14 7 6.0 2004
R14SP1 7.0.1 6.1
R14SP2 7.0.4 6.2 2005
R14SP3 7.1 6.3
R2006a 7.2 6.4 2006
R2006b 7.3 6.5
R2007a 7.4 6.6 2007
R2007b 7.5 7.0
R2008a 7.6 7.1 2008
R2008b 7.7 7.2
R2009a 7.8 7.3 2009
R2009b 7.9 7.4
R2010a 7.10 7.5 2010
R2010b 7.11 7.6
R2011a 7.12 7.7 2011
R2011b 7.13 7.8
R2012a 7.14 7.9 2012
R2012b 8.0 8.0
R2013a 8.1 8.1 2013
R2013b 8.2 8.2
R2014a 8.3 8.3 2014
R2014b 8.4 8.4
R2015a 8.5 8.5 2015
R2015b 8.6 8.6
R2016a 9.0 8.7 2016
R2016b 9.1 8.8
R2017a 9.2 8.9 2017
R2017b 9.3 9.0
R2018a 9.4 2018
R2018b 9.5
R2019a 9.6 2019
R2019b 9.7
R2020a 9.8 2020

構文

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のベクトル式記法を使用する方がしばしばコードの可読性をあげ実行速度を速くする。

脚注

関連項目

参考文献

和書

洋書

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

外部リンク