MATLABの基本操作

ここでは,サテライト演習室環境での演習を前提に,基本的な操作方法について説明します.
MATLABとは | MATLABの利点 | 起動と終了 | 基本画面の構成 | ヘルプ・ドキュメント |
行列の作成 | 要素の参照 | 行列の計算 | 値の保存と読み込み | スクリプトファイル | 関数

MATLABとは(準備中)

MATLABは,アメリカ合衆国のMathWorks社が開発している数値計算ソフトウエアです.行列計算,ベクトル演算,グラフ化や3次元表示などの豊富なライブラリを持った,インタプリタ形式のプログラミング言語です.

MATLABの利点

MATLABを用いることの利点をC言語と比較しながら見ていきましょう.C言語よりも簡単にプログラムを書くことができます.

起動と終了(サテライト演習室のPC端末)

MATLABは有償のソフトですがサテライト演習室のPC端末にはあらかじめMATLABがインストールされています. サテライト演習室のPC端末では,「スタート」→「すべてのプログラム」→「専門ソフト」の中にあるMATLABを選択することで,MATLABを立ち上げることができます.
また,終了するには,ウィンドウ右上の×ボタンをクリックするか,コマンドウィンドウ上のプロンプト記号(>>)に続いて,
>> exit
と入力します.
※MATLABは有償のソフトですが,Octaveやなど,MATLABによく似たフリーのソフトがあります.このホームページでもscilabについて少しだけ触れています.→scilabの導入

基本画面の構成

MATLABを起動すると,下の画像のような画面が表示されます.この画面は,複数のウィンドウから構成されており,それぞれの役割は次のようになっています. これらの画面構成は「デスクトップ」→「デスクトップのレイアウト」から変更可能です.基本的に,コマンドウィンドウに命令を入力していくことで処理を行います.

ヘルプ・ドキュメント

MATLABには膨大な数の関数群があらかじめ用意されており,これらを完全に把握することは現実的ではありません.MATLABではオンライン・ヘルプ機能が用意されているので,わからないことが出てきたらこの機能を利用するようにしましょう.
あるコマンド(ここではfft)の使い方が知りたい場合,コマンドウィンドウ上で,
>> help fft
とすると,fftコマンドの引数の仕様・使用例・関連する命令などを知ることができます. さらに詳細な説明が必要になったら,
>> doc fft
とすると,下図のようなウィンドウが現れ,ドキュメントを読むことができます.
また,ある処理を行うのに必要なコマンド名を知りたい場合,
>> lookfor 'フーリエ変換'
のように入力すると.関連するコマンド名の一覧が表示されます. さらに,コマンドの実装プログラムの中身が読みたい場合.
>> edit fft
のようにすると,ソースコードを見ることができます. またブラウザで「MATLAB 関数名」のように検索すればMathworks社のページがトップに出てくることが多いのでそこで調べることもできます.

行列の作成

行列を作成するときは,要素の全体を括弧[ ] で囲み,各列はスペースまたはカンマで,各行はセミコロンで区切ります.上の例では,変数aを行列として定義しています.変数を指定しない場合ans という変数に値が格納されます.
>> >> a=[1 ,2 ,3 ;4 ,5 ,6 ]
a =
	1  2  3
	4  5  6
また以下のようにしても変数として行列が定義できます.以下は関数で定義する例と,コロンを使って定義する例です.関数には他にもeye,magic,randなどがあります.helpで調べてみましょう.
>> b=zeros(3,4)
b =
	0  0  0  0
	0  0  0  0
	0  0  0  0
>> c=ones(1,5)
c =
	1  1  1  1  1

>> f=1:5(1から5まで)
f =
	1  2  3  4  5
	
>> e=0:2:10   (間に挟んだ数字の間隔でデータが定義される)
e =
	0  2  4  6  8  10

要素の参照

行列の要素や部分行列を参照したいときはa(列,行) のように指定します.先ほどのセミコロンを用いて範囲指定もできます.また行や列としてセミコロンのみを入力した場合はその行や列のすべての要素を指定することができます.
>> a=[1,2,3,4;5,6,7,8;9,10,11,12]
a =
	1  2  3  4
	5  6  7  8
	9  10 11 12

>> b=a(3,1)   (行列a の3 行1 列めの要素を取り出す)
b =
	9

>> c=a(3,1:3)   (行列a の3 行目の1 から3列目のベクトルを取り出す)
c =
	9  10  11

>> d=a(:,3)   (行列a の3 列目のベクトルを取り出す)
d =
	3
	7
	11

行列の計算

MATLAB では行列同士の演算も整数同士の演算と同様にA*B のように計算できます.計算には算術演算子や関係演算子を用います.算術演算子には和: + , 差: - , 積: * , 右除算: / , べき乗:ˆ , 複素共役転置: ’ などを用います.また関係演算子は< , > , <= , >= , == ,=などを用います.また要素ごとの演算は演算子の前にドット(.) をつけます.
>> a=[1 2 3;4 5 6;7 8 9]
a =
	1  2  3
	4  5  6
	7  8  9
	
>> b=[1 1 1;2 2 2;3 3 3]
b =
	1  1  1
	2  2  2
	3  3  3
	
>> c=a*b
c =
	14  14  14
	32  32  32
	50  50  50
	
>> d=a.*b
d =
	1  2  3
	8  10 12
	21 24 27

値の保存と読み込み

コマンドウィンドウ上で使用した変数は,ワークスペース上に保持されます.例えば,以下のようなコマンドを 打ち込むと x, y, z, A, B, C という6つの変数が作成され,その内容が保持されることになります.
>> x = 5;
>> y = -3;
>> z = (x+y)*(3+i)

z =

   6.0000 + 2.0000i

>> A = [1 2; 3 5];
>> B = [2; 4];
>> C = A*B

C =

    10
    26
ワークスペース上に保持されている変数を確認するには,whoコマンドが利用できます.データ型やサイズなどの詳細な情報も知りたい場合にはwhosコマンドを用います.(これらの内容は,ワークスペースウィンドウでも確認することができます)
>> who

変数:

A  B  C  x  y  z  

>> whos
  Name      Size            Bytes  Class     Attributes

  A         2x2                32  double              
  B         2x1                16  double              
  C         2x1                16  double              
  x         1x1                 8  double              
  y         1x1                 8  double              
  z         1x1                16  double    complex
ただし,ワークスペース上の変数はMATLABを終了するたびに消えてしまいます.そこで,これらの変数を保存・読み込みを行うためにsave, loadコマンドが利用できます.保存されるファイルは拡張子.matのバイナリファイルとなります.以下にその使用例を示します(各コマンドの詳細は,前項で紹介したhelpコマンドで確認してください).
>> save('hoge.mat');   % save hoge でも同じ
>> save('hoge_ABC.mat', 'A', 'B', 'C');
>> clear all;  % 全変数の消去
>> who
>> load('hoge_ABC.mat');
>> who

変数:

A  B  C  

>> load('hoge.mat');
>> who

変数:

A  B  C  x  y  z  

スクリプトファイル

MATLABでは,Mファイルと呼ばれるスクリプトファイルに一連の処理をまとめて記述することができます.これによって,プログラムの作成やデバッグが非常にやりやすくなります.Mファイルは拡張子.mのテキストファイルですので,一般のテキストエディタで編集可能ですが,ここではMATLAB付属のエディタを使用する方法を紹介します.
MATLABのエディタを使うには,editコマンドを使用します.
>> edit plotcossin
このように入力すると,カレントディレクトリにplotsin.mというファイルが作成され下図のようなエディタが起動します.もしくは右上にある新規スクリプトのボタンを押しても起動することができます.
ここでは例として,-5から5の定義域でsinとcosのグラフを描画するスクリプトを作成します.エディタに以下のように入力して,ファイルを保存します.新規スクリプトのボタンを押して起動した場合はここで名前を設定できるので「plotcossin.m」という名前で保存してください.
x=[-5:0.1:5];
y=sin(x);
plot(x,y)
y=cos(x);
hold on
plot(x,y,’color’,’r’)
legend(’sin(x)’,’cos(x)’)
作成したスクリプトファイルを実行するには,コマンドウィンドウでそのスクリプトファイル名(.mを除いたもの)を入力します.今回の場合,
>> plotcossin
とすると,下図のようなグラフが新たなウィンドウに表示されます.

関数

MATLABでは,独自の関数を定義できます.ここでは,2点間の距離を出力する関数distを作成します(あくまで説明用です.実際のプログラミング時にはベクトル演算で求めるほうが良いです).
まず,ファイル名が「(関数名).m」というMファイルを作成します.
>> edit dist
Mファイル内には次のような形式で関数の内容を記述します.引数名は「先頭が数字でない英数字の列」にします.また,複数の戻り値をとることも可能です.
function d = dist(x1, y1, x2, y2)
  d = sqrt( (x1-x2)^2 + (y1-y2)^2  );
これを保存することで,dist関数が利用できるようになります.以下はその実行例です.
>> dist(3, 0, 0, 4)

ans =

     5