3. MATLABの基本的な使用方法¶
3.1. オペレーション機能¶
3.1.1. デスクトップ環境¶
MATLABを起動すると、各種機能を持つウィンドウがCommand Windowと共に表示されます。
これらのウィンドウの統合環境をデスクトップ環境と呼んでおり、 このデスクトップ環境はいろいろなウィンドウの組み合わせで表示することができます。
3.1.1.1. Command Window¶
MATLABの基本的な作業ウィンドウです。 ここで各種コマンド・関数・プログラムを実行します。 Command Window上の「>>」記号に続けて、A=2+3と入力して下さい。 この入力で「2+3」という右辺の数式が実行され、 その結果が左辺の変数Aに代入されます。 MATLABでは「=」は数学的等価関係ではなく、 右辺の計算結果を左辺に代入する操作を表します。 つまり、数学的には成立しえない「A=A+2」などの式が成立します。
>> A=2+3
A =
5
>>
3.1.1.2. Workspace¶
MATLAB上で定義された変数の一覧を表示するウィンドウです。 Workspaceとは、変数に対してMATLABが自動的に割り当てるメモリ領域のことをいいます。 また、変数を右クリックで選択すると変数のプロットや各種の編集を行うことができます。
3.1.1.3. Current Directory¶
カレントフォルダのファイルを表示します。 上部のボタンを押すことで作業フォルダの移動や新規フォルダの作成を行うことができます。 また、ファイルを右クリックで選択してファイルの表示や実行を行うことができます。 このウィンドウはフォルダのエクスプローラウィンドウに相当します。
3.1.1.4. Command History¶
今まで実行してきたMATLABコマンドの履歴を表示します。 履歴の各行を左クリックすると、そのコマンドを実行します。
3.1.1.5. Startボタン¶
MATLABのオプションツールで提供されている各種ツールやデスクトップツールのメニュー集です。 ここからツールごとのデモやヘルプ、MATLABの設定画面などを参照することができます。
3.1.2. 詳細設定¶
3.1.2.1. デスクトップ環境の詳細設定¶
「START」ボタンから「Preferences」を選択すると、設定画面を開くことができます。 なお、再起動後も設定した内容と同じ状態でMATLABが起動します。
3.1.2.2. ウィンドウの表示位置の変更方法¶
ウィンドウを左クリックした状態でドラッグすることで、任意の位置にはめ込むことができます。 「Desktop」メニューから「Desktop Layout」→「Default」を選択することで、デフォルト位置に戻すことができます。
3.2. 変数の基本的なデータ操作¶
3.2.1. 入力によるデータ定義¶
直接データを入力して変数を定義する場合、下記の規則に従う必要があります。
- 各要素は、ブランク、タブ、カンマで区切ります
- 要素全体は大括弧[]で囲みます
- 各行はセミコロン;、またはキャリッジリターンで区切ります
- ステートメントの最後にセミコロン;を付けると結果を表示しません
- 虚数単位は小文字のiまたはjを使用します
- ステートメントの最後にピリオドを3つ以上付けると、次の行への継続となります
- 文字データを定義する場合は、要素全体をシングルコート’で囲みます
- データを持たない変数は、空配列[]として定義します
(例)スカラ(1×1行列)変数A
>> A=1
A =
1
(例)結果の非表示
>> A=1;
>>
(例)1行3列の行ベクトル変数C1
>> C1=[1 2 3]
C1 =
1 2 3
(例)3行1列の列ベクトル変数C2
>> C2=[1;2;3]
C2 =
1
2
3
(例)2行3列の実数行列変数D
>> D=[11,12,13;14,15,16]
D =
11 12 13
14 15 16
>> D=[11,12,13
14,15,16]
D =
11 12 13
14 15 16
(例)1行3列の複素行列変数E
>> E=[1+i,2+3i,5-2i]
E =
1.0000 + 1.0000i 2.0000 + 3.0000i 5.0000 - 2.0000i
(例)1行6列の文字列変数F
>> F='MATLAB'
F =
MATLAB
(例)空変数G
>> G=[]
G =
[]
3.2.2. 関数による定義¶
規則的な要素をもつ大きなデータを定義する場合、前項で述べた要素を1つずつ入力していく方法はかなり非効率的です。 その代わりに、下表に示されている行列作成関数と演算子を使うことで、比較的簡単に大きなサイズのデータを作成できます。
zeros | ゼロ行列 |
rand | 一様分布する乱数 |
ones | 全要素が1の行列 |
randn | 正規分布する乱数 |
eye | 単位行列 |
linespace | 線形等間隔ベクトル |
diag | 対角行列 |
logspace | 対数等間隔ベクトル |
magic | 魔方陣 |
: | 等間隔ベクトル |
(例)2行3列のゼロ行列m1
>> m1=zeros(2,3)
m1 =
0 0 0
0 0 0
(例)1行4列の一様分布する乱数ベクトルm2
>> m2=rand(1,4)
m2 =
0.8147 0.9058 0.1270 0.9134
例)1行10列の等間隔ベクトルm3
等間隔ベクトルはコロン:を使って、「初期値:増分値:最終値」というフォーマットで定義します
>> m3=1:3:30
m3 =
1 4 7 10 13 16 19 22 25 28
(例)1行10列の等間隔ベクトルm4
増分値が1の場合は増分値を省略可能(フォーマットは初期値:最終値となります)
>> m4=1:10
m4 =
1 2 3 4 5 6 7 8 9 10
3.2.3. データの配列操作¶
配列操作に関して、次の2行3列の実数行列変数Mを例とします。
>> M=[1,2,3;4,5,6]
M =
1 2 3
4 5 6
3.2.3.1. 配列要素の取り出し¶
配列要素を取り出すには、変数名の後ろに()付きで行・列番号を指定します。
(例)変数Mの2行3列目の要素
>> a1=M(2,3)
a1 =
6
(例)変数Mの2行目の1,2,3列の要素
>> a2=M(2,[1,2,3])
a2 =
4 5 6
(例)変数Mの1行目の全ての列要素
>> a3=M(1,:)
a3 =
1 2 3
3.2.3.2. 配列要素の置き換え¶
変数要素の置き換えは 変数名(i,j)=N ここでi,jは変数の行・列番号、Nは置き換える値。
(例)変数Mの2行2列目を1に置換
>> M(2,2)=1
M =
1 2 3
4 1 6
(例)変数Mの1列目を全て5に置き換え
>> M(:,1)=5
M =
5 2 3
5 1 6
3.2.3.3. 配列要素の結合¶
通常のデータ定義のように、大括弧[]を使用して配列同士を結合できます。
(例)変数a1とa2を横に結合
>> a12=[a1,a2]
a12 =
6 4 5 6
(例)変数a3とa2を縦に結合
>> a32=[a3;a2]
a32 =
1 2 3
4 5 6
3.2.3.4. 配列操作関数と演算子¶
配列の大きさを調べたり、形状を変更したりするための関数が複数用意されています。
size | 配列の大きさ |
fliplr | 行列の左右反転 |
length | ベクトルの長さ |
flipud | 行列の上下反転 |
reshape | 行列のサイズ変更 |
rot90 | 行列の90°回転 |
’ | 共役転置 |
.’ | 転置 |
3.2.4. データ定義の注意¶
3.2.4.1. 変数名の制限及び注意点¶
- 大文字・小文字を区別します
- 変数名の文字数制限は63文字です
- 数字および演算子で始まる変数名は使用できません
- 日本語文字列を変数名に使用することはできません
- 同じ変数名でデータを定義すると値が上書きされます
- 変数名を指定せずにデータを定義すると、テンポラリ変数ansとして定義されます
- 関数・コマンドと同じ変数名を使用しないで下さい
- 予約変数と同じ変数名を使用しないで下さい
(例)虚数単位i,j、円周率pi、無限大inf
3.2.5. 配列エディタの機能¶
Workspace ウィンドウで変数をダブルクリックすると配列エディタが起動し、 変数の編集を行うことができます。
配列エディタが起動します。
はじめから変数を定義する場合、 Workspaceウィンドウの「New」ボタンをクリックすると、 「Unnamed」という変数名がWorkspaceに作成されます。 この「unnamed」は作成直後、ハイライト表示されますので、 変数名を変更することができます。 このとき、「unnamed」は0の要素を持った1行1列の変数(スカラ値)となりますので、 これを、配列エディタを開いて編集します。
既に存在する変数からデータを切り出して定義する場合、 配列エディタ上で要素の一部を選択し、 右クリック⇒「Create Variable from Selection」を選択します。 すると、Workspaceに「a321」という変数が作成されます。
3.3. ヘルプ機能¶
3.3.1. 関数・コマンド名が分かっている場合¶
関数やコマンド名が既に分かっている場合、その機能・使用法について調べる方法は大きく分けて3つあります。 ここでは単位行列を作成するeye関数を例として説明します。
3.3.1.1. helpコマンド¶
次のように入力すると、各関数のヘルプテキストがコマンドウィンドウ上に表示されます。
>>help 関数名
(例)help eye
>> help eye
EYE Identity matrix.
EYE(N) is the N-by-N identity matrix.
EYE(M,N) or EYE([M,N]) is an M-by-N matrix with 1's on
the diagonal and zeros elsewhere.
EYE(SIZE(A)) is the same size as A.
3.3.1.2. docコマンド¶
次のように入力すると、ヘルプブラウザに各関数のリファレンスが表示されます。 ヘルプテキストよりも詳細な情報が欲しいときに使用します。
>> doc 関数名
3.3.1.3. ヘルプブラウザ¶
ヘルプブラウザは下記コマンドで起動します。
>> helpbrowser
また、デスクトップウィンドウの「Help」メニューから「MATLAB Help」を選択するか、 「?」アイコンをクリックすることで起動させることができます。 ヘルプブラウザの「Search」タブを選択し、 「Search for」フィールドに検索したい関数名を入力して「Go」ボタンを実行します。
(2)関数・コマンド名が分からない場合
関数やコマンド名は分からないが、目的の機能を持つ関数・コマンドが存在するかどうか調べたい場合には、 helpwinコマンドを利用します。 Helpwinコマンドを実行すると、 各ツールの機能別関数リストがヘルプブラウザに表示されます。
3.3.2. 数値演算¶
3.3.2.1. 四則演算¶
MATLABでは、スカラ演算だけでなく行列演算(線形代数則)の演算子も用意します。
+ | A + B | 行列の加算 |
- | A - B | 行列の減算 |
* | AB | 行列の乗算 |
^ | AB | 行列のべき乗 |
/ | AB-1 | 行列の除算(右割り) |
A-1B | 行列の除算(左割り) | |
.* | A(i,j)*B(i,j) | 要素単位の乗算 |
.^ | A(i,j)B(i,j) | 要素単位のべき乗 |
./ | A(i,j)/B(i,j) | 要素単位の除算 |
. | B(i,j)/A(i,j) | 要素単位の除算 |
ピリオド「.」の有無により、演算子のスカラ演算と行列演算を区別しています。 加算と減算についてはどちらの演算とも同じ結果になりますので、「.+」「.-」は用意されていません。
(例)各演算子の計算結果の確認
>> A=[1,2;3,4]
A =
1 2
3 4
>> B=[5,6;7,8]
B =
5 6
7 8
>> A+B
ans =
6 8
10 12
>> A*B
ans =
19 22
43 50
>> A.*B
ans =
5 12
21 32
3.3.2.2. 数学関数¶
入力した変数に指定した配列の全要素に対して、計算を行います。 代表的な数学関数を以下に示します。
Sin | 正弦値 |
conj | 共役複素数 |
Exp | 指数 |
real | 複素数の実部 |
log10 | 常用対数 |
imag | 複素数の虚部 |
sqrt | 平方根 |
rem | 除算の剰余 |
abs | 絶対値 |
prod | 配列の要素の積 |
(例)行列データに対する余弦値の計算
>> x1=0:pi/4:pi;
>> X=[x1;2*x1]
X =
0 0.7854 1.5708 2.3562 3.1416
0 1.5708 3.1416 4.7124 6.2832
>> Y=cos(X)
Y =
1.0000 0.7071 0.0000 -0.7071 -1.0000
1.0000 0.0000 -1.0000 -0.0000 1.0000
3.3.2.3. 行列関数¶
行列関数は数値演算のコアルーチンを担っている非常に重要な関数です。 代表的な行列関数を以下に示します。
inv | 逆行列 |
norm | 行・ベクトルのノルム |
det | 行列式 |
null | 行列のNULL空間 |
rank | 行列のランク |
eig | 固有値と固有ベクトル |
(例)連立方程式の解法
3x+4y=6
2x+5y=8
>> A=[3,4;2,5]
A =
3 4
2 5
>> b=[6;8]
b =
6
8
>> x=inv(A)*b
x =
-0.2857
1.7143
>> x=A\b
x =
-0.2857
1.7143
処理速度や計算精度の観点から考えると、逆行列を求めてから計算するよりも バックスラッシュ演算子「\」で処理した方が有効です。
3.3.2.4. 解析関数¶
MATLABでは様々な解析関数が用意されています。 ここでは代表的なデータ解析関数を取り上げます。
max | 最大値 |
gradient | 勾配 |
min | 最小値 |
corrcoef | 相関係数 |
mean | 平均値 |
cov | 共分散行列 |
std | 標準偏差 |
interp1 | 1次元補間 |
roots | 多項式の根 |
conv | 畳み込み |
polyfit | 多項式近似 |
fft | 高速フーリエ変換 |
polyval | 多項式の計算 |
fft2 | 2次元高速フーリエ変換 |
(例)多項式の根、計算 MATLABでは多項式の係数を係数ベクトルで表現しています。
多項式の解を下の例では求めています。
>> coef=[1,5,4]
coef =
1 5 4
>> R=roots(coef)
R =
-4
-1
>> V=polyval(coef,R)
V =
0
0
>>
(例)多項式の畳み込み
>> c1=[1,2,3]
c1 =
1 2 3
>> c2=[4,5]
c2 =
4 5
>> r=conv(c1,c2)
r =
4 13 22 15
(例)行列の縦方向の最大値、平均値、相関係数
>> M=[2,-10,5;6,13,4;3,5,9]
M =
2 -10 5
6 13 4
3 5 9
>> max(M)
ans =
6 13 9
>> mean(M)
ans =
3.6667 2.6667 6.0000
>> corrcoef(M)
ans =
1.0000 0.8983 -0.4539
0.8983 1.0000 -0.0162
-0.4539 -0.0162 1.0000
3.3.3. ファイルデータの入出力¶
ここでは、外部ファイルからデータを読み込んで定義する方法、 及び定義したデータをファイルに保存する方法について取り上げます。
3.3.3.1. ファイルからの入力¶
下記に示す各種フォーマットのデータを読み込むことができます。
テキストファイル(.dat,.txt,.csv) | 数値・文字を含むテキストフォーマット |
スプレッドシート形式ファイル(.xls,.wk1) | Excelフォーマット、Lotus123フォーマット |
オーディオファイル(.wav,.au) | Windows WAVEフォーマット、Sun Microsystemsフォーマット |
オーディオビジュアルファイル(.avi) | AVIオーディオビジュアルフォーマット |
イメージファイル(.jpg,.tif,.bmp,.png,.hdf,.pcx,.xwd,.gif) | JPEG,TIFF,BMP,PNG,HDF,PCX,XWD,GIFフォーマット |
MAT-ファイル(.mat) | MATLAB固有バイナリフォーマット |
その他バイナリファイル(.bin) | ビット解釈やマシンフォーマットの指定されたバイナリフォーマット |
MATLABにデータを読み込む方法は、以下の2通りがあります。
- インポートウィザードを使う
- 読み込みコマンドを使う
インポートウィザードを使う
インポートウィザードはMATLABにデータを取り込む際に、その読み込みフォーマットを設定するGUIツールです。
上記ファイルフォーマットのほとんどを読み込むことができますが、 ここでは例として以下のテキストファイルを読み込みます。
data1.txt
0.000 , 2.000
0.001 , 4.000
0.002 , 6.000
0.003 , 8.000
data2.txt
// Header //
DATE 2011/02/01
FORMAT ASCII
INTVL 7.85E-2 sec
time disp
0.000 0.000
0.010 3.565
0.020 7.890
0.030 11.345
0.040 15.010
0.050 23.780
主な手順は以下の通りです。
- 「Import Data」を選択
- 読み込むファイルを選択し、OKを押す
- Import Wizardウィンドウの「Next >」ボタンを押す
- インポートする変数にチェックする
-
「Finish」ボタンを押す
-
data1.txtの場合
Select Column Separator では、カンマ区切りなので Delimited で「Comma」を選択。
*data2.txtの場合
Select Column Separator では、スペース区切りなのでセパレータに「Space」を選択。 Number of text head lines では、「7」とする。
- 読み込みコマンドを使う
読み込みコマンドを使うことで、前節で述べたフォーマットのファイルを全て読み込むことができます。 MATLABのデータインポート関数は大きく分けて2種類あり、それぞれのデータフォーマットに応じて使い分けます。
- 標準インポート関数
- 低水準インポート関数
- 標準インポート関数
各ファイルフォーマットに対応したインポート関数が用意されています。 代表的な標準インポート関数を以下に示します。
load | MAT-ファイル及びブランク区切りのファイル |
dlmread | 任意の区切り文字で区切られたファイル |
textread | フォーマット付き数値・文字を含むファイル |
xlsread | Excelスプレッドシートファイル |
urlread | URLのファイル |
imread | 画像ファイル |
wavread | WAVEサウンドファイル |
aviread | AVIファイル |
- 低水準インポート関数
標準インポート関数が対応していない複雑なフォーマットの場合は、 低水準インポート関数を使います。 代表的な低水準インポート関数を以下に示します。
fopen | ファイルを開く |
fclose | ファイルを閉じる |
fgetl | 1行読み込み(終端子無し) |
fseek | ファイルポインタの設定 |
frewind | ファイルポインタを先頭に移動 |
fscanf | フォーマット指定のテキストデータの読み込み |
fread | バイナリデータの読み込み |
textscan | フォーマット指定のテキストデータの読み込み(大きなデータ) |
3.3.3.2. ファイルへの出力¶
下記のファイルフォーマットへ保存することができます。
テキストファイル(.dat,.txt,.csv) | 数値・文字を含むテキストフォーマット |
スプレッドシート形式ファイル(.xls) | Excelフォーマット |
オーディオファイル(.wav,.au) | Windows WAVEフォーマット、Sun Microsystemsフォーマット |
オーディオビジュアルファイル(.avi) | AVIオーディオビジュアルフォーマット |
イメージファイル(.jpg,.tif,.bmp,.png,.hdf,.pcx,.xwd) | JPEG,TIFF,BMP,PNG,HDF,PCX,XWDフォーマット |
MAT-ファイル(.mat) | MATLAB固有バイナリフォーマット |
その他バイナリファイル(.bin) | ビット解釈やマシンフォーマットの指定されたバイナリフォーマット |
基本的にはコマンド入力によりデータをファイルに保存します。 ただし、ファイルフォーマットによってはメニュー等から保存することができます。
- エクスポート関数を使う
- Workspace機能を使う(MAT-ファイルのみ)
代表的な標準エクスポート関数
save | MAT-ファイル及びブランク区切りのファイル |
csvwrite | カンマ区切りで区切られたファイル(csv形式) |
dlmwrite | 任意の区切り文字で区切られたファイル |
xlswrite | Excelスプレッドシートファイル |
urlwrite | URLのファイル |
imwrite | 画像ファイル |
wavwrite | WAVEサウンドファイル |
avifile | AVIファイル |
Workspace機能(MAT-ファイルでの保存のみ)
Workspaceウィンドウに表示されている変数は下記の手順でMAT-ファイルに保存できます。
- Workspaceの変数””をクリック
- Shiftキーを押しながら変数””をクリック
- 選択範囲を右クリックし、コンテキストメニューから「別名で保存」を選択
- 「MAT-ファイルに保存」ウィンドウで保存するファイル名を指定(拡張子は.mat)