第8回 数値処理ソフトウェア1 - MATLAB

MATLABとは科学技術計算用のプログラムで,特に行列演算が簡単に行えることに特徴がある.このことはMATLABという名前が,MATrix LABoratoryから来ていることからもわかる.工学系の分野では必須のツールと言え,産業界でもスタンダードとなっている.特に,制御理論,統計学,信号処理,また暗号や経済分野での数理解析等に広く用いられている.アメリカで,この様な研究分野の学生にMATLABとは? と尋ねると,良く返ってくる返事は,"MATLAB is my life!"

本講義で身につけた知識が役立つ科目等:

機械工学実験,コンピュータ機械工学,メカトロニクス実習,ゼミ及び卒業研究,大学院での研究など.また一般の講義科目では,制御工学1,2,機械力学等の理解を補助する.

8.0 MATLABの起動方法

センターのコンピュータ環境では,MATLABは個々のコンピュータにはインストールされておらず,サーバ上にあるプログラムをネットワーク越しに起動する様になっている.このため,多数で同時にMATLABを起動すると,多少起動時間がかかるかも知れない.

MATLABの起動方法は【こちら】

8.1 MATLABの基礎

電卓の延長としてのMATLAB

MATLABが起動されると,以下のような画面が出る.この画面の中で右側の部分がコマンドウィンドウである.

コマンドウィンドウに直接数式を入力することにより簡単な計算ができる.以下のように計算結果はansという変数に格納される.

>> 3+5
ans =
    8
>> 2^4
ans =
    16
>> sqrt(2)
ans =
    1.4142

ワークスペース変数

(変数名)=(代入文)の書式で,変数に値を格納することが出来る.特に,MATLABではベクトルや行列を一つの変数に代入,格納することができる.

>> A=[1 1]
A =
    1    1
>> B=[2; 2]
B =
    2
    2
>> C=[3 3]'
C =
    3
    3
>> D=[4 4; 4 4]
D =
    4    4
    4    4
注: '(アポストロフィ)は転置を意味する

また,一度定義した変数は再度利用することが出来る.

>> E=eye(2)
E =
     1     0
     0     1
>> F=D+E
F =
     5     4
     4     5

変数名は大文字と小文字は区別される.

また,文末に;(セミコロン)を付けることによって,計算結果を表示しないようにできる.

>> F=D+E;
>> F
F =
     5     4
     4     5

セミコロンを使って一行に複数のコマンドを入力することも可能である.

行列要素の操作

変数名(行番号,列番号)という書式を利用すると,行列変数の一部を抜き出すことができる.

>> F(1,2)
F =
     4

また,任意の行や列を取り出したい場合には,:(コロン)を利用する.

>> F(1,:)
ans =
     5    4
>> F(:,1)
ans =
    5
    4

:(コロン)は以下のように連続する配列を定義する際にも利用される.

>> [1:3]
ans =
     1    2    3
>> [1:0.5:3]
ans =
    1.0000    1.5000    2.0000    2.5000    3.0000

以下のような操作も可能である.

>> G=[E F]
G =
     1    0    5    4
     0    1    4    5
>> H=[E; F]
H =
     1    0
     0    1
     5    4
     4    5
ワークスペース変数の操作

ワークスペース変数を操作する主なコマンドには以下のようなものがある.

また既に入力したコマンドを再度利用したいときは,カーソル(矢印)キーを利用すると良い.

8.2 MATLABスクリプト

高級な電卓として利用するだけならワークスペースに打ち込んでも良いが,少し複雑になると,いちいち手入力をするのは煩わしい.また入力したものは何らかの形で再利用できると便利である.この様な時には,コマンドの並びをスクリプトとして保存することで実現できる.このスクリプトは,拡張子.mのファイルに記述されるため,M-ファイルとも呼ばれる.

M-ファイルエディタ

コマンドラインにおいて,editと入力するとM-ファイルエディタが立ち上がる.

>> edit 

また,ファイル名を指定してM-ファイルエディタを開くことも可能である.例えば,既にtest.mというファイルが存在する場合は

>> edit test

と入力すればよい.

例題1 連立方程式の解

以下のスクリプトをtest1.mに記述し実行せよ.以下の例は,第5回の連立方程式の解を求めるのと同等のスクリプトである.Excelに比べて如何に簡単に出来てしまうかがわかるだろう.

【ヒント】 A\b

A\bは,inv(A)*b の意味である.また,\(バックスラッシュ)は,¥(円記号)と同じものであり,フォントの種類により,どちらかの字体が表示される.

【ヒント】 パスを通す

自分で作ったスクリプトを実行するには.mを除いたファイル名を入力すれば良いが,カレントディレクトリにファイルを置くか,または,実行パスが通っている必要がある.簡単にするためには,自分のM-fileを置くための場所(ディレクトリ)を作り,そこにパスを通すとよい.

【追加情報 6/7】

センターの環境の場合,マイドキュメントの下にmatlabというフォルダを作ると良い.このフォルダは,MATLABからは以下のディレクトリとして認識される.

z:\.windows2000\matlab

MATLABのファイルメニューからこのディレクトリを実行パスに追加すれば,ここに置いたM-fileはいつでも実行可能になる.

【ヒント】 M-ファイル記述におけるTips

コマンドが長くなる際には,"..."を利用することにより,複数の行にわたってコマンドを記述することが出来る.

Calculation_Result = ...
      sin(psi) * cos(theta) * sin(phi) ... 
    - sin(psi) * cos(theta) * sin(phi);

行列を定義する際には,適宜改行を入れることにより;(セミコロン)と同様の結果が得られる.直観的には改行を入れた方が理解しやすい.

A=[1 8 4 6; 4 1 2 9; 3 2 7 3; 9 6 6 4];
A=[ 1 8 4 6
    4 1 2 9
    3 2 7 3
    9 6 6 4 ];

記号%はコメント文を作成するために利用される.%以降はスクリプト実行時には無視される.スクリプトで記述する際には,特に結果を確認したい場所でない限り,文末には;(セミコロン)をつけた方が良い.

サブルーチンとしての利用

作成したM-fileは,他のプログラムから呼び出すことが可能である.ワークスペースからの実行と同様に,カレントディレクトリに留意する必要がある.

制御文

制御文としては,for, while, ifなどが利用できる.これらの制御文では,endを記述することによって適用範囲を指定する.

for i=1:5
  for j=1:5	
    A(i,j)=1/(i+j-1)
  end
end		
while time<10
  result = cos(omega*time);
  time = time + 0.1;
end
if I == J
  A(I,J) = 2;
elseif abs(I-J) == 1
  A(I,J) = -1;
else
  A(I,J) = 0;
end
ディレクトリ操作

M-fileを実行する際には,カレントディレクトリがそのM-fileがあるディレクトリとなっているか,或いはM-fileがあるディレクトリにパスが通っている必要がある.

困ったときは

あるコマンドの使い方を調べたいときは,

>> help <コマンド名>

と入力することにより,コマンドの意味や引数などを確認することが出来る.

>> help plot

  PLOT 線形プロット

  PLOT(X,Y) は、ベクトル X に対してベクトル Y をプロットします。X または Y
  が行列の場合、行列の行または列のどちらかに対して、ベクトルがプロット
  されます。X がスカラで Y がベクトルの場合は、length(Y) のデータを接続さ
  れない点としてプロットします。

  PLOT(Y) は、Y のインデックスに対して Y の列をプロットします。Y が複素数の
  場合、PLOT(Y) は PLOT(real(Y),imag(Y)) と等価です。それ以外の PLOT の使用
  では、虚部は無視されます。

  PLOT(X,Y,S) を使って、ラインタイプ、プロットシンボル、カラーを指定できます。
  S は、つぎの3列のいずれかまたはすべてのうちの1要素によるキャラクタ文字
  列です。 <以下省略> 

また,MATLABはヘルプファイルやPDFドキュメントが充実しているため,これらを活用すると良い.

8.3 グラフィクス

グラフ描画の基本

グラフ描画の基本は,以下のように2つの配列を引数としたplot関数を利用することである.

A=(0:0.001:20);
B=sin(A);
plot(A,B)
例題2 グラフ描画

以下のスクリプトをplot_1.mとして作成し,実行せよ.

【参考】 アニメーション

【この】ようにすると動作のスムーズなアニメーションを作ることができる.

課題

第7回で,Excelで作成した2つの課題をMATLABにより実現せよ.この時のM-fileをメールに添付して提出せよ.ファイル名の命名規則は

  1. R8-1-年組番号.m
  2. R8-2-年組番号.m

とする.ファイル名はすべて半角英数字であることに留意せよ.

提出期限は来週月曜午後5時までとする.

【追加情報 6/7】

第7回の課題の解答例をアップした.第7回のページを見よ.


Further Readings

MATLABが使いこなせれば,今後,様々な局面で非常に有利となる.是非書籍やインターネットなどで自学自習をして欲しい.尚,以下の書籍が参考になる.

この他にも数多くの書籍が出版されている.また,センターにも簡単なテキストがある.

次週予告

次回はSIMULINKを用いた簡単な演習を行う.SIMULINKについての必要最小限度の説明は行うが,細かな言語規則についての説明をすることはしないので,情報科学センターのテキストやインターネット等で予習をしておくこと.

謝辞

本講義資料を作成するに当たって,機械工学科の椎葉太一先生より内部マテリアルをご提供いただいた.また,情報科学センターテキスト(機械情報工学科の阿部直人先生による)を参考にさせていただいた.ここに篤く御礼申し上げる.