MATLAB 講習会(1) -MATLAB概説- 担当:三輪 内容 ・ウインドウ環境 ・演算の基礎 ・データ入出力 ・プログラミング ・グラフィック ・ヘルプ ・ GUI http://www.rs.el.gunma-u.ac.jp/~yamalab/matlab.ppt MATLAB 数値計算,ビジュアリゼーション,プログラミング が可能なインタープリタ型ソフトウエア データ収集 外部のハードウエアから MATLAB 環境へダイレクト に生の計測データを取得可能 ツールボックス 信号処理、画像処理、制御系設計、最適化、記入工 学、数学、ニューラルネットワーク アプリケーション開発 ユーザスタンドアロンの MATLAB アプリケーション の生成と配布 ウインドウ環境 –メインウインドウ– ディレクトリウインドウ 変数のworkspace コマンドウインドウ コマンドヒストリ ウインドウ環境 –プログラムの例– 関数定義 %記号 if 文 For 文 ピリオド コロン セミコロン ‘ 記号 カギ括弧 演算記号 括弧 MATLABの特徴 • • • • • • • 対話型インターフェイス データの扱いが簡単 変数,配列の宣言は不要 行列データを高速,簡便に取り扱える 簡易なプログラム(ソースが公開) 強力なデバッグ機能による生産性の向上 豊富な2次元,3次元プロット スカラー、ベクトル、行列を統一的に取り扱える 繰り返し演算の低減、計算のベクトル化 データ型 double single uint8 int8 char logical - 倍精度(64bit IEEE浮動小数点) - 単精度 - 符号なし8ビット整数 (16,32,64も同様) - 符号付き8ビット整数 (16,32,64も同様) - 文字列 - 論理値 数値は指定しない限り倍精度となる >> a=1 a= 1 変数の値が表示 倍精度で定義 >> whos a 変数の詳細表示 Name Size Bytes Class a 1x1 8 double array Grand total is 1 element using 8 bytes >> a=2j a= 0 + 2.0000i 表示時には虚数単位はi 虚数単位はj もしくは i 倍精度の複素数 数値に続いて記入可能 >> whos a Name Size Bytes Class a 1x1 16 double array (complex) Grand total is 1 element using 16 bytes 変数の型宣言は必要としない 行列の定義(1) -入力による定義- 要素の全体はかぎ括弧 [ ] で囲む 列(横)の区切り 行(縦)の区切り >> A=[1 2 3;4 5 6] A= 1 2 3 4 5 6 >> A=[1 2 3]; >> 表示の抑制 空白 または , カンマ ; セミコロン または >> A=[1 2 3 4 5 6] A= 1 2 3 4 5 6 >> A=[ ] A= [] リターン 空行列 行列の定義(2) -関数による定義- help elfmat zeros(m,n) ゼロ行列 randn(m,n) ones(m,n) 1行列 rand(m,n) eye(m) diag(v) 単位行列 対角行列 linspace ’ 正規分布乱数 一様分布乱数 線形等間隔ベクトル 複素転置 m行n列の行列を生成 >> zeros(2,3) ans = 0 0 0 0 0 0 >>diag([1 2 3]) ans = 1 0 0 0 2 0 0 0 3 >> [1 2 3]' ans = 1 2 3 常に行列の形をイメージすることが重要 行列の定義(2) -関数による定義- 線形横ベクトルの定義 初期値:増分:最終値 >> 1:2:10 ans = 1 3 5 7 9 >> 1:5 ans = 1 2 4 5 >> 5:-1:1 ans = 5 4 3 3 2 1 >> (1:5)' ans = 1 2 3 4 5 線形縦ベクトルの 定義 行列の定義(2) -行列の連結- [ ] は行列の連結を行う関数 横の連結 縦の連結 [A B] [A ; B] A,Bの行数が異なるとエラー A,Bの列数が異なるとエラー >> [[1:4; 1 2 0 4] zeros(2,3) ;rand(3,7) ] ans = 1.0000 1.0000 0.1991 0.2987 0.6614 2.0000 2.0000 0.2844 0.4692 0.0648 3.0000 0 0.9883 0.5828 0.4235 4.0000 4.0000 0.5155 0.3340 0.4329 0 0 0.2259 0.5798 0.7604 0 0 0.5298 0.6405 0.2091 0 0 0.3798 0.7833 0.6808 行列の定義(3) -ファイルから定義- インポート関数を利用 load, dlmread, textread, xlsread, wk1read, 空白区切り 任意区切り フォーマット付数値 Excelファイル Lotus123ファイル imread, wavread, aviread 画像ファイル waveファイル >> type blank.txt 134 402 345 212 ファイル blank.txt の内容確認 aviファイル >> load blank.txt ファイルの読み込み >> blank blank = 1 3 4 4 0 2 3 4 5 2 1 2 行列の要素抽出 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);] 行列の要素抽出 A= 1 4 2 5 3 6 >> A( 2 , [ 1 3 ] ) 横ベクトルを ans = 指定 4 6 >> A( [ 1 2 ] , [ 2 3 ] ) ans = 2 3 行列を指定 5 6 >> A( 2 , : ) 二行目の全要素を ans = 指定 4 5 6 >> A(:) ans = 1 4 2 5 3 6 全要素を縦ベクトル として変換 >> A( : , 2 )=0 A= 1 0 3 4 0 6 特定要素の変更 文字変数 文字定数は ' シングルコーテーション ' でくくる >> A='abcde' A= abcde >> A' ans = a b c d e >> size(A) ans = 1 5 >> [A(1:3) '0' A(4:5)] ans = abc0de >> A(2:3) ans = bc >> [A ; '12345'] ans = abcde 12345 文字変数も行列として取り扱う 行列要素の指定により文字を抽出 [ ]により文字の結合 行列要素が実数か、ASCIIコードかの違い 行列演算(1) 四則演算記号は行列に対する演算を意味する A= 1 3 2 4 B= 4 2 3 1 >> A+B ans = 5 5 5 5 >> A-B ans = -3 -1 1 3 >> A*B ans = 8 5 20 13 >> A/B 逆行列を計算 ans = 1.5000 -2.5000 2.5000 -3.5000 * / は要素毎の演算ではないことに注意 行列演算(2) 行列の形を常に意識して演算を行う必要がある A= 1 3 2 4 >> [1 2]*A ans = 7 10 >> A*[1 2] ??? エラー: ==> mtimes 内部行列の次元は同じである必要があります >> A+[1 2] 行列の形が演算に合わな ければエラー ??? エラー: ==> plus 行列の次元は同じである必要があります >> A+1 ans = 2 3 4 5 行列に対するスカラーの 加減算は許される 行列演算(3) A= 1 3 2 4 >> A .* B ans = 4 6 6 4 B= 4 2 演算記号の前に . をつけることにより 各要素毎の演算となる 3 1 >> A ./ B ans = 0.2500 1.5000 0.6667 4.0000 >> A .^ B ans = 1 8 9 4 初等数学関数等は各要素毎に計算される. help elfun sin(), cos(), exp(), log(), log10(), sqrt(), round(), abs() >> exp( A( : )’ ) ans = 2.7183 20.0855 演算結果は引数の行列と同じ 形の行列になる 7.3891 54.5982 これまでの記号のまとめ [ ] カギ括弧。行列の作成、行列の結合 ( ) 括弧。変数の後に続いて 配列要素の参照、指定 関数のあとに続いて引数指定 演算式において演算順序の指定 . ピリオド。小数点。演算記号の前につけて要素毎の演算 .* 、.^ 、./ 、.¥ , カンマ。行列のサブスクリプトや関数の引数を分離。 複数のステートメントの区別。(画面表示あり) ; セミコロン。鍵括弧内で、行列の行区切りセパレータ。 複数のステートメントの区別。(画面表示抑制) ‘ 転置。X’ は、行列X の複素共役転置。X.' は、共役でない転置。 文字列型の指定。 'ANY TEXT' はベクトルで、各要素はキャラクタに 対するASCIIコード。 : コロン。線形横ベクトルの作成。行列の後に(:)で縦ベクトルへの変換 データ解析関数 help datafun max , min , mean , std , sum, hist, diff , 最大値 , 最小値 , 平均値 , 標準偏差 , 総和 ,ヒストグラム, 微係数 corrcoef , conv , fft , ifft 相関係数 , コンボリューション ,フーリエ変換 関数内の行列では縦ベクトルを基本に計算される >> X=randn(256,3); >> mean(X) ans = -0.0091 -0.0094 -0.0730 >> std(X) ans = 0.9222 フーリエ,逆フーリエ変換後の RMS誤差 >> sqrt(mean((ifft(fft(X))-X).^2)) ans = 1.0e-015 * 0.2287 0.9626 0.9085 0.2312 0.2224 行列関数 help matfun rank , det , ランク , 行列式 , trace , トレース inv , lu , , norm , ノルム , cond, 条件数 qr , eig , svd 逆行列, LU分解, QR分解, 固有値分解, 特異値分解 >> A=[2 3 5;1 4 2]; >> rank(A) ans = 行列のランクの計算 2 >> svd(A) ans = 7.4136 2.0098 特異値の計算 >> A=[2 3;1 4]; >> [C D]=eig(A) C= -0.9487 -0.7071 0.3162 -0.7071 固有ベクトル,固有値 行列への分解 D= 1.0000 0 0 5.0000 特殊数学関数 help specfun besselj , besselh , beta , gamma 第1種ベッセル関数 , ハンケル関数 , ベータ関数 ,ガンマ関数 factor , primes , nchoosek 素因数分解 , 素数リスト , 組み合わせ >> besselj(1, [1 ; j; 1+j]) >> nchoosek(1:4,3) ans = 0.4401 0.0000 + 0.5652i 0.6142 + 0.3650i ans = 1 1 1 2 2 2 3 3 3 4 4 4 関係演算子 A==B A<B A<=B AとBは等しい AはBより小さい AはB以下 >> x=rand(2,3) x= 0.2843 0.0647 0.3708 0.5448 0.8364 0.1453 >> x>0.3 ans = 0 0 1 1 1 0 要素毎の真偽を表す 論理値行列を生成 A~=B A>B A>=B AとBは等しくない AはBより大きい AはB以上 >> x(x>0.3) ans = 0.3708 0.5448 0.8364 真値の抽出 (縦ベクトル) >> x(x>0.3)=1 x= 0.2843 0.0647 1.0000 1.0000 1.0000 0.1453 真値のデータ変更 ファイルへの出力 エクスポート関数を利用 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 1.0000000e+000 2.0000000e+000 A 3.0000000e+000 4.0000000e+000 1.0000000e+000 2.0000000e+000 3.0000000e+000 B 1.0000000e+000 C グラフィックス機能 –二次元プロットグラフの注釈 色の管理 図の保存、印刷 ズーム、移動、回転 線の種類 軸の制御 help specgraph plot , bar , errorbar , hist , stem 線形プロット,棒グラフ,エラーバー付グラフ,ヒストグラム,ステムプロット scatter , pie , stairs , polar 散布図, 円グラフ, 階段状グラフ , 極座標プロット グラフィックス機能 -plot関数1 >> x=(1:100)’/100; >> y=sin(2*pi*x); >> plot( y ); 0.5 0 -0.5 X軸を指定しない場合,X軸は要素番号 -1 0 20 40 60 80 100 0.8 1 1 0.5 >> plot( x , y ) 0 X軸を指定する場合 -0.5 -1 0 0.2 0.4 0.6 0.8 1 1 >> Y=sin(2*pi *[x 2*x 3*x] ); >> plot( x , Y ) Y軸データが行列のとき,縦ベクトル を基準に自動的にプロット 0.5 0 -0.5 -1 0 0.2 0.4 0.6 グラフィックス機能 -plot関数plot(x,y,s) を使って、ラインタイプ、プロットシンボル、カラーを指定 b 青 . 点 - 実線 g 緑 o 円 : 点線 r 赤 x x印 -. 鎖線 k 黒 + プラス記号 -- 破線 1 0.5 >> plot(x, sin(2*pi*x), ’xg’ ) 0 -0.5 -1 1 0 0.2 0.4 0.6 0.8 0.5 >> plot(x,sin(2*pi*x), ’--k’ ) 0 -0.5 -1 0 0.2 0.4 0.6 0.8 1 1 グラフィックス機能 -軸の設定grid subplot hold axis 軸のスケール 1 cycle 1 1 Sin Cos 0.9 0.8 0.8 1 0.6 0.6 0.8 Amplitude 0.4 0.7 0.6 0.2 0.4 0.5 0.2 0.50 0 -0.2 0.4 -0.2 -0.5 -0.4 -0.4 0.3 -0.6 0.2 -0.8 0.1 -1 0 0 0.5 Time xlabel title legend text グリッドの設定 複数の軸設定 重ね書きの設定 1 -0.6 -1 -1 -0.8 -0.5 0 0.5 1 -1 -1 -0.5 0 0.5 1 軸ラベル タイトル 図の凡例 任意の位置に注釈 >> 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([-1 1 -1 1]) グラフィックス機能 >>pcolor(peaks) >>shading interp >> mesh(peaks) –行列要素の画像化- >> contour(peaks) >>surf(peaks) >>shading interp >>contour3(peaks) >> surfl(peaks) >> shading interp >> colormap copper グラフィックス機能 >> A=ones(3,4,2) A( : , : , 1) = 1 1 1 1 1 1 1 1 1 1 1 1 A( : , : , 2) = 1 1 1 1 1 1 1 1 1 –体積要素の画像化- 3次元配列の例 1 1 1 プロット関数は2次元配列までしか利用できない >> plot(A) ??? エラー: ==> plot データは2次元以上である必要があります. >> pcolor(A) ??? エラー: ==> surface CDataはMxN行列、またはMxNx3配列である必要があります. グラフィックス機能 –体積要素の画像化- 画像の3D回転 slice による任意断面内の2D画像 isonomal による曲面の表示 任意の視点、光源による断面、曲面の表示 ファイル管理 cd cd dn delete fn dir ls pwd カレントディレクトリの位置表示 type fn path ファイルの内容表示(アスキーファイル) which どのディレクトリの関数,ファイルを使っている か表示 カレントディレクトリの変更 ファイルの消去 ディレクトリの内容表示 ディレクトリの内容表示,詳細表示可 カレントディレクトリの位置表示 Matlabがサーチするパスの順番 プログラミング スクリプトM-ファイル ファンクションM-ファイル 一連のコマンド・関数をまと めて処理することができる 入力引数と出力引数を伴う 関数形式のファイル 特別な記述は必要なし Function で始まる関数宣言 任意の数の入出力引数 workspaceと共通の変数 デバッグが容易 関数毎のlocalな変数 デバッグが困難 M-ファイル名をコマンドと して処理 M-ファイル名を関数として 処理 M-ファイルの作成 コマンドウインドウにおいて >> edit test としてM-ファイルを新規作成 (ファイル名がtest.mの場合) M-ファイルにコマンドの羅列を入力 M-ファイルを保存(test.m) 実行ボタンかコマンドウインドウでtestと入力 実行 (カレントディレクトリに保存した場合) 保存 注意 ファイル名には,先頭が数字で始まるものや,漢字を指定してはいけない また,演算記号+-*/()[]を含むものは誤動作の原因となる. すでに test.m が存在するきは既存のファイルが開く.すでにコマンドとして予 約されているものは変更してはいけない. 特定のフォルダにパスを設定することも可能 (addpath コマンド) M-ファイルの利点 変数にマウスカーソル を当てると変数表示 ドラッグした範囲を 部分的に実行 ブレークポイントの設定 赤いマークの行で停止 実行させると,マークの 行で緑の矢印が出る. コマンドウインドウは K>> となって実行停止し, デバッグモードへ 変数の値は更新されない限り変更されない プログラミング –制御構文for 変数=既知ベクトル 繰り返し内容 continue break end 次の繰り返しへ ループの外へ if 論理条件1 end 繰り返し内容 次の繰り返しへ continue break end ループの外へ switch 変数 elseif 論理条件2 else while 論理条件 条件式に行列が含 まれる場合,すべて の要素が真となると き式以降が実行 case 値1 変数値によ る場合わけ case 値2 end 変数、条件式にはベクトルが使用可能 For文のTIPS >> for i=1:3 ;, i , end i= 1 >> b=0;a=1:1000000; >> tic;for i=a; b=b+i;end;b,toc b= 5.0000e+011 i= 2 i= 3 通常の表記 経過時間は1.212000秒です >> for i=[1 1 1] ; i , end >> tic; sum(a), toc i= ans = 1 5.0000e+011 i= 1 i= 1 ベクトル要素の数 だけループ 経過時間は0.010000秒です カウンタの数値は ループ文は可能な限りさけ,内部ベクトル どうでもよい 関数が利用できないか考える プログラミング –よく使うコマンドclear clf 変数の消去 (前回の値が残ったまま..) 図の消去 (前回の図が残ったまま..) disp size … % 文字列,値の表示,(1行出力等デバッグに便利) 配列のサイズ(最も使う関数,サイズの把握は必須) 次の行との継続.行末に.プログラムを見やすく help lookfor ヘルプの表示.二番目に多く使う関数. zeros 配列の事前割り当て,(ループ毎に行列の大き さが増加するような場合) 以降コメント キーワードから関連コマンドを表示 アプリケーションへの図のコピー 線画はmetafile、画像はbitmap形式でコピー アプリケーションへの図のコピー 1 0.8 0.6 0.4 amplitude 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 0.1 0.2 0.3 0.4 0.5 time 0.6 0.7 0.8 0.9 1 ツールボックス 特定の機能に特化したmatlab関数,GUIの集合体 Data acquisition toolbox AD変換ボード等のボード,カード機器とのデータのや り取り.GUIを自作して,オシロスコープ等も作成可能 Instrument control toolbox オシロスコープ等の計測機器と,GPIB,VISA,TCP/IP を介して計測機器の制御,データの取得,GUI可 Signal processing toolbox 信号処理用の各種波形の生成,フィルタ,解析用の関 数,スペクトル推定,GUIによるフィルタデザイン Statistics toolbox 統計処理用の各種確率密度関数,仮説検定,多変量解 析,線形,非線形モデル解析 Symbolic math toolbox シンボル表現,方程式,微分方程式の解,特殊関数, Mapleパッケージとのリンク Wavelet toolbox 連続,離散,1次元,2次元ウェイブレット解析.周期,不 連続解析,フィルタリング,イメージ圧縮などの応用 HELPの利用法 Help Browser (ウインドウのプルダウン項目から) ヘルプには詳細な説明が記述されている HELPの利用法 M-file ヘルプ コマンドウインドウで >>help クリック可能 genral をクリック whos をクリック 最後には関連コマンドや Help browser へのリンク >>help コマンド >>lookfor キーワード により詳細を確認 により関連コマンドを表示 GUIの作成 >>guide OKをクリック ボタンを配置 コンテキストメニュー (右クリック)からコー ルバック処理の選択 M-ファイルが自動作 成され対応する処理 を記述 ネットワークアナライザ からの取り込み用GUI
© Copyright 2024 ExpyDoc