演習資料01

信号とシステム演習
山梨大学 電気電子工学科
2015年度
今日の演習内容
• MATLAB入門(その1)
講義がまだ始まっていない
今回は講義・演習で使用する科学技術計算ソフト
ウェアMATLABの簡単な使用法を説明
MATLABの特徴
データの定義
簡単な計算
スクリプトM-ファイル
MATLABの高度な使用法は,必要に応じて次回
以降の演習でも説明して行く予定
262053 信号とシステム演習
2
MATLAB(MATrix LABoratory)とは何か?
• 米国 The MathWorks, Inc. の登録商標
• The Language of Technical Computingがキャッチ
フレーズのプログラミング言語
(sin(2*pi*x)/(2*pi*x)*sin(2*pi*y)/(2*pi*y))**2
0.9
0.8
0.7
0.6
1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0.5
0.4
0.3
0.2
0.1
1
0.5
-1
0
-0.5
0
-0.5
0.5
1
-1
262053 信号とシステム演習
3
MATLABの表示画面
現在の
フォルダ
の中身
コマンドウィンドウ
ここに命令を入力
する
262053 信号とシステム演習
使用してい
る変数など
の一覧
4
MATLABの利点(1)
• 全ての数値を行列として扱う
MATLABでは行列,ベクトル,スカラを意識せずに
使用可能
アルゴリズム(計算方法)そのままにプログラム
可能で,ベクトル演算の多い科学技術計算に適
する
研究・開発を大幅に効率化できる
262053 信号とシステム演習
5
MATLABの利点(2)
• 変数管理はMATLABまかせでよい
通常のプログラミング言語はプログラマが全ての
変数の型と記憶領域を管理→煩雑
• グラフィックス機能が充実
C言語と比較し
てみると分かる
結果を容易に視覚化可能
• 豊富な技術計算用ライブラリが使用可能
• 正規版は高価(1ライセンス20万円近く)だが,
学生版は1万円以下で手に入る
262053 信号とシステム演習
6
互換ソフトウェア Octave
• MATLAB互換なフリーソフトのOctaveも存在
http://www.octave.org/
誰でも自由に利用可能
Linux版/Windows版/Mac版
学習用にはOctaveで十分
Windows版バイナリのダウンロードURL:
https://ftp.gnu.org/gnu/octave/windows/
最新のバージョン4.0.0は,GUI表示が標準となり
使いやすくなった.ただし,日本語のフォルダ名
の扱いにまだ不具合がある.
262053 信号とシステム演習
7
Octaveの表示画面
MATLAB同様,コマンドウィンドウ
やワークスペースなどがある
262053 信号とシステム演習
8
類似ソフトウェア Scilab
• MATLAB類似のフリーソフトウェア Scilab
http://www.scilab.org/
MATLABと良く似ているが細部が異なるコマンド
MATLABプログラム→Scilabプログラム の変換機
能あり.逆方向の変換は無い
GUIはシンプルだが,Octaveより安定している
デモプログラムが豊富
262053 信号とシステム演習
9
Scilabの表示画面
MATLAB同様,コンソール(コマン
ドウィンドウ)や変数ブラウザ
(ワークスペース)などがある
262053 信号とシステム演習
10
MATLAB:データの定義(1):スカラ変数
• スカラ(数値)変数は通常のプログラミング言語と同
様に定義可能
a=1
a=1; (セミコロンの有無で何が違うか?)
• スカラも1x1行列であるため以下でもよい
a=[1]
a=[1];
• 変数名の大文字小文字は区別される
(Aとaは違う変数)
• 予約変数(永久変数という)との重複に注意
pi: 円周率p
Inf: 無限大∞
262053 信号とシステム演習
11
MATLAB:データの定義(2):ベクトル変数
• 行ベクトルの定義方法
a=[1,2,3,4,5]
a=[1 2 3 4 5]
各要素はスペースまたはカンマ「,」で区切る
• 連続数列の定義方法
a=1:5 (a=[1 2 3 4 5]と同義)
y=0: pi/4: pi (真ん中の値が増分)
• 列ベクトルの定義方法
b=[1;2;3;4;5]
各要素はセミコロン「;」で区切る
a=1:5;b=a’; (「’」はベクトルの転置を表す)
行ベクトルを定義して,転置しても結果は同じ
262053 信号とシステム演習
12
MATLAB:データの定義(3):行列変数
• 行列は各行を改行または「;」(セミコロン)で区切っ
て定義
d=[1 2 3;1 2 3;1 2 3] (3行3列の行列)
d=[1 2 3
d=[1 2 3;
123
1 2 3;
1 2 3]
1 2 3]
• ベクトルを使って定義することも可能
a=1:3; d=[a;a;a]
• 行列の転置もベクトルと同じ「’」を使う
e=d’
262053 信号とシステム演習
13
MATLAB:データの定義(4):問1
• MATLAB上で,以下のベクトルを定義せよ
1
2
𝑥= 5 4 3 2 1
𝑦= 3
4
5
262053 信号とシステム演習
14
MATLAB:データの定義(5):問2
• MATLAB上で,以下の行列を定義せよ
(MATLABでは虚数単位はi か j)
1 2
𝐴= 4 5
7 8
3
6
0
1 + 2𝑗
𝐵=
2−𝑗
262053 信号とシステム演習
3 − 2𝑗
4 + 3𝑗
15
MATLAB:データの定義(6):MATLAB関数
• 組込関数を使ってもデータ定義が可能
zeros(m,n) m行n列の零行列を作成
ones(m,n) m行n列の要素が全て1の行
列を作成
eye(m,n) m行n列の単位行列を作成
• 第2引数nは省略可能(m行m列になる)
262053 信号とシステム演習
16
MATLAB:データの定義(5):問3
• 以下のベクトルや行列を定義せよ
• 零ベクトル
要素数5の行ベクトル
要素数5の列ベクトル
• 要素が全て1の行列
3行5列の行列
• 単位行列
3行3列の行列
262053 信号とシステム演習
17
MATLAB:データの操作
• ベクトルや行列の要素の取り出し,入れ替え,
追加を行うことが出来る
A=[1 2 3; 4 5 6; 7 8 9]
Aの3行2列の要素に0を代入する
A(3,2)=0
a=A(:,3) (:は「全ての要素」を表す)
Aの3行をベクトルbに代入する
b=A(3,:)
B=zeros(3); C=[A B]; D=[A;B]
AとBを横に並べて
新しい行列Cを作る
Aの3列をベクトルa
に代入する
AとBを縦に並べて新
しい行列Dを作る
262053 信号とシステム演習
18
MATLAB:データの操作(2):問4
• 3×3の単位行列と零行列を組み合わせて
12×12の単位行列を生成するにはどのよう
にコマンドを入力すればよいか?
262053 信号とシステム演習
19
MATLAB:データの管理(1)
• MATLABではデータを記憶するメモリ領域を自動
的に確保する
• この領域をワークスペースと呼ぶ
• ワークスペースはMATLAB終了またはclearコマン
ド実行まで保持される
• ワークスペースの中身は,表示画面のワークス
ペース欄に表示されている
• whosコマンドを使うと,コマンドウィンドウにワー
クスペース情報を表示させることが出来る
• clear <変数名>で特定の変数をクリアできる
262053 信号とシステム演習
20
MATLAB:データの管理(2):問5
• whoコマンドでワークスペース情報を表示せ
よ
• whosコマンドでワークスペース情報を表示せ
よ(whoの出力とどう違うか?)
• clearコマンドで特定の変数を消去し,
who/whosで消去できていることを確認せよ
• clearで全ての変数を消去せよ
262053 信号とシステム演習
21
MATLAB:四則演算(1)
• 行列の四則演算は以下の演算子を使用
行列の加算:「+」
行列の減算:「-」
行列の乗算:「*」
行列の除算:「/」「\(または¥)」 (注)
要素ごとの乗算:「.*」
要素ごとの除算:「./」
(注) 後述の連立方程式の解法の所に関係している
262053 信号とシステム演習
22
MATLAB:四則演算(2):問6
• 以下の計算をMATLABを使って実行せよ
1 6 3
7 2 −1
7 0 2 + 6 8 3
4 5 9
9 2 2
2 6
2 8 7
8 3
6 3 1
7 1
8 0
3 6
𝐴=
,
𝐵=
5 7
−2 1
𝐴 .∗ 𝐵
262053 信号とシステム演習
23
MATLAB:その他の行列演算(1)
• 四則演算以外にも以下の演算が可能
行列の左右反転:fliplr(M)
行列の上下反転:flipud(M)
行列を反時計回りに90度回転:rot90(M)
逆行列:inv(M)
262053 信号とシステム演習
24
MATLAB:その他の行列演算(2):問7
• 問6の結果に対して様々な行列演算を実行せ
よ
262053 信号とシステム演習
25
MATLAB:連立方程式の解法(1)
• MATLABを使うと簡単に連立方程式を解くこと
が出来る
𝑎𝑥 + 𝑏𝑦 = 𝑝
𝑐𝑥 + 𝑑𝑦 = 𝑞
𝑎
𝑐
𝑎
𝑐
𝑏
𝑑
−1
𝑎
𝑐
𝑏 𝑥
𝑎
=
𝑑 𝑦
𝑐
1 0 𝑥
𝑎
=
0 1 𝑦
𝑐
𝑝
𝑏 𝑥
= 𝑞
𝑦
𝑑
逆行列はinvで計算できる
𝑥
𝑎
𝑦 = 𝑐
262053 信号とシステム演習
𝑏
𝑑
𝑏
𝑑
−1
−1
𝑏
𝑑
−1
𝑝
𝑞
𝑝
𝑞
𝑝
𝑞
26
MATLAB:連立方程式の解法(2):問8
• 次の連立方程式をMATLABを使って解け
2𝑥 + 3𝑦 = 4
𝑥 − 2𝑦 = 2
(注) 行列形式の連立方程式 𝐴𝑥 = 𝑏 に対し,解は
𝑥 = 𝐴−1 𝑏.対応するMATLABのコマンドは,
x=inv(A)*b.これを,x=A¥b と書いても良い.
𝑦, 𝑐 が横ベクトルの場合,𝑦𝐴 = 𝑐 の解は
y=c*inv(A) だが,これを,y=c/A と書いても良い.
262053 信号とシステム演習
27
MATLAB:数学関数
• MATLABには様々な数学関数が組み込まれ
ている
abs, sqrt
real, imag, conj
round, fix, floor, ceil, sign, rem
sin, cos, tan, asin, acos, atan, atan2
sinh, cosh, tanh, exp, log, log10, bessel, gamma,
rat 他
262053 信号とシステム演習
28
MATLAB:数学関数(2):問9
• オンラインヘルプを使って各種数学関数の機
能と使い方を調べよ
262053 信号とシステム演習
29
制御構文:比較演算子
<
より小さい
<=
以下
>
より大きい
>=
以上
• 比較演算子を行列変
数に適用する場合、
要素毎に真偽が判断
され、対応する要素
が真なら1,偽なら0の
行列が返される
>> x=[1 2 3 4 5];
==
~=
等しい
等しくない
>> L=(x<3)
L=
1 1 0 0 0
262053 信号とシステム演習
30
問
• x=[-1 0 1 2 -3] として,以下のコマンドを
MATLABで実行し,結果を確認せよ.
x<0
x<=0
x>0
x>=0
x==0
x~=0
262053 信号とシステム演習
31
補足
• x(x<0) のようにベクトルのインデックスを指定
する部分に条件式を代入すると,条件を満た
すベクトルの成分のみが抽出される
• 例 x=[-1 0 1 2 -3] の場合
x(x<0) の結果は [-1 -3]
x(x>0) の結果は [1 2]
262053 信号とシステム演習
32
ファイル処理:スクリプトMファイル
• MATLABに実行させたい一連の処理を記述し
たテキストファイル
• 拡張子は.mとする
• ファイルのあるディレクトリで拡張子の前だけ
(ejwn.mならejwn)を入力して実行する
• MATLABのエディターには実行ボタンがある
実行結果
スクリプトMファイル(myavg.m)
>> myavg
x=[1 2 3 4 5];
y=sum(x)/length(x);
ans=3
262053 信号とシステム演習
33
スクリプトM-ファイルの作り方
②「エディター」タブが開いて
エディター画面が現れる
⑤「実行」ボタンを押
すと実行される
① 新規スクリプトボタン
をクリックする
③ここにスク
リプトを入力
④スクリプトを入力
したら「保存」ボタン
で保存する
⑥結果はここに
表示される
262053 信号とシステム演習
34
演習課題
• 以下の連立方程式を解くスクリプトM-ファイルを
「ex0101.m」という名前で作成し,実行結果を確認する
2𝑥 + 3𝑦 − 𝑧 = 5
𝑥 − 𝑦 + 4𝑧 = 2
−2𝑥 + 5𝑦 − 3𝑧 = −2
• 作成したスクリプトM-ファイルをe-learning システムを用
いて提出する
262053 信号とシステム演習
35