2015年4月30日 阿部正英 5月1日 川又政征

MATLAB講習会
ディジタル信号処理補講
2015年4月30日
5月1日
MATLAB講習会
阿部正英
川又政征
1
内容
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
なぜ MATLAB か?
MATLABの起動と終了
電卓的な使い方,スカラー,ベクトル,行列,複素数の
演算
プログラミングと実行
データの視覚化と印刷
関連書籍とマニュアル
参考ウェブページ
デモンストレーション
MATLABの入手方法
Octaveについて
MATLAB講習会
2
1.なぜ MATLABか?

MATLAB = Matrix Laboratory

科学技術計算の標準ツール

信号処理,画像処理,通信,制御,数値計算の実質的世
界標準

スカラー,ベクトル,行列,複素数の数式風の簡潔な記
述と演算が可能である.

信号処理のための豊富な関数を準備している.

計算結果の視覚化に優れている.
MATLAB講習会
3
MATLABはどれくらい簡単か?
(1~10の和を求める場合)

C言語では

include <stdio.h>
void main(void)
{
int result;
int num;
num = 10;
result = sum(num);
printf("%d¥n", result);
}
int sum(int num)
{
int sum = 0;
int i;
MATLABでは
N =10
x = 1:N
result = sum(x)

もっと簡単にすると
result = sum(1:10)
for(i = 0; i <= num; i++) {
sum = sum + i;
}
return sum;
}
MATLAB講習会
4
2.MATLABの起動と終了

起動(計算機大演習室の場合):
クリック
MATLAB講習会
5
2.MATLABの起動と終了

終了 : MATLABのプロンプトに
exit または quitとタイプ
>> exit
または
>> quit
MATLAB講習会
6
デスクトップ環境
Command Window
(主にここを使う)
Workspace
(定義された変数の一覧)
MATLAB講習会
7
注意事項

計算機大演習室のMATLABを利用して
ログアウトするとき,
すべてのMATLABのウィンドウを閉じてから,
ログアウトすること
MATLAB講習会
8
MATLABの基本的動作

1.
2.
3.
4.
MATLABは,命令を一つずつ解釈・実行す
る対話型システム
プロンプト(>>)を表示する.
命令(あるいはM-ファイル)を一つ読みこむ.
命令を解釈し,実行する.
1.にもどる.
MATLAB講習会
9
3.電卓的な使い方


コマンドラインからの命令を一つずつ入力するこ
とで,計算やグラフの表示などの命令が実行さ
れる .
10+20/2-5×3 を計算したいとき
>> 10+20/2-5*3
と入力する.ここで return(enter) キを押すと
ans =
5
MATLAB講習会
10
代入
>> x=3
x=
3
>> x=3; %表示しないときに ; をつける
>> x+3
ans =
6
(注: %以下はMATLABの注釈であるため,実行
のためにタイプする必要はない)
MATLAB講習会
11
複素数
複素数も実数と同様に計算することができる.
虚数単位には i または j を用いる.
>> (3+1i)*(2-3i)
注意:
ans =
最新のMATLABでは,入力
時の虚数単位として「1i」を
9.0000-7.0000i
用いることになった.
左の例では
>> x=1+2i; y=3+4i;
(3+1i)*(2-3i)
と入力する.
>> z=x+y
z=
4.0000 + 6.0000i

MATLAB講習会
12
ベクトル
変数の宣言をせずにベクトルを利用できる.
>> x=[1 3 5] %ベクトルxの定義
x=
135
>> x(3)
%xの3番目の要素
ans =
5
>> size(x) %xのサイズ
ans =
1 3
MATLAB講習会

13
ベクトルのインデックスに
ついての注意

MATLABのベクトルのインデックスは
1から始まる.0から始まるのではない.
x(0), x(1), x(2), x(3), x(4), …

行列の場合も X(1,1) から始まる.
MATLAB講習会
14
関数
>> sqrt(9) % 平方根
ans =
3
>> sin(pi/6) %正弦関数,ただし pi は円周率
ans =
0.5000
>> log10(5) % 常用対数
ans =
0.9660
MATLAB講習会
15
ベクトルの演算
>> x=[1 3 5];
>> y=[2 4 6];
>> x+y
ans =
3 7 11
%xへ代入
%yへ代入
%加算
>> y-x
ans =
1 1 1
%減算
>> x.*y
ans =
2 12 30
%要素ごとの乗算
MATLAB講習会
16
ベクトルの演算
>> x./y
%要素毎の除算
ans =
0.5000 0.7500 0.8333
>> sqrt(x)
%平方根
ans =
1.0000 1.7321 2.2361
MATLAB講習会
17
ベクトルの代入
>> x=0:0.5:3; %初期値:増分:最終値
>> y=1:5
%初期値:最終値
ただし増分1
y=
12345
>> z=10:-1:5;
%負の増分
MATLAB講習会
18
行列の代入
>> A=[1 2 3; 4 5 6; 7 8 9]
A=
123
456
789
>> A(3,2)
%Aの3行2列の要素
>> size(A)
%Aのサイズ
MATLAB講習会
19
行列の要素ごとの演算
>> A=[1 2 3;
4 5 6;
7 8 9 ]; %代入
>> sqrt(A)
%Aの各要素の平方根
ans =
1.0000 1.4142 1.7321
2.0000 2.2361 2.4495
2.6458 2.8284 3.0000
MATLAB講習会
20
行列の演算
A+B
A-B
A*B
A/B
A.*B
A./B
A’
inv(A)
%和
%差
%積
%AにBの逆行列をかける
%要素ごとの積
%要素ごとの除算
%転置
%Aの逆行列
MATLAB講習会
21
特別な行列
ones(m,n) %要素がすべて1のmxn行列
zeros(m,n) %要素がすべて0のmxn行列
eye(m,n) %単位行列
A(m,:)
%第m行の行ベクトル
A(:,n)
%第n列の列ベクトル
MATLAB講習会
22
関係演算子による要素の比較

関係演算子による実行結果は,0,1のロジカル
データとなる.つまり,要素が関係式を満たして
いれば1を,満たしてなければ0を出力する.
A==B
A~=B
A<B
A<=B
A>B
A>=B
AとBは等しい
AとBは等しくない
AはBより小さい
AはBより小さいか等しい
AはBより大きい
AはBより大きいか等しい
MATLAB講習会
23
関係演算子による要素の比較
>> n = [-2 -1 0 1 2 3];
>> delta = n==0
%nの要素中から0に等しい
%要素を検出してdeltaに代入
delta =
0
0
1
0
0
0 %検出結果
>> u0 = n>=0
u0 =
0
0
1
%nの要素から0以上の要素を
%検出してu0に代入
1
1
1 %検出結果
MATLAB講習会
24
文字列
変数とベクトル,行列に文字列も入れることができる.
>> x = 'Hello World'
x=
Hello World
>> A = ['Digital' 'Signal' 'Processing'];
>> A(1)
ans =
D
>> A(5)
ans =
t

MATLAB講習会
25
Help!
関数などの説明がほしいときは help
>> help sin
sin - ラジアン単位の引数の正弦
この MATLAB 関数 は、X 要素の正弦を返します
。関数 sin は、配列を要素単位で計算します。この
関数は、実数入力と複素数入力の両方を受け入れ
ます。
(以下省略)

MATLAB講習会
26
Help!

単語をさがしたいときには lookfor
>> lookfor fourier
fft
fft2
fftn
ifft
(以下省略)

- Discrete Fourier transform.
- Two-dimensional discrete Fourier Transform.
- N-dimensional discrete Fourier Transform.
- Inverse discrete Fourier transform.
その他に helpwin と doc がある.
MATLAB講習会
27
4.プログラミングと実行



プログラミングのために,M-ファイルを用いる.
M-ファイルはコマンドや関数を実行したい順に記
述したテキスト形式のファイル(拡張子: .m)であ
り,MATLAB付属のエディタを使って作成する.
M-ファイルに,以下の2種類の形式がある.


スクリプトM-ファイル: コマンド・関数をまとめて処理
する.
ファンクションM-ファイル: 入力引数と出力引数を伴
うユーザ定義の関数を作成する.入出力引数の関係
を記述した function で始まる関数宣言の行が必要.
MATLAB講習会
28
エディタの起動方法

新規のM-ファイルを作成
する場合はeditコマンドを
実行し,エディタを起動す
る.
>> edit

指定したM-ファイルをエ
ディタで開くためには,次
の書式で実行する.
コマンドウィンドウの上部が上のよう
なエディターのウィンドウとなる
>> edit filename
MATLAB講習会
29
制御文

MATLABでは多くのプログラミング言語で使用される制御
文を使うことができる.

代表的な制御文
for
指定回数の繰り返しステートメント
while
不定回数の繰り返しステートメント
if , elseif, else 条件実行ステートメント
switch, case
式に基づき、case文で実行を切り替え
MATLAB講習会
30
スクリプトM-ファイル
(****.mという拡張子のテキストファイル)


スクリプトM-ファイルを使うことで,一連のコマン
ド・関数をまとめて処理することができる.
1~10までの和を求めるスクリプトM-ファイルの
例:ファイル名 keisan.m
ソースリスト
clear all
x=0;
for k=1:10
x=x+k;
end;
x
MATLAB講習会
31
スクリプトM-ファイルの実行


スクリプトM-ファイルを実行するためには,
Command Windowで単に拡張子(.m)なしで
ファイル名を入力する.
スクリプトM-ファイル:keisan.mの実行
>> keisan
x=
55
MATLAB講習会
32
ファンクションM-ファイル



ファンクションM-ファイルを使うことで,入力引数と出力引
数を伴う,ユーザ定義の関数を作成することができる.
三辺の長さ a, b, c が与えられた三角形の面積を求める
関数 sankakuの例
ファンクションM-ファイル: sankaku.m
function [x] = sankaku(a,b,c)
s=(a+b+c)/2;
x = sqrt(s*(s-a)*(s-b)*(s-c));
MATLAB講習会
33
ファンクションM-ファイルの実行
ファンクションM-ファイルを実行するためには,
スクリプトM-ファイルあるいはCommand
Window から呼び出す.
>> a=5; b=4; c=3
>> menseki = sankaku(a,b,c)

menseki =
6
MATLAB講習会
34
5.データの視覚化と印刷

MATLABはデータの視覚化のための豊富な関数を持って
いる.
plot
y=f(x)の線形プロット
stem
y=f(x)の棒状のプロット
semilogx
片対数プロット
semilogy
片対数プロット
loglog
両対数プロット
title
グラフのタイトル
xlabel, ylabel
座標軸のラベル
axis
座標軸の範囲
grid
グラフの格子
MATLAB講習会
35
プロットの例
t=0:0.01:2*pi;
y = sin(t);
plot(t,y)
title('Example of Plot')
xlabel('Time t')
ylabel('y=sin(t)')
axis([0 2*pi -1.5 1.5])
grid
MATLAB講習会
36
印刷

印刷したいウィンドウを選択し,メニューの
ところで,プリンタアイコンをクリックする.



グラフの場合は,グラフの左上のプリンタアイ
コンをクリックする.
エディターの場合は,そのウィンドウを選択し
てから,左上のプリンタアイコンをクリックする.
コマンドウィンドウの場合は,印刷したい範囲
を選択し,右クリックして「選択を印刷」を選ぶ.
MATLAB講習会
37
6.講義のウェブページ


川又・阿部研究室のページ
http://www.mk.ecei.tohoku.ac.jp/dsptext/
教科書中のプログラムのソースリストがダウン
ロード可能.
ディジタル信号処理のレポートを作成するため
には,このページをみれば十分である.
MATLAB講習会
38
7.関連書籍と関連のウェブページ


関連書籍
工学部生協で様々なものが売っているの
で見て下さい.
MathWorks社(開発元)のホームページ
MATLABと関連製品の紹介,使い方,関連
書籍など
http://www.mathworks.co.jp/
MATLAB講習会
39
8.デモンストレーション
>> demo
 上のようにタイプす
ると,MATLABのデモ
を見ることができる.
 デモには,MATLABの
使い方,数値計算,
グラフィックス,ゲーム
などの多数の例があ
る.
MATLAB講習会
40
9.MATLABの入手方法



MATLAB 学生版ソフトウェア
(日本語版)が販売されている.
大学生協で注文 本体価格8,950円(税別)
多数の重要なToolboxを含み,機能が豊富な製
品.
https://www.mathworks.co.jp/programs/nrd/buy
-matlab-student.html?s_eid=ppc_6435
MATLAB講習会
41
10.Octaveについて



Octaveは,MATLABとほぼ同じ文法で数値計算が実行
できるフリーソフト
MATLABは高機能・高価格
Octaveは無料,しかしライブラリは少ない.
Octaveについては,以下のページを見てほしい.
川又研究室内のOctaveの紹介:
http://www.mk.ecei.tohoku.ac.jp/dsptext/octave/
Octave公式ページ(英文):
http://www.gnu.org/software/octave/
MATLAB講習会
42
最後に:
MATLABプログラミングの極意




見る前に跳べ.
Leap Before You Look
W. H. Auden
考える前に探せ.
Find Before You Think
M. Kawamata
まず探せ.なければ考えよ.
MATLABには多数の優れた関数がある.
ループをできるだけ使うな
右の例はどっちが簡単?
MATLAB講習会
x=0;
for k=1:10
x=x+k;
end;
x
x = sum(1:10)
43
Do you speak MATLAB?
http://www.mathworks.com/programs/ltc/ltcad.html?s_cid=ad_ltc_matlab
MATLAB講習会
44