Document

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