MATLAB(Matrix Laboratory)[ 18 ]は、 MathWorksが開発した独自のマルチパラダイムプログラミング言語および数値計算環境です。MATLABでは、行列操作、関数とデータのプロット、アルゴリズムの実装、ユーザーインターフェイスの作成、他の言語で書かれたプログラムとのインターフェイスが可能です。
MATLABは主に数値計算を目的としていますが、オプションのツールボックスではMuPADシンボリックエンジンを使用してシンボリック計算機能にアクセスできます。追加パッケージであるSimulinkは、動的システムおよび組み込みシステム向けのグラフィカルなマルチドメインシミュレーションとモデルベース設計を追加します。
2020年現在、MATLABは世界中で400万人以上のユーザーを抱えています。[ 19 ]工学、科学、経済学など、様々な分野のユーザーが利用しています。2017年現在、世界中で5000以上の大学がMATLABを教育と研究の支援に使用しています。[ 20 ]
MATLABは、数学者でコンピュータプログラマーのクリーヴ・モーラーによって発明されました。[ 21 ] MATLABのアイデアは、1960年代の彼の博士論文に基づいています。[ 21 ]モーラーはニューメキシコ大学の数学教授になり、学生のためにMATLABの開発を始めました。[ 21 ]趣味として。[ 22 ]彼は、1967年に、かつての論文指導教官であるジョージ・フォーサイスと共に、 MATLABの最初の線形代数プログラミングを開発しました。[ 21 ]これに続いて、1971年に線形方程式用のFortranコードが開発されました。 [ 21 ]
バージョン1.0より前のMATLABは「プログラミング言語ではなく、単純な対話型行列計算機でした。プログラムもツールボックスもグラフィックスもありませんでした。常微分方程式やFFTもありませんでした。」[ 23 ]
MATLABの初期バージョンは1970年代後半に完成しました。[ 21 ]このソフトウェアは1979年2月にカリフォルニアの海軍大学院で初めて公開されました。[ 22 ] MATLABの初期バージョンは、71個の組み込み関数を備えた単純な行列計算機でした。 [ 24 ]当時、MATLABは無料で配布されていました。[ 25 ] [ 26 ] [ 27 ]モーラーは訪問した大学にコピーを残し、このソフトウェアは大学の数学科で強い支持を得ました。[ 28 ] : 5
1980年代、クリーブ・モラーはジョン・N・リトルと出会いました。彼らはMATLABをC言語で再プログラムし、当時メインフレームコンピュータに取って代わろうとしていたIBMデスクトップコンピュータ向けに販売することを決定しました。 [ 21 ]ジョン・リトルとプログラマーのスティーブ・バンガートはMATLABをC言語で再プログラムし、MATLABプログラミング言語を作成し、ツールボックスの機能を開発しました。[ 22 ]
MATLABは1984年にラスベガスで開催された自動制御会議で初めて商用製品として発表されました。[ 21 ] [ 22 ] MathWorks社がソフトウェア開発のために設立され[ 26 ]、MATLABプログラミング言語がリリースされました。[ 24 ] MATLABの最初の販売は翌年、マサチューセッツ工科大学のニック・トレフェセンが10本を購入したことでした。[ 22 ] [ 29 ]
1980年代末までに、MATLABは数百部が学生向けに大学に販売されていました。[ 22 ]このソフトウェアが普及したのは、主に様々な分野の専門家が専門的な数学タスクを実行するために作成したツールボックスのおかげです。[ 25 ]多くのツールボックスは、スタンフォード大学の学生が学術界でMATLABを使用し、その後そのソフトウェアを民間部門に持ち込んだ結果として開発されました。[ 22 ]
時が経つにつれ、MATLABはDigital Equipment Corporation、VAX、 Sun Microsystemsなどの初期のオペレーティングシステムやUnix PC向けに書き直されました。 [ 22 ] [ 24 ]バージョン3は1987年にリリースされました。 [ 30 ]最初のMATLABコンパイラは1990年代にStephen C. Johnsonによって開発されました。 [ 24 ]
2000年に、MathWorksはMATLAB 6に線形代数用のFortranベースのライブラリを追加し、C言語で書かれた元のLINPACKとEISPACKサブルーチンを置き換えました。[ 24 ] MATLABの並列コンピューティングツールボックスは2004年のスーパーコンピューティングカンファレンスでリリースされ、2010年にはグラフィックスプロセッシングユニット(GPU)のサポートが追加されました。[ 24 ]
2012年のバージョン8では、ソフトウェアに特に大きな変更がいくつか加えられました。[ 31 ]ユーザーインターフェースが改良され、Simulinkの機能が拡張されました。[ 32 ]
2016年までに、MATLABはMATLABライブエディターノートブックやその他の機能を含むいくつかの技術的およびユーザーインターフェースの改善を導入しました。[ 24 ]
MATLABと公式ツールボックスの変更点の完全なリストについては、MATLABの以前のリリースを確認してください。[ 33 ]
MATLAB アプリケーションは、MATLAB プログラミング言語を中心に構築されています。
MATLABアプリケーションの一般的な使用法としては、「コマンドウィンドウ」を対話型の数学シェルとして使用したり、MATLABコードを含むテキストファイルを実行することが挙げられます。 [ 34 ]
MATLAB には 「Hello, world!」プログラムの例があります。
disp ( 'Hello, world!' )次のように表示されます。
こんにちは世界!MATLABは型が暗黙的に変換されるため、弱い型付けのプログラミング言語です。 [ 35 ]変数はシンボリックオブジェクトとして扱われる場合を除き、型を宣言せずに代入できるため、推論型言語 です。 [ 36 ]また、型は変更される可能性があります。
値は、定数、他の変数の値を含む計算、または関数の出力から取得されます。
例えば:
>> x = 17 x = 17>> x = '帽子' x =帽子>> x = [ 3 * 4 , pi / 2 ] x = 12.0000 1.5708>> y = 3 * sin ( x ) y = -1.6097 3.0000単純な配列は、コロン構文(初期:増分:終端文字)を使用して定義されます。例えば、
>>配列= 1 : 2 : 9配列 = 1 3 5 7 9という名前の変数を定義しますarray(または、 という名前の既存の変数に新しい値を割り当てますarray)。この配列は、値 1、3、5、7、9 で構成される配列です。つまり、配列は 1 (初期値) から始まり、各ステップで前の値から 2 (増分値) ずつ増加し、9 (終了値)に達すると (または 9 を超えそうになると) 停止します。
実際には、この構文では増分値を(コロンの 1 つとともに)省略して、デフォルト値 1 を使用することもできます。
>>アリ= 1 : 5アリ = 1 2 3 4 5ari増分としてデフォルト値の 1 が使用されるため、値 1、2、3、4、5 を持つ配列を という名前の変数に割り当てます。
インデックスは1から始まります。[ 37 ]これは数学における行列の通常の慣例であり、C、 C++、Javaなどの他のプログラミング言語で一般的に使用される0ベースのインデックスとは異なります。
行列は、行の要素を空白またはカンマで区切り、行間の区切りとしてセミコロンを使用することで定義できます。要素のリストは角括弧で囲む必要があります[]。括弧は()要素と部分配列にアクセスするために使用します(関数の引数リストを示すためにも使用されます)。
>> A = [ 16 , 3 , 2 , 13 ; 5 , 10 , 11 , 8 ; 9 , 6 , 7 , 12 ; 4 , 15 , 14 , 1 ] A = 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1>> A ( 2 , 3 )答え = 11インデックスのセットは、 のような式で指定できます。2:4これは と評価されます[2, 3, 4]。例えば、行2から行4、列3から列4までの部分行列は、次のように表すことができます。
>> A ( 2 : 4 , 3 : 4 ) ans = 11 8 7 12 14 1サイズnの正方単位行列は関数 を使って生成でき、ゼロまたは 1 を含む任意のサイズの行列は関数 と を使ってそれぞれ生成できます。 eyezerosones
>>目( 3 , 3 )答え = 1 0 0 0 1 0 0 0 1>>ゼロ( 2 , 3 ) ans = 0 0 0 0 0 0>> 1 ( 2 , 3 )答え = 1 1 1 1 1 1ベクトルまたは行列の転置はtranspose、関数を使用するか、行列の後にドットとプライムを追加することによって行われます (ドットがない場合、プライムは複素配列の 共役転置を実行します)。
>> A = [ 1 ; 2 ]、B = A . ' 、C =転置( A ) A = 1 2 B = 1 2 C = 1 2>> D = [ 0 , 3 ; 1、5]、D. ' D = 0 3 1 5 ans = 0 1 3 5ほとんどの関数は配列を入力として受け取り、各要素を要素ごとに演算します。例えば、はJmod(2*J,n)のすべての要素を2倍し、各要素をnを法として減算します。MATLABには標準的なループ機能も含まれていますが、( APLやRなどの他の類似アプリケーションと同様に)ベクトル表記の使用が推奨されており、多くの場合、実行速度も速くなります。関数magic.mから抜粋した次のコードは、nが奇数の場合の魔方陣Mを作成します(ここではMATLAB関数を使用して、 を含む正方行列IとJを生成します)。 forwhilemeshgrid
[ J , I ] =メッシュグリッド( 1 : n ); A = mod ( I + J - ( n + 3 ) / 2 , n ); B = mod ( I + 2 * J - 2 , n ); M = n * A + B + 1 ;MATLABは構造体データ型をサポートしています。[ 38 ] MATLABのすべての変数は配列であるため、「構造体配列」というより適切な名前が付けられます。この場合、配列の各要素は同じフィールド名を持ちます。さらに、MATLABは動的なフィールド名をサポートしています[ 39 ](名前によるフィールドの参照、フィールド操作など)。
MATLAB関数を作成する際、ファイル名はファイル内の最初の関数名と一致する必要があります。有効な関数名はアルファベットで始まり、文字、数字、アンダースコアを含めることができます。変数と関数は大文字と小文字が区別されます。[ 40 ]
rgbImage = imread ( 'ecg.png' ); grayImage = rgb2gray ( rgbImage ); % インデックスなしの画像の場合、 level = graythresh ( grayImage ); % 画像をバイナリに変換するためのしきい値、binaryImage = im2bw ( grayImage 、level ); % 個々の赤、緑、青のカラー チャネルを抽出します。redChannel = rgbImage (:, :, 1 ); greenChannel = rgbImage (:, :, 2 ); blueChannel = rgbImage (:, :, 3 ); % 黒い部分を純粋な赤にします。redChannel ( ~ binaryImage ) = 255 ; greenChannel ( ~ binaryImage ) = 0 ; blueChannel ( ~ binaryImage ) = 0 ; % 出力画像を形成するために再結合します。rgbImageOut = cat ( 3 、redChannel 、greenChannel 、blueChannel ); imshow ( rgbImageOut );MATLABは、関数ハンドル[ 41 ]または関数参照を導入することでラムダ計算の要素をサポートしています。これらは.mファイルまたは匿名[ 42 ] /ネストされた関数[ 43 ]で実装されています。
MATLABは、クラス、継承、仮想ディスパッチ、パッケージ、値渡しセマンティクス、参照渡しセマンティクスを含むオブジェクト指向プログラミングをサポートしています。[ 44 ]しかし、構文と呼び出し規約は他の言語とは大きく異なります。MATLABには値クラスと参照クラスがあり、クラスがスーパークラスとして扱われるかどうか(参照クラスの場合)と扱われないかどうか(値クラスの場合)によって分類されます。[ 45 ]
メソッド呼び出しの動作は、値クラスと参照クラスで異なります。例えば、メソッド呼び出しは次のようになります。
オブジェクト.メソッド();オブジェクトが参照クラスのインスタンスである場合にのみ、オブジェクトのメンバーを変更できます。それ以外の場合、値クラス メソッドは、オブジェクトを変更する必要がある場合に新しいインスタンスを返す必要があります。
単純なクラスの例を以下に示します。
classdef Helloメソッドfunction greet ( obj ) disp ( 'Hello!' ) end end endという名前のファイルに入れるとhello.m、次のコマンドで実行できます。
>> x = Hello (); >> x . greet ();こんにちは!MATLABには緊密に統合されたグラフ描画機能があります。例えば、関数plotを使うと、2つのベクトルxとyからグラフを作成できます。コードは以下のとおりです。
x = 0 :パイ/ 100 : 2 *パイ; y =罪( x );プロット( x , y )正弦関数の次の図が生成されます。
MATLAB は 3 次元グラフィックスもサポートしています。
MATLABはグラフィカルユーザーインターフェース(GUI)アプリケーションの開発をサポートしています。[ 46 ] UIはプログラムで生成することも、GUIDEやApp Designerなどのビジュアル設計環境を使用して生成することもできます。[ 47 ] [ 48 ]
MATLABは、 C言語やFortran言語で書かれた関数やサブルーチンを呼び出すことができます。[ 49 ] MATLABのデータ型を渡したり返したりできるようにラッパー関数が作成されます。MEXファイル(MATLAB実行ファイル)は、このような関数をコンパイルして作成される動的にロード可能なオブジェクトファイルです。[ 50 ] [ 51 ] 2014年以降、 Pythonとの双方向インターフェースがますます追加されています。[ 52 ] [ 53 ]
Perl、Java、ActiveX、.NETで書かれたライブラリはMATLABから直接呼び出すことができ、[ 54 ] [ 55 ]、多くのMATLABライブラリ(例えばXMLやSQLサポート)はJavaやActiveXライブラリのラッパーとして実装されています。JavaからMATLABを呼び出すのはより複雑ですが、MathWorksが別売りしているMATLABツールボックス[ 56 ]を使用するか、JMI(Java-to-MATLAB Interface)と呼ばれる文書化されていないメカニズム[ 57 ] [ 58 ] (これもJMIと呼ばれる無関係なJavaメタデータインターフェイスと混同しないでください)を使用して行うことができます。Java用の公式MATLAB APIは2016年に追加されました。[ 59 ]
MathWorksが提供するMuPADベースのSymbolic Math Toolboxの代替として、MATLABはMapleやMathematicaに接続することができる。[ 60 ] [ 61 ]
MathMLをインポートおよびエクスポートするためのライブラリも存在します。[ 62 ]
2020年、MATLABは米国の制裁措置を受けて、中国の2つの大学からサービスを撤退しました。大学側は、オープンソースの代替手段の利用拡大と国内の代替手段の開発によってこれに対応すると述べています。[ 63 ]
{{cite web}}:欠落または空|title=(ヘルプ)つまり、APL、Speakeasy、LINPACK、EISPACK、そしてPL0はMATLABの前身となる。