MATLAB 講習会(1) -MATLAB概説-

Similar presentations


Presentation on theme: "MATLAB 講習会(1) -MATLAB概説-"— Presentation transcript:

1 MATLAB 講習会(1) -MATLAB概説-
担当:三輪    内容  ・ウインドウ環境 ・演算の基礎 ・データ入出力 ・プログラミング ・グラフィック ・ヘルプ ・ GUI

2 数値計算,ビジュアリゼーション,プログラミングが可能なインタープリタ型ソフトウエア
MATLAB 数値計算,ビジュアリゼーション,プログラミングが可能なインタープリタ型ソフトウエア 外部のハードウエアから MATLAB 環境へダイレクトに生の計測データを取得可能 データ収集 信号処理、画像処理、制御系設計、最適化、記入工学、数学、ニューラルネットワーク ツールボックス ユーザスタンドアロンの MATLAB アプリケーションの生成と配布 アプリケーション開発

3 ウインドウ環境 –メインウインドウ– ディレクトリウインドウ 変数のworkspace コマンドウインドウ コマンドヒストリ

4 ウインドウ環境 –プログラムの例– 関数定義 %記号 if 文 ピリオド コロン For 文 セミコロン ‘ 記号 カギ括弧 括弧 演算記号

5 MATLABの特徴 対話型インターフェイス データの扱いが簡単 変数,配列の宣言は不要 行列データを高速,簡便に取り扱える
簡易なプログラム(ソースが公開) 強力なデバッグ機能による生産性の向上 豊富な2次元,3次元プロット 行列データを高速,簡便に取り扱える スカラー、ベクトル、行列を統一的に取り扱える 繰り返し演算の低減、計算のベクトル化

6 データ型 double - 倍精度(64bit IEEE浮動小数点) single - 単精度
uint 符号なし8ビット整数 (16,32,64も同様) int 符号付き8ビット整数 (16,32,64も同様) char 文字列 logical 論理値 数値は指定しない限り倍精度となる >> a=1 >> a=1 a = 1 >> a=1 a = 1 >> whos a Name Size Bytes Class a x double array Grand total is 1 element using 8 bytes >> a=1 a = 1 >> whos a >> a=2j >> a=2j a = i >> >> a=2j a = i >> whos a Name Size Bytes Class a x double array (complex) Grand total is 1 element using 16 bytes 変数の値が表示 虚数単位はj もしくは i 数値に続いて記入可能 表示時には虚数単位はi 倍精度で定義 倍精度の複素数 変数の詳細表示 変数の型宣言は必要としない

7 行列の定義(1) -入力による定義- 要素の全体はかぎ括弧 [ ] で囲む 列(横)の区切り 空白 または , カンマ
列(横)の区切り    空白 または , カンマ 行(縦)の区切り    ; セミコロン または リターン  >> A=[1 2 3;4 5 6] >> A=[1 2 3;4 5 6] A = >> A=[1 2 3 4 5 6] >> A=[1 2 3 4 5 6] A = >> A=[1 2 3 >> A=[ ] >> A=[ ] A = [ ] 空行列 >> A=[1 2 3]; >> A=[1 2 3]; >> 表示の抑制

8 行列の定義(2) -関数による定義- m行n列の行列を生成 help elfmat zeros(m,n) ゼロ行列 randn(m,n)
正規分布乱数 ones(m,n) 1行列 rand(m,n) 一様分布乱数 eye(m) 単位行列 linspace 線形等間隔ベクトル diag(v) 対角行列 複素転置 m行n列の行列を生成 >> zeros(2,3) ans = >> zeros(2,3) >>diag([1 2 3]) ans = >>diag([1 2 3]) >> [1 2 3]' >> [1 2 3]' ans = 1 2 3 常に行列の形をイメージすることが重要

9 行列の定義(2) 線形横ベクトルの定義 初期値:増分:最終値 線形縦ベクトルの定義 -関数による定義- >> 1:2:10
ans = >> 1:2:10 >> (1:5)' ans = 1 2 3 4 5 >> (1:5)' >> 1:5 >> 1:5 ans = >> 5:-1:1 ans = >> 5:-1:1 線形縦ベクトルの定義

10 [A B] [A ; B] 行列の定義(2) [ ] は行列の連結を行う関数 -行列の連結- 横の連結 縦の連結
A,Bの行数が異なるとエラー A,Bの列数が異なるとエラー >> [[1:4; ] zeros(2,3) ;rand(3,7) ] >> [[1:4; ] zeros(2,3) ;rand(3,7) ] ans =

11 行列の定義(3) load, dlmread, textread, xlsread, wk1read,
-ファイルから定義- インポート関数を利用 load, dlmread, textread, xlsread, wk1read, imread, wavread, aviread 空白区切り 任意区切り  フォーマット付数値  Excelファイル Lotus123ファイル 画像ファイル  waveファイル   aviファイル >> type blank.txt 1 3 4 4 0 2 3 4 5 2 1 2 >> load blank.txt >> blank blank = ファイルの読み込み ファイル blank.txt の内容確認

12 行列の要素抽出 A(m ,1:3)  A(1:3 ,n)  A(1:3 ,1:3)  A( m , n ) A( , )
行方向 列方向 行列Aのm行n列番目の要素 m, n にベクトルを指定することが可能 A(m ,1:3)  [A(m,1) A(m,2) A(m,3)] 横ベクトルの抽出 A(1:3 ,n)  [A(1,n) ; A(2,n) ; A(3,n)] 縦ベクトルの抽出 A(1:3 ,1:3)  [A(1,1) A(1,2) A(1,3); A(2,1) A(2,2) A(2,3); A(3,1) A(3,2) A(3,3);] 行列の抽出

13 行列の要素抽出 A = 1 2 3 4 5 6 >> A(:) ans = 1 4 2 5 3 6 >> A(:)
>> A(:) ans = 1 4 2 5 3 6 >> A(:) >> A( 2 , [ 1 3 ] ) ans = >> A( 2 , [ 1 3 ] ) 横ベクトルを指定 全要素を縦ベクトルとして変換 >> A( [ 1 2 ] , [ 2 3 ] ) ans = >> A( [ 1 2 ] , [ 2 3 ] ) 行列を指定 >> A( : , 2 )=0 A = >> A( : , 2 )=0 >> A( 2 , : ) ans = >> A( 2 , : ) 二行目の全要素を指定 特定要素の変更

14 文字変数 行列要素が実数か、ASCIIコードかの違い 文字定数は ' シングルコーテーション ' でくくる
>> A='abcde' >> A='abcde' A = abcde >> size(A) >> size(A) ans = >> A(2:3) >> A(2:3) ans = bc >> A' >> A' ans = a b c d e >> [A(1:3) '0' A(4:5)] >> [A(1:3) '0' A(4:5)] ans = abc0de >> [A ; '12345'] >> [A ; '12345'] ans = abcde 12345 文字変数も行列として取り扱う 行列要素の指定により文字を抽出 [ ]により文字の結合 行列要素が実数か、ASCIIコードかの違い

15 四則演算記号は行列に対する演算を意味する
行列演算(1) 四則演算記号は行列に対する演算を意味する A =        B = >> A+B >> A+B ans = >> A-B >> A-B ans = >> A*B ans = >> A*B >> A/B ans = >> A/B 逆行列を計算 * / は要素毎の演算ではないことに注意

16 行列の形を常に意識して演算を行う必要がある
行列演算(2) 行列の形を常に意識して演算を行う必要がある A =     >> [1 2]*A ans = >> [1 2]*A >> A*[1 2] ??? エラー: ==> mtimes 内部行列の次元は同じである必要があります >> A+[1 2] ??? エラー: ==> plus 行列の次元は同じである必要があります >> A*[1 2] ??? エラー: ==> mtimes 内部行列の次元は同じである必要があります >> A+[1 2] >> A*[1 2] ??? エラー: ==> mtimes 内部行列の次元は同じである必要があります >> A*[1 2] 行列の形が演算に合わなければエラー >> A+1 >> A+1 ans = 行列に対するスカラーの加減算は許される

17 演算記号の前に . をつけることにより各要素毎の演算となる
行列演算(3) A =        B = 演算記号の前に . をつけることにより各要素毎の演算となる >> A .* B ans = >> A ./ B ans = >> A .^ B ans = sin(), cos(), exp(), log(), log10(), sqrt(), round(), abs() 初等数学関数等は各要素毎に計算される. help elfun >> exp( A( : )’ ) ans = >> exp( A( : )’ ) 演算結果は引数の行列と同じ形の行列になる

18 これまでの記号のまとめ [ ] カギ括弧。行列の作成、行列の結合 ( ) 括弧。変数の後に続いて 配列要素の参照、指定
[ ] カギ括弧。行列の作成、行列の結合 ( ) 括弧。変数の後に続いて 配列要素の参照、指定 関数のあとに続いて引数指定 演算式において演算順序の指定 . ピリオド。小数点。演算記号の前につけて要素毎の演算 .* 、.^ 、./ 、.\ , カンマ。行列のサブスクリプトや関数の引数を分離。 複数のステートメントの区別。(画面表示あり) ; セミコロン。鍵括弧内で、行列の行区切りセパレータ。    複数のステートメントの区別。(画面表示抑制) ‘ 転置。X’ は、行列X の複素共役転置。X.' は、共役でない転置。 文字列型の指定。 'ANY TEXT' はベクトルで、各要素はキャラクタに 対するASCIIコード。 : コロン。線形横ベクトルの作成。行列の後に(:)で縦ベクトルへの変換

19 max , min , mean , std , sum, hist, diff ,
データ解析関数 help datafun max , min , mean , std , sum, hist, diff , corrcoef , conv , fft , ifft 最大値 ,  最小値 ,  平均値 , 標準偏差 , 総和 ,ヒストグラム,  微係数  相関係数 , コンボリューション ,フーリエ変換 関数内の行列では縦ベクトルを基本に計算される フーリエ,逆フーリエ変換後のRMS誤差 >> X=randn(256,3); >> mean(X) ans = >> std(X) >> X=randn(256,3); >> mean(X) ans = >> >> X=randn(256,3); >> mean(X) >> X=randn(256,3); >> mean(X) ans = >> std(X) >> sqrt(mean((ifft(fft(X))-X).^2)) ans = 1.0e-015 * >> sqrt(mean((ifft(fft(X))-X).^2))

20 rank , det , trace , norm , cond,
行列関数  help matfun rank , det , trace , norm , cond, inv , lu , qr , eig , svd ランク  ,  行列式 ,   トレース  ,  ノルム   ,  条件数  逆行列, LU分解, QR分解, 固有値分解, 特異値分解 >> A=[2 3 5;1 4 2]; >> rank(A) ans = 2 >> svd(A) >> A=[2 3 5;1 4 2]; >> rank(A) ans = 2 >> A=[2 3 5;1 4 2]; >> rank(A) ans = 2 >> svd(A) 7.4136 2.0098 >> A=[2 3 5;1 4 2]; >> rank(A) >> A=[2 3;1 4]; >> [C D]=eig(A) C = D = >> A=[2 3;1 4]; >> [C D]=eig(A) 行列のランクの計算 固有ベクトル,固有値行列への分解 特異値の計算

21 besselj , besselh , beta , gamma factor , primes , nchoosek
特殊数学関数 help specfun besselj , besselh , beta , gamma factor , primes , nchoosek 第1種ベッセル関数 , ハンケル関数 , ベータ関数 ,ガンマ関数     素因数分解  ,  素数リスト ,   組み合わせ >> besselj(1, [1 ; j; 1+j]) ans = 0.4401 i i >> nchoosek(1:4,3) ans =

22 関係演算子 A==B A~=B A<B A>B A<=B A>=B AとBは等しい AとBは等しくない
>> x=rand(2,3) x = >> x>0.3 >> x=rand(2,3) x = >> x>0.3 ans = >> x=rand(2,3) x = >> x(x>0.3) ans = 0.3708 0.5448 0.8364 >> x(x>0.3)=1 x = >> x(x>0.3) ans = 0.3708 0.5448 0.8364 >> x(x>0.3)=1 >> x(x>0.3) >> x(x>0.3) ans = 0.3708 0.5448 0.8364 真値の抽出 (縦ベクトル) 要素毎の真偽を表す論理値行列を生成 真値のデータ変更

23 save, dlmwrite, imwrite, wavwrite, aviwrite
ファイルへの出力 エクスポート関数を利用 save, dlmwrite, imwrite, wavwrite, aviwrite 空白区切り  任意区切り 画像ファイル  waveファイル   aviファイル  バイナリ形式の保存 >> save file A B MAT-ファイルとして変数A, Bを保存 アスキー形式の保存 >> A=[1 2 ;3 4];B=[1 2 3];C=1; >> save test A B C -ascii >> type test >> A=[1 2 ;3 4];B=[1 2 3];C=1; >> save test A B C -ascii >> type test e e+000 e e+000 e e e+000 e+000 A B C

24 plot , bar , errorbar , hist , stem scatter , pie , stairs , polar
グラフィックス機能 –二次元プロット- 軸の制御 グラフの注釈 線の種類 ズーム、移動、回転 図の保存、印刷 色の管理 help specgraph plot  , bar ,   errorbar , hist , stem scatter , pie , stairs , polar 線形プロット,棒グラフ,エラーバー付グラフ,ヒストグラム,ステムプロット 散布図, 円グラフ, 階段状グラフ , 極座標プロット

25 Y軸データが行列のとき,縦ベクトルを基準に自動的にプロット
グラフィックス機能 -plot関数- >> x=(1:100)’/100; >> y=sin(2*pi*x); >> plot( y ); X軸を指定しない場合,X軸は要素番号 >> plot( x , y ) X軸を指定する場合 >> Y=sin(2*pi *[x 2*x 3*x] ); >> plot( x , Y ) Y軸データが行列のとき,縦ベクトルを基準に自動的にプロット

26 グラフィックス機能 -plot関数- plot(x,y,s) を使って、ラインタイプ、プロットシンボル、カラーを指定
b 青 点 実線 g 緑 o 円 : 点線 r 赤 x x印 鎖線 k 黒 プラス記号 破線 >> plot(x, sin(2*pi*x), ’xg’ ) >> plot(x,sin(2*pi*x), ’--k’ )

27 グラフィックス機能 -軸の設定- grid xlabel subplot title hold legend axis text 軸ラベル
グラフィックス機能 -軸の設定- grid xlabel 軸ラベル グリッドの設定 subplot 複数の軸設定 title タイトル hold 重ね書きの設定 legend 図の凡例 axis 軸のスケール text 任意の位置に注釈 >> subplot(1,2,1) >> plot(x,sin(2*pi*x)) >> hold on >> plot(x,cos(2*pi*x),'r') >> xlabel('Time') >> ylabel('Amplitude') >> title ('1 cycle') >> legend('Sin','Cos') >> subplot(1,2,2) >> plot(cos(2*pi*x),sin(2*pi*x)) >> subplot(1,2,1) >> plot(x,sin(2*pi*x)) >> hold on >> plot(x,cos(2*pi*x),'r') >> xlabel('Time') >> ylabel('Amplitude') >> title ('1 cycle') >> legend('Sin','Cos') >> subplot(1,2,1) >> plot(x,sin(2*pi*x)) >> hold on >> plot(x,cos(2*pi*x),'r') >> xlabel('Time') >> ylabel('Amplitude') >> title ('1 cycle') >> legend('Sin','Cos') >> subplot(1,2,2) >> plot(cos(2*pi*x),sin(2*pi*x)) >> axis equal >> axis([ ]) >> subplot(1,2,1) >> plot(x,sin(2*pi*x)) >> subplot(1,2,1) >> subplot(1,2,1) >> plot(x,sin(2*pi*x)) >> hold on >> plot(x,cos(2*pi*x),'r')

28 グラフィックス機能 –行列要素の画像化- >>pcolor(peaks) >>shading interp
グラフィックス機能 –行列要素の画像化- >>pcolor(peaks) >>shading interp >> contour(peaks) >>contour3(peaks) >>surf(peaks) >>shading interp >> surfl(peaks) >> shading interp >> colormap copper >> mesh(peaks)

29 グラフィックス機能 –体積要素の画像化- 3次元配列の例 プロット関数は2次元配列までしか利用できない
グラフィックス機能 –体積要素の画像化- >> A=ones(3,4,2) A( : , : , 1) = A( : , : , 2) = 3次元配列の例 プロット関数は2次元配列までしか利用できない >> plot(A) ??? エラー: ==> plot データは2次元以上である必要があります. >> pcolor(A) ??? エラー: ==> surface CDataはMxN行列、またはMxNx3配列である必要があります.

30 グラフィックス機能 –体積要素の画像化- 任意の視点、光源による断面、曲面の表示 画像の3D回転 slice による任意断面内の2D画像
グラフィックス機能 –体積要素の画像化- 画像の3D回転 slice による任意断面内の2D画像 isonomal による曲面の表示 任意の視点、光源による断面、曲面の表示

31 ファイル管理 cd cd dn delete fn dir ls pwd type fn path which
カレントディレクトリの位置表示 cd dn カレントディレクトリの変更 delete fn ファイルの消去 dir ディレクトリの内容表示 ls ディレクトリの内容表示,詳細表示可 pwd カレントディレクトリの位置表示 type fn ファイルの内容表示(アスキーファイル) path Matlabがサーチするパスの順番 which どのディレクトリの関数,ファイルを使っている か表示

32 プログラミング スクリプトM-ファイル ファンクションM-ファイル 一連のコマンド・関数をまとめて処理することができる
入力引数と出力引数を伴う関数形式のファイル 特別な記述は必要なし Function で始まる関数宣言 任意の数の入出力引数 workspaceと共通の変数 関数毎のlocalな変数 デバッグが容易 デバッグが困難 M-ファイル名をコマンドとして処理 M-ファイル名を関数として処理

33 M-ファイルの作成 コマンドウインドウにおいて >> edit test としてM-ファイルを新規作成
M-ファイルを保存(test.m) 保存 実行 実行ボタンかコマンドウインドウでtestと入力      (カレントディレクトリに保存した場合) 注意 ファイル名には,先頭が数字で始まるものや,漢字を指定してはいけない また,演算記号+-*/()[]を含むものは誤動作の原因となる. すでに test.m が存在するきは既存のファイルが開く.すでにコマンドとして予約されているものは変更してはいけない. 特定のフォルダにパスを設定することも可能 (addpath コマンド)

34 M-ファイルの利点 変数の値は更新されない限り変更されない 変数にマウスカーソルを当てると変数表示 ドラッグした範囲を部分的に実行
ブレークポイントの設定 赤いマークの行で停止 実行させると,マークの行で緑の矢印が出る. コマンドウインドウは K>> となって実行停止し, デバッグモードへ 変数の値は更新されない限り変更されない

35 プログラミング –制御構文- 変数、条件式にはベクトルが使用可能 for 変数=既知ベクトル 繰り返し内容 continue break
プログラミング –制御構文- for 変数=既知ベクトル  繰り返し内容 continue break end while 論理条件  繰り返し内容 continue break end 次の繰り返しへ 次の繰り返しへ ループの外へ ループの外へ if 論理条件1  elseif 論理条件2 else end switch 変数 case 値1 case 値2 end 変数値による場合わけ 条件式に行列が含まれる場合,すべての要素が真となるとき式以降が実行 変数、条件式にはベクトルが使用可能

36 ループ文は可能な限りさけ,内部ベクトル関数が利用できないか考える
For文のTIPS >> for i=1:3 , i , end >> for i=1:3 ; i , end i = 1 2 3 >> b=0;a=1: ; >> tic;for i=a; b=b+i;end;b,toc b = 5.0000e+011 経過時間は 秒です >> tic; sum(a), toc ans = 経過時間は 秒です 通常の表記 >> for i=[1 1 1] ; i , end >> for i=[1 1 1] ; i , end i = 1 ベクトル要素の数だけループ カウンタの数値はどうでもよい ループ文は可能な限りさけ,内部ベクトル関数が利用できないか考える

37 プログラミング –よく使うコマンド- clear clf disp size … % help lookfor zeros
プログラミング –よく使うコマンド-  clear 変数の消去 (前回の値が残ったまま..) clf 図の消去 (前回の図が残ったまま..) disp 文字列,値の表示,(1行出力等デバッグに便利) size 配列のサイズ(最も使う関数,サイズの把握は必須) 次の行との継続.行末に.プログラムを見やすく % 以降コメント help ヘルプの表示.二番目に多く使う関数. lookfor キーワードから関連コマンドを表示 zeros 配列の事前割り当て,(ループ毎に行列の大き さが増加するような場合)

38 アプリケーションへの図のコピー 線画はmetafile、画像はbitmap形式でコピー

39 アプリケーションへの図のコピー

40 特定の機能に特化したmatlab関数,GUIの集合体
ツールボックス 特定の機能に特化したmatlab関数,GUIの集合体 AD変換ボード等のボード,カード機器とのデータのやり取り.GUIを自作して,オシロスコープ等も作成可能 Data acquisition toolbox オシロスコープ等の計測機器と,GPIB,VISA,TCP/IPを介して計測機器の制御,データの取得,GUI可 Instrument control toolbox Signal processing toolbox 信号処理用の各種波形の生成,フィルタ,解析用の関数,スペクトル推定,GUIによるフィルタデザイン 統計処理用の各種確率密度関数,仮説検定,多変量解析,線形,非線形モデル解析 Statistics toolbox シンボル表現,方程式,微分方程式の解,特殊関数,Mapleパッケージとのリンク Symbolic math toolbox 連続,離散,1次元,2次元ウェイブレット解析.周期,不連続解析,フィルタリング,イメージ圧縮などの応用 Wavelet toolbox

41 HELPの利用法 Help Browser (ウインドウのプルダウン項目から) ヘルプには詳細な説明が記述されている

42 HELPの利用法 M-file ヘルプ >>help コマンド により詳細を確認
genral をクリック 最後には関連コマンドや Help browser へのリンク whos をクリック コマンドウインドウで >>help  クリック可能 >>help コマンド           により詳細を確認 >>lookfor キーワード       により関連コマンドを表示

43 GUIの作成 >>guide OKをクリック ボタンを配置 コンテキストメニュー (右クリック)からコールバック処理の選択
ボタンを配置            コンテキストメニュー (右クリック)からコールバック処理の選択            M-ファイルが自動作成され対応する処理を記述 ネットワークアナライザからの取り込み用GUI


Download ppt "MATLAB 講習会(1) -MATLAB概説-"

Similar presentations


Ads by Google