MATLAB 講習会(1) -MATLAB概説- 担当:三輪 内容 ・ウインドウ環境 ・演算の基礎 ・データ入出力 ・プログラミング ・グラフィック ・ヘルプ ・ GUI http://www.rs.el.gunma-u.ac.jp/~yamalab/matlab.ppt MATLAB 数値計算,ビジュアリゼーション,プログラミング が可能なインタープリタ型ソフトウエア データ収集 外部のハードウエアから MATLAB 環境へダイレクト に生の計測データを取得可能 ツールボックス 信号処理、画像処理、制御系設計、最適化、記入工 学、数学、ニューラルネットワーク アプリケーション開発 ユーザスタンドアロンの MATLAB アプリケーション の生成と配布 ツールボックス 特定の機能に特化した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 (ウインドウのプルダウン項目から) ヘルプには詳細な説明が記述されている ウインドウ環境 –メインウインドウ– ディレクトリウインドウ 変数のworkspace コマンドウインドウ コマンドヒストリ HELPの利用法 M-file ヘルプ コマンドウインドウで >>help クリック可能 genral をクリック whos をクリック 最後には関連コマンドや Help browser へのリンク >>help コマンド >>lookfor キーワード により詳細を確認 により関連コマンドを表示 ウインドウ環境 –プログラムの例– 関数定義 %記号 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 3 2 1 >> A+B ans = 5 5 5 5 >> A-B ans = -3 -1 1 3 + - 記号は要素毎に和、差を取る 行列のサイズが同じでないと以下のようなエラー ??? エラー: ==> plus 行列の次元は同じである必要があります 行列演算(2) 四則演算記号は行列に対する演算を意味する A= 1 3 >> A*B ans = 8 5 20 13 2 4 B= 4 3 2 1 >> A/B 逆行列を計算 ans = 1.5000 -2.5000 2.5000 -3.5000 * / は要素毎の演算ではなく、行列としての積、商の意味 Aの列とBの行が同じ要素数でないとエラー ??? エラー: ==> mtimes 行列の次元は同じである必要があります 行列演算(3) 行列の形を常に意識して演算を行う必要がある A= 1 3 2 4 >> [1 2]*A ans = 7 10 >> >>A*[1 A*[12]2] ??? エラー:==> ==>mtimes mtimes ??? エラー: 内部行列の次元は同じである必要があります 内部行列の次元は同じである必要があります 行列の形が演算に合わな >> >>A+[1 A+[12]2] ??? エラー: ==> plus ければエラー 行列の次元は同じである必要があります >> A+1 ans = 2 3 4 5 行列に対するスカラーの 加減算は許される 行列演算(4) A= 1 3 2 4 >> A .* B ans = 4 6 6 4 B= 4 3 2 1 演算記号の前に . をつけることにより 各要素毎の演算となる >> A ./ B ans = 0.2500 0.6667 1.5000 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 演算結果は引数の行列と同じ 形の行列になる 行列演算(5) A= 1 3 >> A’ ans = 1 3 2 4 ’は行列の転置 >> B’ ans = 4-2i 2+5i 3+i 1+3i 複素行列の転置は要素の複 素共役を取るというお約束が あるので‘は複素共役転置 2 4 B= 4+2i 2-5i 3-i 1-3i >> B.’ ans = 4+2i 2-5i 3-i 1-3i .’は複素共役を取らない単なる転置 >> conj(B) ans = 4-2i 3+i 2+5i 1+3i conj関数は要素毎の複素共 役を取る関数 これまでの記号のまとめ [ ] カギ括弧。行列の作成、行列の結合 ( ) 括弧。変数の後に続いて 配列要素の参照、指定 関数のあとに続いて引数指定 演算式において演算順序の指定 . ピリオド。小数点。演算記号の前につけて要素毎の演算 .* 、.^ 、./ 、.¥ , カンマ。行列のサブスクリプトや関数の引数を分離。 複数のステートメントの区別。(画面表示あり) ; セミコロン。鍵括弧内で、行列の行区切りセパレータ。 複数のステートメントの区別。(画面表示抑制) ‘ 転置。X’ は、行列X の複素共役転置。X.' は、共役でない転置。 文字列型の指定。 'ANY TEXT' はベクトルで、各要素はキャラクタに 対するASCIIコード。 : コロン。線形横ベクトルの作成。行列の後に(:)で縦ベクトルへの変換 行列のサイズの変更 A= 1 4 2 5 関数reshapeを使用 reshape(行列、1次元目(縦)のサイズ、2次元目(横)のサイズ、、) 3 6 >> A(:) >> reshape(A,6,1) >> reshape(A,3,2) ans = ans = ans = 1 4 2 5 3 6 1 4 2 5 3 6 1 4 2 5 3 6 関数reshapeがやっていることは、行列を一旦A(:)で縦に並べてから、 1次元目のサイズ分を取り出して並べていく。 主に、2次元行列を1次元に並べ替えたり、その逆を行うときに使用。 行列の次元の変更 関数permuteを使用 A= 1 4 2 5 3 6 permute(行列、[並び替えの順番]) A(:,:,1) = 1 2 3 4 5 6 A(:,:,2) = 7 8 9 10 11 12 >>permute(A,[2 1]) ans = 1 4 2 5 3 6 >> permute(A,[2 3 1]) ans(:,:,1) = 1 7 2 8 3 9 2次元目と3次元目が入れ替 わる。2次元の場合は記号 .’ と同じ ans(:,:,2) = 4 10 5 11 6 12 行列演算記号は最初の2次元分の行列データに適用される ので、多次元のデータを行列演算処理する場合、次元を入れ 替えるpermute関数は頻繁に利用する。 その他のベクトル、行列の操作 a= 1 2 3 >>b=ones(4,1) b= 1 1 1 1 ベクトル生成 zeros(n,m) 要素0のn*m行列 rand(n,m) 0-1で一様分布 randn(n,m) 標準偏差1の正規分布 eye(n) 単位行列 >>c=b*a c= 1 2 1 2 1 2 1 2 3 3 3 3 ベクトルのコピー >>d=[1:4]’*a d= 1 2 3 2 4 6 3 6 9 4 8 12 ベクトルをコピーし て乗算 >>fliplr(d) ans = 3 2 1 6 4 2 9 6 3 12 8 4 左右反転 >>flipud(d) ans = 4 8 12 3 6 9 2 4 6 1 2 3 上下反転 行列、ベクトルの平均 A= 1 4 2 5 3 6 >>mean(A) ans = 2.5 3.5 4.5 >>mean(A,2) ans = 2 5 Aがn*m行列の場合、mean(A)は以下のsと同じ for ii=1:m for i=1:n s(ii)=s(ii)+A(i,ii)/n; end;end データ解析に使用される関数に行列を入れた場合、は 何も指定しないときは第1次元目(縦)に適用(平均)され る。したがって、結果は2次元目(横)のベクトル要素と同 じ どの次元を平均するかを指定することも可能、左の場合、 2次元目(横)に平均される。したがって、結果は1次元 目(縦)のベクトル要素と同じ >>mean(mean(A)) or >> mean(A(:)) ans = 3.5 全要素の平均 データ解析関数 help datafun max , min , mean , std , sum, diff , 最大値 , 最小値 , corrcoef , conv 平均値 , 標準偏差 , 総和 ,微係数 , xcorr , fft , ifft 相関係数 , コンボリューション ,相互相関、フーリエ変換、逆フーリエ変換 関数内の行列では縦ベクトルを基本に計算される >> X=randn(256,3); >> mean(X) ans = -0.0091 -0.0094 -0.0730 >> std(X) ans = 0.9222 0.9626 0.9085 フーリエ,逆フーリエ変換後の RMS誤差 >> sqrt(mean((ifft(fft(X))-X).^2)) ans = 1.0e-015 * 0.2287 0.2312 0.2224 内積演算(積和演算) a= 1 b= 4 2 3 5 6 aが1×nの実数行列の場合、a*b’は以下のsと同 じ for i=1:n s=s+a(i)*b(i); end >> a*b’ ans = 32 内積演算、要素毎の積の和、離散フーリエ変換等で 頻繁に利用する。 左側が横ベクトル、右側が縦ベクトルである必要あり >> sum(a.*conj(b)) ans = 32 複素ベクトルの内積は、複素共役を取ったのち、要 素毎の積、和を計算するため、要素毎の演算を使う 場合はこのようになる。 >> a'*b ans = 4 5 6 8 10 12 12 15 18 *記号は行列の積の意味なので、a,bのサイズを間 違えると行列になってしまう。 For文の実行速度 >> b=0;a=1:1000000; >> tic;for i=a; b=b+i;end;b,toc b= 5.0000e+011 経過時間は1.212000秒です >> tic; sum(a), toc ans = 5.0000e+011 121倍高速 経過時間は0.010000秒です ループ文による行列要素毎の演算は可能な限り避け, 内部ベクトル関数が利用できないか考える 積和演算の実行速度例 >> n=10000000;a=randn(1,n);b=randn(1,n); >> tic;c=0;for i=1:n; c=c+a(i)*b(i);end;c,toc c= 要素毎の計算 278.6409 (内部ベクトル演算使用せず) 経過時間は5.300882秒です >> tic;sum(a.*b),toc SUM関数と要素毎の積を使った計算 ans = 278.6409 76倍高速 経過時間は0.069626秒です >> tic;a*b',toc 行列演算を使った計算 ans = 278.6409 223倍高速 経過時間は0.023710秒です 行列関数 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) 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 ファイルへの出力 エクスポート関数を利用 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 ファイル管理 cd cd dn delete fn dir ls pwd カレントディレクトリの位置表示 type fn path ファイルの内容表示(アスキーファイル) which どのディレクトリの関数,ファイルを使っている か表示 カレントディレクトリの変更 ファイルの消去 ディレクトリの内容表示 ディレクトリの内容表示,詳細表示可 カレントディレクトリの位置表示 Matlabがサーチするパスの順番 グラフィックス機能 –二次元プロットグラフの注釈 色の管理 図の保存、印刷 ズーム、移動、回転 線の種類 軸の制御 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]) 課題1 (1) (2) (3) (4) (5) (6) (7) (8) 要素数128個で全要素が0の縦ベクトルxを作れ xの要素32番から40番までを1にせよ 0から127 まで1ずつ増加する縦ベクトルaを作れ aを使って、1msから始まって1/128 msずつ増加する時間ベクトルt を作れ plot関数を使って、x軸に t 、y 軸にx を表示せよ x、yラベル、軸の範囲も適当指定せよ 関数fftを使って、 ベクトルxの離散フーリエ変換 yを求めよ 離散フーリエ変換後のデータの1ポイントあたりの周波数間隔 df はフーリエ 変換に使用した波形の時間幅の逆数で決まる。df を求めよ。 (9) 周波数間隔 df とし、0から127まで増加するベクトル f を作成せよ (10) f と y から、波形の周波数スペクトルのパワーをデシベル表示でplot関数で 表示せよ(20*log10() (11)subplotを使って、パワースペクトルと位相スペクトル(関数angle())を表示 せよ (12)パルスの幅を変えたたき、スペクトルがどうなるか調べよ (13)パルスの始まる位置を変えた時、スペクトルがどうなるか調べよ グラフィックス機能 >>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 による曲面の表示 任意の視点、光源による断面、曲面の表示 プログラミング スクリプトM-ファイル ファンクションM-ファイル 一連のコマンド・関数をまと めて処理することができる 入力引数と出力引数を伴う 関数形式のファイル 特別な記述は必要なし Function で始まる関数宣言 任意の数の入出力引数 workspaceと共通の変数 デバッグが容易 関数毎のlocalな変数 デバッグが困難 M-ファイル名をコマンドと して処理 M-ファイル名を関数として 処理 M-ファイルの作成 コマンドウインドウにおいて >> edit test としてM-ファイルを新規作成 (ファイル名がtest.mの場合) M-ファイルにコマンドの羅列を入力 M-ファイルを保存(test.m) 実行ボタンかコマンドウインドウでtestと入力 実行 (カレントディレクトリに保存した場合) 保存 注意 ファイル名には,先頭が数字で始まるものや,漢字を指定してはいけない また,演算記号+-*/()[]を含むものは誤動作の原因となる. すでに test.m が存在するきは既存のファイルが開く.すでにコマンドとして予 約されているものは変更してはいけない. 特定のフォルダにパスを設定することも可能 (addpath コマンド) M-ファイルの利点 変数にマウスカーソル を当てると変数表示 ドラッグした範囲を 部分的に実行 ブレークポイントの設定 赤いマークの行で停止 実行させると,マークの 行で緑の矢印が出る. コマンドウインドウは K>> となって実行停止し, デバッグモードへ 変数の値は更新されない限り変更されない 関係演算子 A==B A<B A<=B AとBは等しい AはBより小さい AはB以下 >> x=rand(2,3) x= 0.2843 0.0647 0.8364 0.3708 0.5448 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 真値のデータ変更 プログラミング –制御構文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 GUIの作成 >>guide OKをクリック ボタンを配置 コンテキストメニュー (右クリック)からコー ルバック処理の選択 M-ファイルが自動作 成され対応する処理 を記述 ネットワークアナライザ からの取り込み用GUI
© Copyright 2024 ExpyDoc