信号とシステム演習 山梨大学 電気電子工学科 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
© Copyright 2024 ExpyDoc