簡単な計算

 MATLABで計算やグラフの表示などの命令を実行する場合,コマンドラインからの入力によってひとつずつ命令を実行する方法と,m-ファイルに複数の命令を記述しておいて連続して実行する方法がある.後者のm-ファイルを用いた方法はCや他のプログラム言語と同じようなものである.
 ここでは,コマンドラインからの入力について説明する.

 MATLABを起動すると">>"という記号が表示される.以降,この記号のことをプロンプトと呼ぶ.コマンドラインからの入力はこの">>"に続いて入力する.

スカラーの計算

 単純な計算の例を示す.
 例えば,10+20/2-5*3 を計算したいとき(/は割り算,*は掛け算)は
>>10+20/2-5*3
と入力する.ここでreturn(enter)キーを押すと
ans =
     5
と表示される.
 このようにコマンドは入力後にreturn(enter)キーを押すことによって実行される.
 四則演算の演算順序は普通の数学と同様である.演算順序を変えたいときは,数学と同様でカッコ()を用いる.

>>(10*(5-3))/2

ans =
     10
 次に変数を使った計算について説明する.変数への数の代入は以下のように行う.
>>x=3
このように変数への代入は"="を用いる.このあと
x = 
   3
と表示され,確かにxに3が代入されたことがわかる.
 もしこのような表示をさせたくないときは
>>x=3;
のように最後に";"を付ける.
 代入を行った変数は,次からの計算で使うことができる.
例えば
>>x+3
の結果は
ans = 
     6
となる.
 また,
>>x=4;
と入力し,もう一度
>>x+3
を実行すると今度は
ans = 
      7
となる.
ここで,以前入力したコマンドを入力しなおす場合,カーソルキーの上を押すことで以前のコマンドが表示されるので便利である.いままで入力したコマンドは記憶されているので,1回押せば一つ前のコマンド,2回押せば二つ前に入力したコマンドが呼び出される.戻り過ぎた場合は,カーソルキーの下で一つ先に進む.カーソルキーの上(下)の代わりにコントロールキー(Ctrlキー)を押しながらp(n)を押してもよい.
また,単に変数の値を知りたいときは
>>x
と入力することで
x = 
    4
と表示される.もし,まだ定義(代入)していない変数の値を見ようとした場合は エラーメッセージがでる.
また,MATLABでは大文字と小文字は区別されるので注意すること.すなわち xとXは別なものと見なされる.
 それまでに定義した変数は
>>who
で見ることができる.定義した変数を削除したいときは"clear"を用いる.例えばxという変数を削除したいときは
>>clear x
とする.変数名を省略すると,それまでの全ての変数が削除される.

次に,MATLABにある関数のなかで,一般的な数学でも使うものについていくつか例を示す.

平方根
>>sqrt(9)

ans = 
     3
三角関数
>>sin(pi/6)

ans = 
    0.5000
  MATLABではpiは特に定義しなければ円周率を表す.

対数関数
>>log10(5)

ans = 
    0.9660
など,さまざまな関数がある.このように関数はカッコ()の中に一つまたは複数の引数を与えて用いる.

 関数は,その使い方をhelpを用いてみることができる.

例 sinという関数について調べたいとき
>>help sin

MATLABは複素数も実数と同様に計算することができる.虚数単位にはiを用いる.
>>(3+i)*(2-3i)

ans = 
     9.0000-7.0000i
また,conj(x)でxの複素共役を出力することもできる.

ベクトルの計算

 ここまでの計算はすべてスカラーについて行ってきた.ここからは,MATLABの特長でもある行列の計算について説明する.MATLABではm行n列(m,nは自然数)の行列を扱うことができる.
 まず,1行n列のものについて説明する. 1行n列の行列は,数列やベクトルと言った方がわかりやすく,ここではベクトルと表す.
例えば
[1 3 5 7 9 11]
のようなものである.MATLABではこのベクトルを一つの変数で表すことができる.
>>A=[1 3 5 7 9 11]

A =
    1 3 5 7 9 11
これでベクトルAが定義された.ベクトル(行列)はこのように[ ]で囲んで表す.
Aの3番目の要素を知りたいときは
>>A(3)

ans =
     5
とする. また,Aのサイズを知りたいときは
>>size(A)

ans =
     1 6
ここで1は行の数,6は列の数である.すなわちAは1行6列の行列だということがわかる.
Aの3番目の要素を変更したいときは
>>A(3)=4;
とする.
 気をつけなければならないのは,行列の要素の番号が1から始まっているということである.C言語などでは配列の最初の要素が0,2番目を1として数えているので,特に他のプログラミング言語を使っている人は注意すること.

ベクトルは要素ごとの演算ができる.
>>A=[1 3 5 7 9];
>>B=[2 4 6 8 10];
>>A+B

ans =
     3 7 11 15 19

>>B-A

ans =
     1 1 1 1 1

>>B.*A

ans =
     2 12 30 56 90

>>A./B

ans =
     0.5000  0.7500  0.8333  0.8750  0.9000
 このように各要素ごとに独立に演算ができる.ここで,掛け算と割り算のときに *と/ではなく.*と./を使っていることに注意すること.
また,sqrtなどの関数の引数にベクトルを与えた場合,
>>sqrt(A)

ans = 
     1.0000  1.7321  2.2361  2.6458  3.0000
のように各要素について独立に計算する.スカラーの計算で用いる関数のほとんどはこのように一度に複数の計算を行うことができる.

 このことを利用して,xが0, 0.1, 0.2, ..., 3.0, 3.1のときのsin(x)の 値を求めてみる.
xに対して0.1刻みで0から3.1までの代入を行うのは非常に面倒である. このようなときは":"を使って自動化することができる.
>>x=0:0.1:3.1;
これでxは0から0.1刻みで3.1まで,32個の要素をもつ配列になった.
このように
1番目の要素の数 : 増分 : 最後の数
として記述することで労力が削減できる. このとき増分を省略して,例えば1:5とすると自動的に増分は1とされる.
>>z=1:5

z =
   1 2 3 4 5
また,10:-1:5というように増分を負の数にすることも可能である.

xに代入したら,次にsin(x)を求める.
>>sin(x)
結果は長いのでここには示さないが,32個のxに対して32個のsin(x)の値が計算されたはずである.

行列演算

前節ではベクトルを扱ったが,ここからは行列を使った演算について説明していく.
3行3列の行列は以下のように代入する.
>>A=[1 2 3;4 5 6;7 8 9]

A =
   1 2 3
   4 5 6
   7 8 9
このように同じ行にある要素は空白で区切り,行と行は";"で区切る.
m行n列(m,nは自然数)の行列も同様である.
行列の場合も先に説明したベクトルと同様, A+B, A-B, A.*B, A./Bで各要素ごとの計算ができる.
他にもベクトルと同様,
>>A(3,2)
として3行4列目の要素を出力したり,
>>size(A)
で行列のサイズを出力することができる.

スカラーで用いている関数も同様に行列に対して使用することができる.
>>A=[1 2 3;4 5 6;7 8 9];
>>sqrt(A)

ans =
     1.0000 1.4142 1.7321
     2.0000 2.2361 2.4495
     2.6458 2.8284 3.0000
全ての要素が同じ行列をつくるにはonesやzerosを使うと便利である.
>>ones(3,4)*2

ans = 
     2 2 2 2
     2 2 2 2
     2 2 2 2
     2 2 2 2

行列のなかのある行または列を行ベクトルまたは列ベクトルとして出力したいときは,
例 2行目を行ベクトルとして出力したいとき
>>A(2,:)
例 3列目を列ベクトルとして出力したいとき
>>A(:,3)
とする.

"'"を付けると転置行列を出力する.
>>A'

ans =

     1 4 7
     2 5 8
     3 6 9

行列の積の計算は"*"を用いて"C*D"と表す.ここでCがn列ならDはn行でなければならない.
>>C=[1 2;3 4];
>>D=[1 2 3;4 5 6];
>>C*D

ans =
     9 12 15
    19 26 33



[back]
kawamata@mk.ecei.tohoku.ac.jp
Last modified: Wed May 3 11:26:29 JST 2000